Umbraco - 在某个节点的每个子节点的宏中显示特定图像

时间:2013-01-06 13:25:44

标签: macros umbraco

Umbraco新手在这里。我研究了一吨,但似乎无法找到我想要的东西。

我在主页上有一个带滑块的网站,滑块位于一个宏中,该宏使用for-each(节点子节点),最终目标是显示该doctype中的'heroImage'图像。我不能将图像作为新手发布到这个网站,但继承我的内容结构:

HOME
PORTFOLIO
 - First Item
 - Another Item
ABOUT
CONTACT US

主页,投资组合,关于联系我们 “目标网页”文档类型以及投资组合下的子项(优先商品另一商品)是“投资组合条目”文档类型。以下是调用幻灯片宏的“目标网页”上的代码。

投资组合条目包含字段:

  • heroImage
  • 图像

幻灯片宏显然是那里的亮点。很容易。继承我的宏代码,你会看到我正在尝试为每个'for-each'显示相关节点的heroImage。

<xsl:template match="/">

    <!-- slider -->
    <div id="slideshow">
        <div id="slider" class="nivoSlider">
            <xsl:for-each select="umbraco.library:GetXmlNodeById(1081)/*[@isDoc and position() &lt; 4]">
                <xsl:variable name="mediaId" select="umbraco.library:GetMedia(@id, 'false')/data [@alias = 'umbracoFile']" />
                <xsl:if test="$mediaId &gt; 0">
                    <xsl:variable name="mediaNode" select="umbraco.library:GetMedia($mediaId, 0)" />
                    <xsl:if test="count($mediaNode/data) &gt; 0 and string($mediaNode/data[@alias='umbracoFile']) != ''">
                        <img src="{$mediaNode/data[@alias='umbracoFile']}" alt="[image]" />
                    </xsl:if>
                </xsl:if>
            </xsl:for-each>
        </div>
    </div>
    <!-- data-transition="slideInLeft" -->
    <script type="text/javascript">
        $(window).load(function() {
        $('#slider').nivoSlider();
        });
    </script>

</xsl:template>

我觉得我非常接近,并且因为我发现的大多数解决方案都依赖于从宏的另一端传递到宏的imageId而无法正常工作。

希望我已经解释了这一点,并提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,看起来你正在硬编码父节点id。在您刚刚提供的代码中,似乎只有 才能获取ID为1081的节点的子节点。从阅读刚刚发布的内容来看,似乎在所有着陆页上,您都希望显示他们的个人投资组合。

无论哪种方式,我都会远离硬编码ID。如果节点ID以任何方式更改(用户删除节点,它将作为包导出到实时环境等),您的代码将停止工作。我只是使用$ currentPage代替。

根据您的过滤器判断,我想您只想在滑块中显示前3个项目。代码似乎正确,您似乎正在使用旧架构及其关联的xpath。如果您使用的是较新版本的Umbraco,则在xslt中引用节点数据的方式会发生变化。我猜你已经找到了很多代码示例,并尝试将它们合并在一起,却没有意识到它们不会调用相同的模式。

This wiki link将提供更多信息,如果您使用错误的xpath,希望能解决您的问题。