Diazo XSLT和外部文档仅适用于文档的硬编码路径

时间:2015-07-14 12:15:49

标签: plone diazo

到目前为止,加载外部文档的唯一方法是对路径进行硬编码。我希望能够使用相对路径或变量。

我创建了一个Diazo规则,用于转换外部网页中的内容(称为“#footer-columns'”)并将其放置在我的主题页面中。

版本A - 此版本有效(请注意硬编码路径):

 <replace css:theme-children=".footer-menu-row">
     <xsl:for-each
       select="document('http://example.com/footer-columns')//*/dl[contains(@class,'portletStaticText')]/dd"
     ><div class="w-col w-col-3">
           <xsl:copy-of select="." />
     </div>
     </xsl:for-each>
      </replace>

版本B - 此版本不起作用:

 <replace css:theme-children=".footer-menu-row">
     <xsl:for-each
       select="document('{$portal_url}/footer-columns')//*/dl[contains(@class,'portletStaticText')]/dd"
     ><div class="w-col w-col-3">
           <xsl:copy-of select="." />
     </div>
     </xsl:for-each>
      </replace>

版本C - 绝对路径不起作用(实际上它返回错误):

 <replace css:theme-children=".footer-menu-row">
     <xsl:for-each
       select="document('/footer-columns')//*/dl[contains(@class,'portletStaticText')]/dd"
     ><div class="w-col w-col-3">
           <xsl:copy-of select="." />
     </div>
     </xsl:for-each>
      </replace>

版本D - 相对路径不起作用(实际上它返回错误):

 <replace css:theme-children=".footer-menu-row">
     <xsl:for-each
       select="document('footer-columns')//*/dl[contains(@class,'portletStaticText')]/dd"
     ><div class="w-col w-col-3">
           <xsl:copy-of select="." />
     </div>
     </xsl:for-each>
      </replace>

对于版本C和D,我得到相同的错误:

  

AttributeError:&#39; PersistentResourceDirectory&#39;对象没有属性   &#39; getPhysicalPath&#39;

2 个答案:

答案 0 :(得分:0)

您需要为document()方法提供节点集。 Diazo已经设置了一个名为diazo-base-document的变量,其中包含正确的节点集。

尝试:

select="document('footer-columns', $diazo-base-document)//*/dl[contains(@class,'portletStaticText')"

答案 1 :(得分:0)

您可以在href="/footer-columns"代码上指定replace吗?