Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Daniel Dawson 27 posts 47 karma points
    Sep 01, 2011 @ 14:21
    Daniel Dawson
    0

    Blog4Umbraco - Styling the blog posts lists XSLT

    Hi there,

    I currently have a website built around the 960 grid system which is going great so far. I need to be able to style the first two sets of blog posts using the "list blog posts" XSLT file and then have the XSLT style the next two sets of blog posts the same way, and then the next two after that etc etc.

    This is the code so far:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [
      <!ENTITY nbsp "&#x00A0;">
    ]>
    <xsl:stylesheet
      version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxml="urn:schemas-microsoft-com:xslt"
      xmlns:umbraco.library="urn:umbraco.library"
      xmlns:tagsLib="urn:tagsLib"
      xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings"
      xmlns:BlogLibrary="urn:BlogLibrary"
      exclude-result-prefixes="msxml umbraco.library tagsLib Exslt.ExsltStrings BlogLibrary">


      <xsl:output method="html" omit-xml-declaration="yes"/>

      <xsl:param name="currentPage"/>
       <xsl:variable name="Width" select="280" />
      <xsl:variable name="Height" select="auto" />
        
      <xsl:variable name="excerptLength">
        <xsl:choose>
          <xsl:when test="string(/macro/excerptLength) != ''">
            <xsl:value-of select="/macro/excerptLength"/>
          </xsl:when>
          <xsl:otherwise>100</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
        
      <xsl:variable name="numberOfPosts" select="10"/>

      <xsl:variable name="pageNumber">
        <xsl:choose>
          <xsl:when test="umbraco.library:RequestQueryString('page') &lt;= 0 or string(umbraco.library:RequestQueryString('page')) = '' or string(umbraco.library:RequestQueryString('page')) = 'NaN'">1</xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="umbraco.library:RequestQueryString('page')"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>

      <xsl:variable name="filter">
        <xsl:choose>
          <xsl:when test="string-length(umbraco.library:Request('filterby')) &gt; 0">
            <xsl:value-of select="umbraco.library:Request('filterby')"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="''"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>

      <xsl:variable name="numberOfRecords">
        <xsl:choose>
          <xsl:when test="$filter = ''">
            <xsl:value-of select="count($currentPage/ancestor-or-self::Blog//BlogPost)"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="count($currentPage/ancestor-or-self::Blog//BlogPost [contains(Exslt.ExsltStrings:lowercase(./tags), Exslt.ExsltStrings:lowercase($filter))])"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>

      <xsl:template match="/">


        <xsl:if test="$filter != ''">
          <h2 class="page-title">
            Archive for tag:
            <span>
              <xsl:value-of select="$filter"/>
            </span>
          </h2>
        </xsl:if>
        
        <xsl:if test="$currentPage/@nodeTypeAlias = 'DateFolder'">
          <h2 class="page-title">
            Monthly Archives: <xsl:value-of select="umbraco.library:FormatDateTime(concat($currentPage/../@nodeName,'-',$currentPage/@nodeName,'-11T10:24:46'),'MMMM yyyy')"/>
          </h2>
        </xsl:if>

        <xsl:if test="$numberOfRecords &gt; $numberOfPosts">
        <div id="nav-above" class="navigation">

          <div class="nav-previous">
            <xsl:if test="(($pageNumber ) * $numberOfPosts) &lt; ($numberOfRecords)">
              <span class="meta-nav">&#171; </span>
              <href="?page={$pageNumber +1}">Older posts</a>
            </xsl:if>
          </div>

          <div class="nav-next">
            <xsl:if test="$pageNumber &gt; 1">
              <href="?page={$pageNumber -1}">Newer posts</a>
              <span class="meta-nav"&#187;</span>
            </xsl:if>
          </div>

        </div>
        </xsl:if>
        
        <xsl:if test="$filter = ''">

          
          <xsl:for-each select="$currentPage/ancestor-or-self::Blog//BlogPost">
            <xsl:sort select="./PostDate" order="descending" />

            <xsl:if test="position() &gt; $numberOfPosts * (number($pageNumber)-1) and
            position() &lt;= number($numberOfPosts * (number($pageNumber)-1) +
            $numberOfPosts )">
              
              <xsl:call-template name="showpost">
                <xsl:with-param name="post" select="."/>
              </xsl:call-template>
          
            </xsl:if>
            
           </xsl:for-each>
        </xsl:if>

        <xsl:if test="$filter != ''">

          <xsl:for-each select="$currentPage/ancestor-or-self::Blog//BlogPost [contains(Exslt.ExsltStrings:lowercase(./tags), Exslt.ExsltStrings:lowercase($filter))]">
            <xsl:sort select="./PostDate" order="descending" />
            <xsl:if test="position() &gt; $numberOfPosts * (number($pageNumber)-1) and
            position() &lt;= number($numberOfPosts * (number($pageNumber)-1) +
            $numberOfPosts )">
              <xsl:call-template name="showpost">
                <xsl:with-param name="post" select="."/>
              </xsl:call-template>
            </xsl:if>
          </xsl:for-each>
        </xsl:if>

        <div id="nav-below" class="navigation">

          <div class="nav-previous">
            <xsl:if test="(($pageNumber ) * $numberOfPosts) &lt; ($numberOfRecords)">
              <span class="meta-nav">&#171; </span>
              <href="?page={$pageNumber +1}">Older posts</a>
            </xsl:if>
          </div>

          <div class="nav-next">
            <xsl:if test="$pageNumber &gt; 1">
              <href="?page={$pageNumber -1}">Newer posts</a>
              <span class="meta-nav"&#187;</span>
            </xsl:if>
          </div>

        </div>


      </xsl:template>

      <xsl:template name="showpost">
        <xsl:param name="post"/>
        <div class="blog-post grid_6 alpha">
        <div class="hentry post publish author-{$post/@writername} tag-boat tag-lake {umbraco.library:FormatDateTime($post/@updateDate, 'yYYYY mMM')} y2008 m10 d17 h04">
          <h2 class="entry-title" id="post-{$post/@id}">
            <href="{umbraco.library:NiceUrl($post/@id)}" title="Permalink to {$post/@nodeName}">
              <xsl:value-of select="$post/@nodeName"/>
            </a>
          </h2>
          <hr/><href="{umbraco.library:NiceUrl($post/@id)}" title="Permalink to {$post/@nodeName}">
              <img src="/imageGen.ashx?image={umbraco.library:UrlEncode(blogPostImage)}&amp;width={$Width}&amp;height={$Height}" width="{$Width}" height="{$Height}" alt="{@nodeName}" title="{@nodeName}" />
            </a>
          
                
          

          <div class="entry-date">
            <abbr class="published" title="umbraco.library:ShortDate($post/PostDate">
              <xsl:value-of select="umbraco.library:LongDate($post/PostDate)"/>
            </abbr>
          </div>


          <div class="entry-content">
            <!--<xsl:value-of select="$post/bodyText" disable-output-escaping="yes"/>-->
            <xsl:choose>
                    <xsl:when test="string($excerptLength) != '0'">
                      <p><xsl:value-of select="umbraco.library:TruncateString(umbraco.library:StripHtml(bodyText), 
                        number($excerptLength), '...')" disable-output-escaping="yes"/><href="{umbraco.library:NiceUrl(@id)}" Title="More Info">more info.</a></p>
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="bodyText" disable-output-escaping="yes"/>
                    </xsl:otherwise>
                  </xsl:choose>
          </div>

          <div class="entry-meta">

            <span class="author vcard">
              By: <span class="fn n">
                <xsl:value-of select="$post/@creatorName"/>
              </span>
            </span>
            <span class="meta-sep"|</span>
            <span class="tag-links">
              <xsl:variable name="tags" select="tagsLib:getTagsFromNode(@id)" />
              <xsl:choose>
                <xsl:when test="count($tags/tags/tag) = 0">
                  Not tagged
                </xsl:when>
                <xsl:otherwise>
                  Tagged:
                  <xsl:for-each select="$tags/tags/tag">
                    <href="{umbraco.library:NiceUrl($currentPage/ancestor-or-self::Blog/@id)}?filterby={.}" rel="tag">
                      <xsl:value-of select="."/>
                    </a>
                    <xsl:if test="position() != last()"></xsl:if>
                  </xsl:for-each>
                </xsl:otherwise>
              </xsl:choose>
            </span>
            <span class="meta-sep"</span>
            <xsl:variable name="numberofcomments" select="count(BlogLibrary:GetCommentsForPost($post/@id)//comment)"/>
            <span class="comments-link">
              <xsl:choose>
                <xsl:when test="$numberofcomments = 0">
                  <xsl:choose>
                    <xsl:when test="string($post/data [@alias = 'closeComments']) = '1'">
                      Comments closed
                    </xsl:when>
                    <xsl:otherwise>
                      <href="{umbraco.library:NiceUrl(@id)}#comments">Leave comment</a>
                    </xsl:otherwise>
                  </xsl:choose>
                </xsl:when>
                <xsl:when test="$numberofcomments = 1">
                  <href="{umbraco.library:NiceUrl(@id)}#comments">1 comment</a>
                </xsl:when>
                <xsl:otherwise>
                  <href="{umbraco.library:NiceUrl(@id)}#comments">
                    <xsl:value-of select="$numberofcomments"/> comments
                  </a>
                </xsl:otherwise>
              </xsl:choose>
            </span>
          </div>
        </div>
        </div><!--portfolio-post grid_6-->
      </xsl:template>
    </xsl:stylesheet>

    Thanks,

    Daniel

Please Sign in or register to post replies

Write your reply to:

Draft