为什么class =' active'被剥夺了有没有办法绕过它?

时间:2014-07-30 19:58:47

标签: plone diazo

我试图做的是替换内容端的标题结构以进行一些剧烈的结构更改,以便一次性将整个标题移动到主题端。

我的问题是这个,我无法取代所选择的'列出具有“活动”的列表项的课程。在这种情况下,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中的类,它仍然被剥离。

1 个答案:

答案 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标签内重写了很多标记。您是否考虑过实际更改模板而不是动态执行所有操作。

这很有效但保持规则集更紧密,因为它不像模板引擎那么快。