webForumDet fria alternativet

XSLT + noden under rootparent.

1 svar · 500 visningar · startad av Fredde Mannen

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#1

Sitter och leker lite med XSLT och umbraco.

Skall skapa en meny, där jag kommit hyfsat långt:

<?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp " "> ]>  
 <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"  
     exclude-result-prefixes="msxml umbraco.library">  
 <xsl:output method="xml" omit-xml-declaration="yes"/>  
   
 <xsl:param name="currentPage"/>  
 <xsl:param name="startLevel" select="1"/>  
   
 <xsl:template match="/">  
     <xsl:if test="count($currentPage/ancestor-or-self::node [@level = $startLevel]/node) > 0">  
         <ul id="navigation">  
             <xsl:for-each select="$currentPage/ancestor-or-self::node [@level = $startLevel]/node">  
                 <xsl:call-template name="drawnode">  
                     <xsl:with-param name="level" select="1"/>  
                 </xsl:call-template>  
             </xsl:for-each>  
         </ul>  
     </xsl:if>  
 </xsl:template>  
   
 <xsl:template name="drawnode">  
     <xsl:param name="level"/>  
     <li>  
         <xsl:choose>
             <xsl:when test="@id=$currentPage/@id">  
               	<xsl:attribute name="class">level<xsl:value-of select="$level"/>selected</xsl:attribute>  
             </xsl:when>  
             <xsl:otherwise>
                 <xsl:attribute name="class">level<xsl:value-of select="$level"/></xsl:attribute>  
             </xsl:otherwise>
         </xsl:choose> 
         <a href="{umbraco.library:NiceUrl(@id)}">  
             <xsl:value-of select="@nodeName"/>  
         </a>  
     </li>  
     <xsl:if test="count(descendant-or-self::node [@id=$currentPage/@id]) > 0">  
         <xsl:for-each select="node">  
             <xsl:call-template name="drawnode">  
                 <xsl:with-param name="level" select="number($level)+1"/>  
             </xsl:call-template>  
         </xsl:for-each>  
     </xsl:if>  
 </xsl:template>  
   
 </xsl:stylesheet>

Denna funkar bra, men jag vill ha till yttligare en funktionallitet och det är att få noden som är under rootparent men och är förälder i ledet till de barn som markeras.

(umbraco) Navigationen består av foldern
Hemsida (som har barnen)
- Startsida
- Information
- etc.

Information har barnen
- Utbildning
- etc.

Denna del i en av When-statement för att säga villket barn i noderna som skall få en css-class som sklijer sig från de andra.

 <xsl:when test="@id=$currentPage/@id">

Och det är nog i denna jag måste få in en or som säger att även topföräldern till det barn av dessa noder skall markeras också..

wwwek

jarvkloMedlem sedan juli 20013 378 inlägg
#2

Hmm...

Om vi säger såhär...
Om du länkar till en fil med XML-koden du vill bearbeta, och också talar om exakt vilka av noderna i just den XML-filen du vill ha "markerade" blir det, om inte annat, enklare att lösa problemet (för då kan man testa sina hypoteser mot riktiga data istället för att gissa hur Umbraco gör ;) )
Jag *tror* jag kan gissa mig fram med lite möda och inspiration baserat på det du skriver, men det är enklare att hjälpa till när man har konkreta data att utgå ifrån och slipper riskera att lägga tid på något som senare kanske visar sig vara ett missförstånd :birp

125 ms totalt · 3 externa anrop · v20260731065814-full.102f7fcd
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)