Copied to clipboard

Flag this post as spam?

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


  • Claushingebjerg 886 posts 2415 karma points
    Jan 19, 2012 @ 10:38
    Claushingebjerg
    0

    Grouping nodes in list

    Hi im trying to wrap subpages from an id in pairs of 2, but im kinda stuck.
    So any pointer would be very nice.
    Right now i have the following code, which i read up on somewhere, but i think either my scpoping or matching is off.

    <xsl:variable name="source" select="1056"/>
    <xsl:variable name="n" select="number(2)"/>

    <xsl:template match="/">
      <div id="testimonials">
        <xsl:apply-templates select="umbraco.library:GetXmlNodeById($source)/node [position() mod $n = 1]"/>
    </div>
    </xsl:template>  
      
    <xsl:template match="node">
    <div class="clients-testimonials">
      <xsl:for-each select=". | following-sibling::item[position() &lt; $n]">
        <blockquote>
          Output node values here
        </blockquote 
      </xsl:for-each>
    </div>    
    </xsl:template>        
    </xsl:stylesheet>
  • Rodion Novoselov 694 posts 859 karma points
    Jan 19, 2012 @ 11:01
    Rodion Novoselov
    0

    Hi. It can be done e.g. the following way:

      <xsl:for-each select="$node/*[@isDoc][string(umbracoNaviHide) != '1']">
        <xsl:if test="position() mod 2 = 1">
          <xsl:value-of select="'&lt;div&gt;'" disable-output-escaping="yes"/>
        </xsl:if>
        <p>
        <xsl:value-of select="@nodeName"/>
        </p>
        <xsl:if test="position() mod 2 = 0 or position() = last()">
          <xsl:value-of select="'&lt;/div&gt;'" disable-output-escaping="yes"/>
        </xsl:if>
      </xsl:for-each>
  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jan 19, 2012 @ 11:07
    Chriztian Steinmeier
    0

    Hi Claus,

    In your node template you're selecting <item> siblings - probably a typo, right? Try this instead:

    <xsl:variable name="source" select="1056" />
    <xsl:variable name="n" select="2" />
    
    <xsl:template match="/">
        <div id="testimonials">
            <xsl:apply-templates select="umbraco.library:GetXmlNodeById($source)/node[position() mod $n = 1]" />
        </div>
    </xsl:template>  
    
    <xsl:template match="node">
        <div class="clients-testimonials">
            <xsl:for-each select=". | following-sibling::node[position() &lt; $n]">
                <blockquote>
                    Output node values here
                </blockquote> 
            </xsl:for-each>
        </div>
    </xsl:template>
    

    /Chriztian

  • Claushingebjerg 886 posts 2415 karma points
    Jan 19, 2012 @ 11:36
    Claushingebjerg
    0

    Hmmm Chriztian.
    It still doesnt work.It renders the main div "Testemonials" but doesnt render "client-testemonials" at all.

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jan 19, 2012 @ 11:42
    Chriztian Steinmeier
    0

    Hi Claus - works on my machine :-)

    Ok, you're using the old schema, right? (Hence the "node" element)

    /Chriztian

     

  • Claushingebjerg 886 posts 2415 karma points
    Jan 19, 2012 @ 11:43
    Claushingebjerg
    0

    no, im on 4.7.1

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jan 19, 2012 @ 11:48
    Chriztian Steinmeier
    0

    OK - that explains it - you need to use *[@isDoc] instead of node (or better: If they're all the same Document Type - use the alias, e.g.: Testimonial)

    <xsl:templatematch="/">
                   
    <divid="testimonials">
                   
    <xsl:apply-templatesselect="umbraco.library:GetXmlNodeById($source)/*[@isDoc][position() mod $n = 1]"/>
                   
    </div>
           
    </xsl:template>  

           
    <xsl:templatematch="*[@isDoc]">
                   
    <divclass="clients-testimonials">
                           
    <xsl:for-eachselect=". | following-sibling::*[@isDoc][position() &lt; $n]">
                                   
    <blockquote>
                                           
    <xsl:value-ofselect="@nodeName"/>
                                   
    </blockquote>
                           
    </xsl:for-each>
                   
    </div>
           
    </xsl:template>

    /Chriztian

    EDIT: Updated to use GetXmlNodeById()

  • Claushingebjerg 886 posts 2415 karma points
    Jan 19, 2012 @ 12:52
    Claushingebjerg
    0

    im going crazy!

    Ive copy/pasted your code, but it still doesnt render the inner div... Ive been staring at it for ages, but cant seem to find any errors! 

    Doing a normal

    <xsl:for-each select="umbraco.library:GetXmlNodeById(1056)/* [@isDoc and string(umbracoNaviHide) != '1']">
          <xsl:value-of select="@nodeName"/>
    </xsl:for-each>

    Works fine, so the nodes are published and accessible...

  • Rodion Novoselov 694 posts 859 karma points
    Jan 19, 2012 @ 12:57
    Rodion Novoselov
    0

    It seems there's a misspelling - "node" means any node with the name "node".

    To select all nodes you need to spell it as "node()".

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jan 19, 2012 @ 13:00
    Chriztian Steinmeier
    0

    Hi Claus,

    My bad!! Really - I forgot to use GetXmlNodeById() - (on my local machine I use something else that doesn't work in Umbraco context).

    I've updated the code above - please try again.

    @Rodion: "node" in this context is actually from the old XML Schema in Umbraco; Bit confusing, yes, if you're used to XSLT :-)

  • Claushingebjerg 886 posts 2415 karma points
    Jan 19, 2012 @ 13:05
    Claushingebjerg
    0

    SUCCESS!!!! i thought

    //*

    was som kind of fancy shorthand :)

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jan 19, 2012 @ 13:12
    Chriztian Steinmeier
    0

    It's a very bad shorthand - but works fine when you've only got a small set of nodes for testing :-)

    /Chriztian

  • abhijeetwaychal 5 posts 25 karma points
    Dec 02, 2012 @ 14:40
    abhijeetwaychal
    0

    Thanks Chriztian and Claus

    Updatd XSLT worked at it is with modifcation //*

     



  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies