在Umbraco中显示父节点上的子节点内容

时间:2012-01-31 01:42:33

标签: xslt umbraco

我在解决这个问题上遇到了很多麻烦。

我想要的是一个FAQ页面,它在同一页面上显示所有问题和答案。它从子节点内容的问题和答案中获取内容。

例如,我的树看起来像这样:

  • FAQ
    • 问题1
    • 问题2
    • 问题3

我希望FAQList上的模板在同一页面上列出Question1 ... 2 ...和3中的问题和答案数据。

每当我尝试找到这样做的示例时,我只能找到将子页面列为链接的示例。我不想链接到子页面。我想实际将它们的内容打印到父页面上。这可能吗?

这是我的尝试:

<xsl:for-each select="$currentPage/node">

    Question: <xsl:value-of select="data [@alias = 'question']"/><br/>

    Answer: <xsl:value-of select="data [@alias = 'answer']"/><br/>

</xsl:for-each>

但我没有结果。帮帮我吧我正在敲打这个。

2 个答案:

答案 0 :(得分:3)

这一切都取决于你正在运行的Umbraco的版本。有很多文档指的是更早版本的Umbraco,而且根本不适用于更新的版本。

假设您的问题的文档类型别名称为'FaqItem'并假设此XSLT在相应的内容节点上运行(即$currentPage是您的FAQ父节点),您可以使用以下内容:

如果你正在使用&lt; Umbraco 4.5.1

<xsl:for-each select="$currentPage/child::node[@nodeTypeAlias='FaqItem']">
    Question: <xsl:value-of select="./data[@alias='question']"/><br/>
    Answer: <xsl:value-of select="./data[@alias='answer']"/><br/>
</xsl:for-each>

如果您使用的是&gt; = Umbraco 4.5.1

<xsl:for-each select="$currentPage/FaqItem">
    Question: <xsl:value-of select="./question"/><br/>
    Answer: <xsl:value-of select="./answer"/><br/>
</xsl:for-each>

供将来参考

如果您熟悉XPath并想了解Umbraco如何存储数据,或者帮助调试。查找名为Umbraco.config的文件(通常位于~/App_Data/中)。这是所有XSLT都将读取的缓存XML。将此文件中的相关片段发布到您的[Stack Overflow]问题中将增加获得响应的速度和机会,因为XSLT贡献者将能够提供帮助而不仅仅是Umbraco贡献者。

答案 1 :(得分:1)

不得不看着剃须刀?恕我直言,它更容易阅读和写作。

@using System.Linq
@using System.Xml.Linq
@using umbraco.MacroEngines    

@{
    IEnumerable<DynamicNode> FAQs = new DynamicNode(Model.Id).Descendants("FaqItem").Items;
    List<DynamicNode> faqList = FAQs.ToList();

    @foreach(DynamicNode faq in faqList){
        Question: @(faq.GetProperty("question").ToString())
        Answer: @(faq.GetProperty("answer").ToString())
    }
 }
相关问题