Adding Banding in a CQWP

137

CQWP Banding using XLST

The Content Query Web Part aggregates SharePoint content. Banding can be added by customizing the associated XSLT in a file called ItemStyle.XSL. One can optionally customize the XSL in a copy of this file, and then customize the CQWP to use the customized file. I wanted to customize the list of Blog posts to be condensed, with a truncated preview. Here’s how to do it.

Tuning the CQWP

Use the following settings in the CQWP to create a list of just Blog Post Links:
1. List Type: Posts
2. Content Types: List Content Types
3. Show items: Post
4. Group by: Created By
5. Sort by: Created
6. Limit: 25
7. Group style: Banded
8. Item Style: Title Only: Important, this determines the XSLT template customized and used later
9. Fields to display: Title: Title (only)

Optional:
1. Export Web Part
2. Open in Notepad
3. Edit and change the XSLT file ItemStyle.XSL referenced, to point to a different file
4. Save
5. Import as a web part

Tuning the XSLT

Locate the XSLT template processing the item, and refine it. If a new XSL file is desired, copy ItemStyle.XSL and edit that one. Here’s the customized commented code for the TitleOnly template:

<xsl:template name="TitleOnly" match="Row[@Style='TitleOnly']" 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="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>

<!-- Joel's alternating row colorings-->
        
        <xsl:variable name="CurPosition" select="count(./preceding-sibling::*)" />
                
        <xsl:variable name="AlternatingCssClass">
        <xsl:choose>
                <xsl:when  test="($CurPosition mod 2 = 0)">
                   <xsl:value-of select="'#eeeeee'" />
               </xsl:when>                
               <xsl:otherwise>
                  <xsl:value-of select="'white'" />
              </xsl:otherwise>
            </xsl:choose>
           </xsl:variable>

<!-- Joel's table, created for each row, 300 wide seems a good number -->
<!-- Joel's decision to use the existing 'description' class, to get more vertical compression than 'tem'-->
<!-- Joel's create a table, row and cell around each link, to allow banding -->
              <div class="description">    
              <table width="300">
              <tr style="background:{$AlternatingCssClass}">
              <td> 
             
         <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
                     
         <a href="{$SafeLinkUrl}" title="{@LinkToolTip}">
             
          <xsl:if test="$ItemsHaveStreams = 'True'">
            <xsl:attribute name="onclick">
              <xsl:value-of select="@OnClickForWebRendering"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
            <xsl:attribute name="onclick">
              <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
            </xsl:attribute>
          </xsl:if>
          <xsl:value-of select="$DisplayTitle"/>
        </a>
        <!-- Joel's HTML for closing the data cell, row, and table-->
        </td>
        </tr> 
        </table>   
      </div>

    </xsl:template>

Share this entry

Leave a Reply

Your email address will not be published. Required fields are marked *

Table of Contents

Categories

Categories