Je développe un skin pour DotNetNuke 5 en utilisant le composant de menu DNN Done Right qui utilise un XSL-T personnalisé pour convertir le sitemap XML en navigation HTML.DotNetNuke + XPath = Menu de navigation personnalisé
L'utilisation de XSL-T permet de sauver des vies par rapport aux autres façons de créer un menu de navigation. Cependant, j'ai eu des problèmes à faire quelque chose d'un peu plus complexe, étant donné que je suis un nouveau venu dans XML-T et XPath.
Ce que je suis en train de réaliser est la suivante:
- Ignore niveau 0 nœuds
- boucle à travers tous les niveaux 1 noeuds dans la hiérarchie sélectionnée
- Une fois que le nœud de niveau 1 sélectionné est trouvé , commencez à boucler dans la hiérarchie/la structure du fil d'Ariane jusqu'au niveau actif.
- Une fois au niveau du noeud actif, boucle à travers et afficher toutes les frères et sœurs de ce niveau
- ensuite terminer une boucle à travers le niveau 1 noeuds
Ci-dessous est un bloc XML exemple d'un plan du site du composant de menu les usages.
<Root>
<root>
<node id="37" text="Home" url="http://www.dnndoneright.com/Home.T37.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="0" >
<description >Upgrade your standard DNN menu - automatically and for free - to an SEO-optimised, accessible, mobile-friendly, cross-browser menu.</description>
</node>
<node id="56" text="DNN Menu" url="http://www.dnndoneright.com/DNN-Menu.T56.aspx" enabled="1" selected="0" breadcrumb="1" first="0" last="0" only="0" depth="0" >
<node id="97" text="Menu features" url="http://www.dnndoneright.com/Menu-features.T97.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="1" />
<node id="111" text="Pre-built templates" url="http://www.dnndoneright.com/Pre-built-templates.T111.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="1" >
<node id="94" text="Standard DNN menu, upgraded" url="http://www.dnndoneright.com/Standard-DNN-menu-upgraded.T94.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="2" />
<node id="124" text="Superfish template" url="http://www.dnndoneright.com/Superfish-template.T124.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="106" text="Treeview template" url="http://www.dnndoneright.com/Treeview-template.T106.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="107" text="Accordion template" url="http://www.dnndoneright.com/Accordion-template.T107.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="112" text="Dropdown template" url="http://www.dnndoneright.com/Dropdown-template.T112.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="96" text="Mega-menu" url="http://www.dnndoneright.com/Mega-menu.T96.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="1" only="0" depth="2" />
</node>
<node id="113" text="Getting started" url="http://www.dnndoneright.com/Getting-started.T113.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="1" >
<node id="114" text="Installing the menu" url="http://www.dnndoneright.com/Installing-the-menu.T114.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="2" />
<node id="115" text="Upgrading a SolPart menu" url="http://www.dnndoneright.com/Upgrading-a-SolPart-menu.T115.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="116" text="Upgrading a DNNMenu" url="http://www.dnndoneright.com/Upgrading-a-DNNMenu.T116.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="117" text="Installing a template" url="http://www.dnndoneright.com/Installing-a-template.T117.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="118" text="Adding to a skin" url="http://www.dnndoneright.com/Adding-to-a-skin.T118.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="1" only="0" depth="2" />
</node>
<node id="119" text="Customising templates" url="http://www.dnndoneright.com/Customising-templates.T119.aspx" enabled="0" selected="0" breadcrumb="1" first="0" last="1" only="0" depth="1" >
<node id="120" text="Standard options" url="http://www.dnndoneright.com/Standard-options.T120.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="2" />
<node id="121" text="Specifying filenames" url="http://www.dnndoneright.com/Specifying-filenames.T121.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="2" />
<node id="122" text="XML format" url="http://www.dnndoneright.com/XML-format.T122.aspx" enabled="1" selected="1" breadcrumb="1" first="0" last="0" only="0" depth="2" />
<node id="123" text="Creating custom templates" url="http://www.dnndoneright.com/Creating-custom-templates.T123.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="1" only="0" depth="2" />
</node>
</node>
<node id="87" text="Download" url="http://www.dnndoneright.com/Download.T87.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="0" only="0" depth="0" />
<node id="85" text="Contact" url="http://www.dnndoneright.com/Contact.T85.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="1" only="0" depth="0" >
<node id="129" text="Blog" url="http://www.dnndoneright.com/Blog.T129.aspx" enabled="1" selected="0" breadcrumb="0" first="1" last="0" only="0" depth="1" />
<node id="130" text="Forum" url="http://www.dnndoneright.com/Forum.T130.aspx" enabled="1" selected="0" breadcrumb="0" first="0" last="1" only="0" depth="1" />
</node>
</root>
</Root>
Voici également mon point de départ (incorrect), juste pour exposer mon manque de connaissances XSL/XPath. (Mon code est erroné, car il répertorie tous les noeuds L1, plutôt que seulement les noeuds L1 dans la hiérarchie sélectionnée)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<div class="SideMenu">
<!-- Loop through all L1 nodes -->
<xsl:for-each select="Root/root/node/node">
<xsl:if test="@enabled='1'" >
<!-- Only use L1 in the current hierarchy -->
<div>
[ <xsl:value-of select="@text"/>: <xsl:value-of select="@depth"/> ]
</div>
</xsl:if>
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>
Conseil: S'il vous plaît ne pas poster des déclarations XML ainsi que des exemples de code XML. Le codage dans la déclaration (ISO-8859-1) et le codage réel (UTF-8, comme le reste de la page Web) diffèrent. – Tomalak
déclarations XML supprimées –