Copied to clipboard

Flag this post as spam?

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


  • Andres Cano 22 posts 42 karma points
    Apr 08, 2011 @ 16:17
    Andres Cano
    0

    Can't Sort Content Using Xslt

    Hi Everyone, im new to the forum, i like umbraco a lot, and im trying to use it in every single proyect that i have

    Now, i have a big question about what is the best way to aproach sort functions using xslt

    i have a front page where all the info for birthdays in my intranet is showed with name, month and day, but i just can find a way to sort the output of the macro in my frontpage.

    this is the code of the xlst.

    <?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:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
      exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">

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

    <xsl:param name="currentPage"/>

    <!-- update this variable on how deep your site map should be -->
    <xsl:variable name="maxLevelForSitemap" select="6"/>
        
    <xsl:template match="/">
    <xsl:call-template name="drawNodes">  
      <xsl:with-param name="parent" select="$currentPage/ancestor-or-self::* [@isDoc and @level=1]"/>
      
    </xsl:call-template>  
    </xsl:template>
        
       
        
    <xsl:template name="drawNodes">
    <xsl:param name="parent"/> 
      <xsl:if test="umbraco.library:IsProtected($parent/@id, $parent/@path) = 0 or (umbraco.library:IsProtected($parent/@id, $parent/@path) = 1 and umbraco.library:IsLoggedOn() = 1)">
        <xsl:for-each select="$parent/*[@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevelForSitemap]"
          
          <!--<xsl:value-of select="name(./*[@isDoc])"/><br/>-->
          
          <xsl:sort select="birthdayEY" order="descending"/>
          
          <xsl:if test="@template = 1165"<!-- Fix to all folders with template id -->
            
            
            <xsl:variable name="DateToday" select="umbraco.library:CurrentDate()"/>
            
            <xsl:if test="umbraco.library:FormatDateTime($DateToday, 'MMMM') = umbraco.library:FormatDateTime(birthdayEY, 'MMMM') ">

            <tr>
            <td>  
              <span style="color:#747170"<xsl:value-of select="nameEY"/></span>
            </td>
            <td>  
               <xsl:value-of select="umbraco.library:FormatDateTime(birthdayEY, 'MMMM d')"/>
            </td>
            </tr>
            
            </xsl:if>
          
          </xsl:if
          
     
          <xsl:if test="count(./* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevelForSitemap]) &gt; 0">   

            <xsl:call-template name="drawNodes">    
              <xsl:with-param name="parent" select="."/>    
            </xsl:call-template>
            
          </xsl:if

        </xsl:for-each>

      </xsl:if>
    </xsl:template>    
        
    </xsl:stylesheet>

    and this is a picture of the output content in the front page


    any ideas? thanks a lot for help i really need it!

  • Daniel Bardi 927 posts 2562 karma points
    Apr 08, 2011 @ 18:16
    Daniel Bardi
    0

    I'd recommend the AutoSort package... it will autosort the nodes so they are ready prior to render.  You can sort by node names or any property.

    http://our.umbraco.org/projects/backoffice-extensions/auto-sort

  • Fergus Davidson 309 posts 588 karma points
    Apr 08, 2011 @ 18:26
    Fergus Davidson
    0

    i am assuming the the birthdays are stored as a complete date and are therefore ordered as date of birth by year, month, day.

    i don't think that the autosort will work for this unless the day, month and year are stored seperately. 

    you presumably need to sort by day within a given month

    i'll have a think

  • Daniel Bardi 927 posts 2562 karma points
    Apr 08, 2011 @ 19:06
    Daniel Bardi
    0

    This shoudl work for you: 

    <xsl:sort select="umbraco.library:FormatDateTime(birthdayEY, 'mm dd')" order="descending"/>
  • Andres Cano 22 posts 42 karma points
    Apr 08, 2011 @ 19:20
    Andres Cano
    0

    Thanks a lot for help works perfect, i just change the descending for ascending, and now i have it sorted as i want too, have a nice day!, thanks a lot again!

  • Daniel Bardi 927 posts 2562 karma points
    Apr 08, 2011 @ 19:22
    Daniel Bardi
    0

    Your very welcome... glad it worked for you.

Please Sign in or register to post replies

Write your reply to:

Draft