webForumDet fria alternativet

XSLT + noden under rootparent.

XML

1 svar · 500 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#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

Medlem 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

297 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
166 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)