如何将Diazo主题参数插入某个主题的类属性?

时间:2014-02-07 17:52:20

标签: xslt parameters attributes plone diazo

我想基于主题参数在动态中替换静态主题中的class标记属性。

我试过了:

<replace attributes="class" css:theme=".conteudo">conteudo-$section</replace>

而且:

<replace css:theme=".conteudo">
    <xsl:attribute name="class">conteudo-$section</xsl:attribute>
    <xsl:value-of select="."/> 
</replace>

即便如此:

<xsl:template match="//div[contains(concat(' ', normalize-space(@class), ' '), ' conteudo ')]">
    <xsl:attribute name="class">
        <xsl:value-of select="substring((body/@class), 'section-', 0)" />
    </xsl:attribute>
</xsl:template>

由于我还有其他引用.conteudo元素的规则,因此了解如何处理这些规则的最佳实践(在所需的转换发生之后)也很好,即:

<replace
    css:content-children="#portal-column-content"
    css:theme-children=".conteudo" />

2 个答案:

答案 0 :(得分:1)

您无法在任何地方引用变量,但需要从XPath表达式中执行此操作。

您可以通过在孩子之前插入属性来避免干扰替换子节点。

以下是我要尝试的内容:

<before css:theme-children=".conteudo">
    <xsl:attribute name="class">conteudo-<xsl:value-of select="$section" /></xsl:attribute>
</before>

答案 1 :(得分:1)

正如大卫所说,这是正确的做法。 要在子元素之前设置属性,您必须这样做:

<xsl:template match="//*[contains(@class, 'conteudo')]">
    <xsl:copy>
        <xsl:attribute name="class"><xsl:value-of select="$section" /></xsl:attribute>
        <xsl:apply-templates select="@*[not(name()='class')]|node()" />
    </xsl:copy>
</xsl:template>

<!--Identity template copies content forward -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>