Florian @ SharePoint UserGroup



Content Query Webpart erweitern für die UserGroup 

Tags:

Alles neu macht der Mai – diesmal sogar schon im April ;-)

Wie ihr evt. schon gesehen habt, haben wir die SharePoint UserGroup komplett neu überarbeitet. Unter anderem gibt's ein neues Layout, mehr Blogging-Funktionalitäten (kommt noch ein seperater Post) und die Startseite wurde mit dynamischen Inhalt gefüllt. Hierfür haben wir uns dem Content Query Webpart bedient und mit ein wenig Customizing kann man da auch ein wenig was machen :)

Um z.B. die letzten Blog Beiträge mit einem Teaser und ein paar Infos wie Ersteller und Datum hinzubekommen

Ist folgendes notwendig:

In der Style Library unter XSL Style Sheets gibt es eine ItemStyle.xsl über diese werden die Styles

befüllt. Dort kann man einfach einen bestehendes xsl:template kopieren und mit ein wenig gespür für XSL kann man allerhand einstellen (ich will euch nicht mit Einzelheiten quälen, daher hier nur der Code unseres Templates)

<xsl:template name="DetailedStyle" match="Row[@Style='DetailedStyle']" mode="itemstyle">

<xsl:variable name="SafeLinkUrl">

<xsl:call-template name="OuterTemplate.GetSafeLink">

<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>

</xsl:call-template>

</xsl:variable>

<xsl:variable name="SafeImageUrl">

<xsl:call-template name="OuterTemplate.GetSafeStaticUrl">

<xsl:with-param name="UrlColumnName" select="'ImageUrl'"/>

</xsl:call-template>

</xsl:variable>

<xsl:variable name="DisplayTitle">

<xsl:call-template name="OuterTemplate.GetTitle">

<xsl:with-param name="Title" select="@Title"/>

<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>

</xsl:call-template>

</xsl:variable>

<xsl:variable name="LinkTarget">

<xsl:if test="@OpenInNewWindow = 'True'" >_blank</xsl:if>

</xsl:variable>

<xsl:variable name="Author">

             <xsl:call-template name="OuterTemplate.GetGroupName">

             <xsl:with-param name="GroupName" select="@Author"/>

             <xsl:with-param name="GroupType" select="'User'"/>

             </xsl:call-template>

        </xsl:variable>

        <xsl:variable name="Created">

                <xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />

        </xsl:variable>

     <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>

<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">

<xsl:value-of select="$Created"/> - <xsl:value-of select="$DisplayTitle"/>

</a>

 

                    Erstellt von <xsl:value-of select="$Author" />

                         <xsl:value-of select="substring(@Body, 0, 300)" disable-output-escaping="yes"/>

                         <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="Lesen Sie mehr"> ...</a>

            <hr/>

</xsl:template>

 

Damit der angegebene Body nun auch wirklich beim Webpart erscheint, muss man noch etwas tun und zwar den Query-Webpart exportieren, die *.webpart in einem Textpad öffnen und in unserem Fall müssen wir einfach das Property CommonViewFields erweitern:

<property name="CommonViewFields" type="string">Body,Note;</property>

So dann Webpart importieren und das wars dann auch schon.

Ein paar Kleinigkeiten über die man gerne stolpert:

  • Bei CommonViewFields muss immer der InternalName und der FieldType verwendet werden (also in unserem Fall Body,Note;) -> UND AUF GAR KEINEN FALL LEERZEICHEN!!!!
  • Man muss immer auf die SharePoint Logik achten, z.B. wollte ich auch einen Webpart erstellen ,der alle Posts gegliedert nach Kategorien anzeigt -> was aber auf keinen Fall geht, weil die Kategorien ein MultiLookup ist und daher kann man auch nicht Gruppieren ;-)
  • Beim Verlinken wird die CopyUtil.aspx verwendet, die aber für den anonymen Access nicht verwendet werden kann – es gibt hier zwei Möglichkeiten 1) CustomCopyUtil.aspx oder 2) die SafeLinkUrl anpassen – in meinem Fall habe ich das wie folgt gemacht:

    <xsl:variable name="SafeLinkUrl">

    - <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">

      <xsl:with-param name="UrlColumnName" select="'LinkUrl'" />

      </xsl:call-template>

      </xsl:variable>

      <xsl:variable name="trimmedID1" select="substring-before($SafeLinkUrl, '_')" />

      <xsl:variable name="trimmedID2" select="substring-after($trimmedID1, 'Posts/')" />

      <xsl:variable name="trimmedID3" select="substring-before($SafeLinkUrl, 'Posts/')" />

      <xsl:variable name="newURL" select="concat($trimmedID3,'../','Post.aspx?ID=',$trimmedID2)" />

 

 

 

Für genauere Informationen könnt ihr mich gerne kontaktieren.

 
Posted by f.grasel on 23-Apr-08
0 Comments  |  Trackback Url  |  Link to this post | Bookmark this post with:        
 

Comments

Name

Url

Email

Comments

CAPTCHA Image Validation