深談 Diazo

利用XInclude, Diazo 的rules.xml 也可以分層管理

一、在rules宣告加上以下這行namespace,

xmlns:xi="http://www.w3.org/2001/XInclude"

變成:

<rules
    xmlns="http://namespaces.plone.org/diazo"
    xmlns:css="http://namespaces.plone.org/diazo/css"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xi="http://www.w3.org/2001/XInclude">

之後就可以xi:include的方式將另一個xml檔案包含進來,例如:

    <rules if="$ismanager">
      <xi:include href="another.xml" />
    </rules>

 

二、另外,XSL的語法,只會在第一層的rules生效,不能存在第二層rules裏,但是有變通的方式

  <replace css:content="ul#portlet-test">
    <xsl:copy>
      <xsl:attribute name="class">class1 class2</xsl:attribute>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:copy>
  </replace>

將其包在另一個replace(或其他diazo tag)裏,就可以不受第一層rules的限制

三、XSL在diazo裏有做一些改良,所以不只支援xpath,加上css以後,還能支援css selector,例如:

<xsl:template css:match="ul.list li">
<xsl:for-each css:select="div#content">

善加利用,rules.xml可以寫得更優雅、易讀。