【问题标题】:Sitecore 7 adding a sublayout dynamically based on tree structureSitecore 7 基于树结构动态添加子布局
【发布时间】:2017-01-27 12:57:04
【问题描述】:

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

例如:对于 GALLERY 模板的子项,它本身将具有使用 GALLERY ITEM 模板的子项,该模板定义要在轮播中显示的每个图像;因此编辑器可以简单地添加多个项目,并且轮播将相应缩放,而不是具有固定字段(横幅、横幅 2 等)

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

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

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

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

谢谢

【问题讨论】:

    标签: sitecore sitecore7


    【解决方案1】:

    如果您正确使用和配置页面/体验编辑器,添加子布局和数据源是一个非常直观的过程,并且可以让您充分利用 Sitecore 的所有特性和功能,特别是个性化和 A/ B 测试。 这是您应该遵循的建议做法。

    也就是说,如果您有情有可原的情况确实阻止您这样做,有一种称为“Presentation Inversion of Control”的旧技术,它从通过内容树关联的项目中提取渲染。在出现在 Sitecore 6.4 中的“统一页面编辑器”和数据源向导之前,它很有用。 There are various approaches to this,但最简单的是您放置在页面上的子布局/Web 控件。

    以下代码尚未在 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));
                }
            }
        }
    }
    

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

    【讨论】:

    • 感谢您的建议;页面编辑器过去对我们来说并不可靠——它将渲染的 javascript 从 DOM 保存到字段中,编辑器可以通过意外拖动项目轻松破坏页面并且并不总是稳定。编辑器更喜欢使用内容编辑器,因为他们只想编辑内容和不关心布局决策和界面问题 - 因此是一种基于模板和内容类型自动构建页面的方法。我们在 SC7 上,所以也许界面有所改进,但有时编辑者只想编辑内容而不是设计网站布局。再次感谢
    • 请注意,通过采用这种方法,您将排除使用个性化和 A/B 测试的可能性。不可避免地,您的用户会回来想使用这些并询问他们为什么不能(多次看到)。
    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多