Sitecore 7根据树结构动态添加子布局

时间:2017-01-27 12:57:05

标签: sitecore sitecore7

基于单页面视图,我希望我的内容结构动态构建页面。

例如:对于GALLERY模板的子项,这本身就有使用GALLERY ITEM模板的子项,该模板定义了要在旋转木马中显示的每个图像;所以编辑可以简单地添加多个项目,轮播将相应缩放,而不是固定字段(横幅,横幅2等)

目前我在理解如何定义画廊HTML的子布局可以自动包含在此主页中(如果存在该模板)时遇到问题。

而不是编辑器必须手动添加Sublayout并定义数据库到gallery节点,我希望主页面向下迭代树并观察GALLERY有一个模板,因此知道它需要使用子布局和将其添加到主页面占位符

根据这一原则,页面将根据编辑器添加到页面的项目自行构建。

赞赏任何建议或示例代码(使用网络表单);目前我不得不手动添加子布局,这似乎对内容编辑器组装页面并不直观。

由于

1 个答案:

答案 0 :(得分:0)

如果您正确使用和配置Page / Experience Editor,添加子布局和数据源是一个非常直观的过程,并且允许您充分利用Sitecore的所有特性和功能,特别是个性化和A / B测试。 这是您应遵循的推荐做法。

那就是说,如果你有一些真正阻止你这样做的情有可原,那就有一种叫做#34; Presentation Inversion of Control"它从通过内容树关联的项目中提取渲染。在统一页面编辑器之前它很有用。和Sitecore 6.4中出现的数据源向导。 There are various approaches to this,但最简单的是您放置在页面上的子布局/网页控件。

以下代码未经Sitecore 7测试:

public partial class Gallery: System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
       PageItem page = Sitecore.Context.Item;
       //custom item contains logic for finding items to include
       foreach (Item galleryItem in page.GalleryItems)
       {
            string strDataSource = galleryItem.ID.ToString();
            RenderingReference[] renderings =
                galleryItem.Visualization.GetRenderings(Sitecore.Context.Device, false);
            foreach (RenderingReference rendering in renderings)
            {
                rendering.Settings.DataSource = strDataSource;
                this.Controls.Add(
                    rendering.RenderingItem.GetControl(rendering.Settings));
            }
        }
    }
}

但实际上,您应该正确实施页面编辑器。