我试图做的是替换内容端的标题结构以进行一些剧烈的结构更改,以便一次性将整个标题移动到主题端。
我的问题是这个,我无法取代所选择的'列出具有“活动”的列表项的课程。在这种情况下,globalnav是三个级别的深度,不同级别的结构不同,因此一次性发布有点大。基本思路是:
<xsl:variable name="globalnav" css:select="#portal-globalnav"/>
<replace css:content="#portal-header">
<ul id="borked-nav">
<xsl:for-each select="$globalnav/li">
<li>
<xsl:if test="./@class = 'selected'">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="./*"/>
</li>
</xsl:for-each>
</ul>
</replace>
例如,工作是什么:
<xsl:variable name="globalnav" css:select="#portal-globalnav"/>
<replace css:content="#portal-header">
<ul id="borked-nav">
<xsl:for-each select="$globalnav/li">
<li>
<xsl:if test="./@class = 'selected'">
<xsl:attribute name="class">super-active</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="./*"/>
</li>
</xsl:for-each>
</ul>
</replace>
什么行不通(最终上课=&#34;真的&#34;):
<xsl:attribute name="class">active really active</xsl:attribute>
或在主题面板中定义$ active并尝试使用或实际使用jbot更改模板以使该类处于活动状态(我尝试添加,因此选择活动真的&#39;作为模板中的类在jbot会产生一个真正选择的课程。
我无法在简单的设置中重现它,因此我将在下面发布完整的代码。有没有人知道为什么它会被剥夺,我没有使用&#39; active&#39;我的规则中的任何地方下面的代码片段包含在rules.xml中定义的变量的xinclude。
<replace css:content="#portal-header">
<div id="header">
<div class="top-bar">
<div class="menu-button">
<span class="icon"></span>
</div>
<a class="logo" href="{$logo/@href}" accesskey="{$logo/@accesskey}" title="{$logo/@title}" ></a>
<span class="search-button">
<span class="label">Zoeken...</span><span class="icon"></span>
</span>
</div>
<div class="menu-wrapper">
<div class="menu">
<ul class="main-level">
<xsl:for-each select="$globalnav/li">
<li class="{@class}">
<xsl:comment>
<xsl:if test="@class = 'selected'">
<xsl:attribute name="class">super-active</xsl:attribute>
</xsl:if>
</xsl:comment>
<xsl:apply-templates select="./a"/>
<xsl:if test="./ul">
<div class="mega-menu level-1">
<div class="menu-left-wrapper">
<h2>Onderwerpen</h2>
<ul class="sub-level-1">
<xsl:for-each select="./ul/li">
<li class="{@class}">
<xsl:comment>
<xsl:if test="@class = 'selected'">
<xsl:attribute name="class">super-active</xsl:attribute>
</xsl:if>
</xsl:comment>
<xsl:apply-templates select="./a"/>
<xsl:if test="./ul">
<div class="mega-menu">
<h2>Artikelen binnen onderwerp</h2>
<ul class="sub-level-2">
<xsl:for-each select="./ul/li">
<li>
<xsl:if test="@class = 'selected'">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="./a"/>
</li>
</xsl:for-each>
</ul>
</div>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</div>
</div>
</xsl:if>
</li>
</xsl:for-each>
<xsl:if test="$articles">
<li class="light">
<a class="" href="#">Snel naar<span class="arrow"></span></a>
<div class="mega-menu level-1">
<div class="menu-left-wrapper">
<h2><xsl:apply-templates select="$articles-heading"/></h2>
<xsl:apply-templates select="$articles"/>
</div>
</div>
</li>
</xsl:if>
</ul>
</div>
<xsl:if test="$helpdesks or $products">
<div class="sidebar">
<div class="content">
<xsl:if test="$helpdesks">
<h2><xsl:apply-templates select="$helpdesks-heading"/></h2>
<div class="buttons">
<xsl:for-each select="$helpdesks/li/a">
<a href="{./@href}" class="button phone"><xsl:apply-templates select="./*"/></a>
</xsl:for-each>
</div>
</xsl:if>
<xsl:if test="$products">
<h2><xsl:apply-templates select="$products-heading"/></h2>
<xsl:apply-templates select="$products"/>
</xsl:if>
</div>
</div>
</xsl:if>
<div class="top-menu">
<xsl:apply-templates select="$siteactions"/>
</div>
</div>
<div class="search">
<span class="search-button">
<span class="label">Zoeken...</span><span class="icon"></span>
</span>
<div class="search-wrapper">
<form id="search-form" action="{$searchform/@action}">
<div class="form-item">
<div class="content">
<input type="text" name="{$searchfield/@name}" id="keyword"/>
<span class="border"></span>
</div>
</div>
<input type="submit" value="Zoek" class="submit"/>
<span class="submit-button"><span class="label">Zoeken</span><span class="icon"></span></span>
<span class="close-button"><span class="icon"></span></span>
</form>
</div>
</div>
</div>
</replace>
我现在已将其更改为仅处理globalnav,然后将li移到主题中,如下所示:
<replace css:content="#portal-globalnav a">
<a><xsl:copy-of select="./@*|./*|./text()"/><span class="arrow"></span></a>
</replace>
<replace css:content="#portal-globalnav li.selected">
<li class="active"><xsl:apply-templates select="./*"/></li>
</replace>
<replace css:content="#portal-globalnav .submenu">
<div class="mega-menu level-1">
<div class="menu-left-wrapper">
<h2>Onderwerpen</h2>
<ul class="sub-level-1"><xsl:apply-templates select="./*"/></ul>
</div>
</div>
</replace>
<replace css:content="#portal-globalnav .submenu .submenu ">
<div class="mega-menu">
<h2>Artikelen binnen onderwerp</h2>
<ul class="sub-level-2"><xsl:apply-templates select="./*"/></ul>
</div>
</replace>
我已经与设计/前端方达成协议,不使用&#39; active&#39;静态html中的类,它仍然被剥离。
答案 0 :(得分:0)
这个解决方案更加被动。它对我有用。希望我理解你的问题,它会对你有所帮助。 查看属性是否包含值在大多数情况下更安全。
<replace css:content="#portal-globalnav">
<ul id="borked-nav">
<xsl:for-each css:select="#portal-globalnav > li">
<xsl:variable name="class" select="./@class" />
<li>
<xsl:if test="contains(@class, 'selected')">
<xsl:attribute name="class">active</xsl:attribute>
</xsl:if>
<xsl:copy-of select="./*"/>
</li>
</xsl:for-each>
</ul>
</replace>
我看到你在replace标签内重写了很多标记。您是否考虑过实际更改模板而不是动态执行所有操作。
这很有效但保持规则集更紧密,因为它不像模板引擎那么快。