基于单页面视图,我希望我的内容结构动态构建页面。
例如:对于GALLERY模板的子项,这本身就有使用GALLERY ITEM模板的子项,该模板定义了要在旋转木马中显示的每个图像;所以编辑可以简单地添加多个项目,轮播将相应缩放,而不是固定字段(横幅,横幅2等)
目前我在理解如何定义画廊HTML的子布局可以自动包含在此主页中(如果存在该模板)时遇到问题。
而不是编辑器必须手动添加Sublayout并定义数据库到gallery节点,我希望主页面向下迭代树并观察GALLERY有一个模板,因此知道它需要使用子布局和将其添加到主页面占位符
根据这一原则,页面将根据编辑器添加到页面的项目自行构建。
赞赏任何建议或示例代码(使用网络表单);目前我不得不手动添加子布局,这似乎对内容编辑器组装页面并不直观。
由于
答案 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));
}
}
}
}
但实际上,您应该正确实施页面编辑器。