XSLT (Umbraco), если определенный тип документа - PullRequest
1 голос
/ 09 ноября 2011

У меня есть меню, сгенерированное в макросе Umbraco:

<xsl:for-each select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevel and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())] ">
  <li>
      <a href="{umbraco.library:NiceUrl(@id)}">
        <xsl:value-of select="@nodeName"/>
      </a>     
  </li>
</xsl:for-each>

В этом foreach я бы хотел оператор if, который принимает только определенный тип документа, генерирует соответствующие теги li / a и вставляетParam от этого doctype в HREF.Единственное, о чем я могу думать, это что-то вроде этого:

      <xsl:if test="$currentPage/Redirect">
        <li>
           <a href="{$urlRedirect)}">
              <xsl:value-of select="@nodeName"/>
           </a>
        </li>
      </xsl:if>

Где Redirect - это тип документа, а $urlRedirect - это параметр.

Прими меня, это моепервый день обучения XSLT

ОБНОВЛЕНИЕ: Вот полный код, чтобы вы могли увидеть его в контексте:

<xsl:template match="/">
<!-- The fun starts here -->  
<!-- update this variable on how deep your navigation should be -->
<xsl:variable name="maxLevel" select="5"/>
<xsl:variable name="minLevel" select="4"/>

<xsl:choose>
  <xsl:when test="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevel and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())] ">
    <ul>
    <xsl:for-each select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevel and (umbraco.library:IsProtected(@id, @path) = false() or 

umbraco.library:HasAccess(@id, @path) = true())] ">

<!-- Here is where I want my if/else logic -->

      <li>
        <a href="{umbraco.library:NiceUrl(@id)}">
          <xsl:value-of select="@nodeName"/>
        </a>
      </li>

    </xsl:for-each>
    </ul>
  </xsl:when>
  <xsl:otherwise>
    <ul>

      <xsl:for-each select="$currentPage/../* [@level &gt; 3 and @isDoc and string(umbracoNaviHide) != '1' and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())] ">
      <li>
        <a href="{umbraco.library:NiceUrl(@id)}">
          <xsl:value-of select="@nodeName"/>
        </a>
      </li>
    </xsl:for-each>
    </ul>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

1 Ответ

2 голосов
/ 09 ноября 2011

вы можете сделать это так:

    <xsl:template match="/">
<!-- The fun starts here -->  
<!-- update this variable on how deep your navigation should be -->
<xsl:variable name="maxLevel" select="5"/>
<xsl:variable name="minLevel" select="4"/>

<xsl:choose>
  <xsl:when test="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevel and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())] ">
    <ul>
    <xsl:apply-templates select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1' and @level &lt;= $maxLevel and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())]"  />
    </ul>
  </xsl:when>
  <xsl:otherwise>
    <ul>

      <xsl:for-each select="$currentPage/../* [@level &gt; 3 and @isDoc and string(umbracoNaviHide) != '1' and (umbraco.library:IsProtected(@id, @path) = false() or umbraco.library:HasAccess(@id, @path) = true())] ">
      <li>
        <a href="{umbraco.library:NiceUrl(@id)}">
          <xsl:value-of select="@nodeName"/>
        </a>
      </li>
    </xsl:for-each>
    </ul>
  </xsl:otherwise>
</xsl:choose>

</xsl:template>

<xsl:template match="*">
     <li>
         <a href="{umbraco.library:NiceUrl(@id)}">
                <xsl:value-of select="@nodeName"/>
         </a>     
      </li>
</xsl:template>
<xsl:template match="Redirect">
    <li>
        <a href="{urlRedirect}">
            <xsl:value-of select="@nodeName"/>
        </a>
    </li>
</xsl:template>
...