在分隔的占位符中渲染项目

时间:2016-04-01 01:04:04

标签: sitecore sitecore-mvc

我试图创建一个轮播,我希望它可以从体验编辑器配置。通过可配置我的意思是可以编辑图像,文本和添加/删除幻灯片。

我第一次创建旋转木马时我可以添加/删除幻灯片但没有保存并再次打开幻灯片后,渲染旋转木马后我无法删除一张幻灯片,因为它们都是同一个占位符的一部分(我可以继续添加新幻灯片并删除新幻灯片,但不能删除旧幻灯片。

我有Carousel.cshtml和CarouselSlide.cshtml,代码如下:

Carousel.cshtml

0.000001

CarouselSlide.cshtml

<div class="carousel">
    @foreach (Item slide in Model.Item.Children)
    {
        @Html.Action("CarouselSlide", "MediaFeature", new { model = slide });
    }

    @Html.Sitecore().DynamicPlaceholder("slides")

</div>

到目前为止,问题看起来与占位符有关。有关如何渲染DynamicPlaceholders的任何想法吗?

修改

&#34;滑动&#34;占位符配置为仅允许CarouselSlide组件

1 个答案:

答案 0 :(得分:0)

删除foreach循环。这是不必要的。当Sitecore呈现占位符时,它会为您呈现以前添加的幻灯片。在编辑模式下,它还会呈现允许您添加其他组件的容器。

使用动态占位符可以让您在页面上拥有多个Carousel组件。或者更准确地说,包含带有“幻灯片”键的占位符的多个组件。这很可能不会导致您在幻灯片中看到的问题。

更新 - OP要求的其他信息

看起来你所做的是混合两种不同的开发风格。在一个方面,您明确地将轮播项目的子项渲染为幻灯片。在第二种情况下,您依靠Sitecore的表示引擎将组件动态呈现为占位符,该占位符可以使用树中其他位置的数据源。您需要选择其中一种,但通常首选

要使用第二种方法,您只需删除foreach循环,以便您的Carousel视图如下所示:

<div class="carousel">
    @Html.Sitecore().DynamicPlaceholder("slides")
</div>

如果您决定采用第一种方法,则会删除占位符,然后添加自定义体验按钮,以允许您在轮播项目下插入和排序子项目。

使用这两种方法,您可能会发现页面编辑器与您的Carousel javascript不能很好地兼容。此问题最常见的解决方法是在页面编辑器模式下将轮播渲染为平面列表。