0

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

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

HOME
PORTFOLIO
 - First Item
 - Another Item
ABOUT
CONTACT US

Home、Portfolio、ABOUTCONTACT US“Landing Pages”文档类型,Portfolio 下的子项(First ItemAnother Item)是“Portfolio Entries”文档类型。下面是调用幻灯片宏的“登陆页面”上的代码。

投资组合条目具有以下字段:

  • 英雄形象
  • 图片
  • 身体

幻灯片宏显然是那里的亮点。很容易。这是我的宏代码,您将在其中看到我正在尝试为每个“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,这不起作用。

希望我已经对此进行了足够的解释,并提前感谢您的帮助!

4

1 回答 1

0

首先,看起来您正在对父节点 ID 进行硬编码。在您刚刚提供的代码中,似乎获取了 id 为 1081 的节点的子节点。通过阅读您刚刚发布的内容,您似乎希望在所有登录页面上显示他们各自的投资组合条目。

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

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

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

于 2013-01-06T14:05:07.063 回答