这里就是我想要做:
我有一个内容项“旋转木马演示”。 本质上,这将在传送带内提交其子项。 我想要的灵活性,有任意数量的子项。 我也希望能够灵活地可以指定每个子项的呈现 - 它们可以相同或不同。 我使用Sitecore的6.5。
转盘是的jCarousel。 我需要生成的标记一般是这样的(由项目“旋转木马主讲”):
<div class="jcarousel">
<ul>
<li> ... MARKUP FROM ITEM 1 ... </li>
<li> ... MARKUP FROM ITEM 2 ... </li>
... and so on
</ul>
</div>
这是我曾尝试:
创建sublayout “旋转木马presenter.ascx”,标记:
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
// Get all children and render them inside the <ul>
var kids = Sitecore.Context.Item.GetChildren();
foreach (Item snippet in kids)
{
// RENDER THE ITEMS HERE INTO THE PLACEHOLDER...
// Get the first rendering from item's presentation definition
RenderingReference rendering = snippet.Visualization.GetRenderings(Sitecore.Context.Device, false).FirstOrDefault();
// We assume that its a Sublayout, but you can also check for xslt and create an XslFile() object
Sublayout sublayout = new Sublayout();
sublayout.DataSource = snippet.Paths.FullPath; // creates a reference to the snippet item, so you can pull data from that later on
sublayout.Path = rendering.RenderingItem.InnerItem["Path"];
sublayout.Cacheable = rendering.RenderingItem.Caching.Cacheable;
// Copy cache settings
if (rendering.RenderingItem.Caching.Cacheable)
{
sublayout.VaryByData = rendering.RenderingItem.Caching.VaryByData;
sublayout.VaryByDevice = rendering.RenderingItem.Caching.VaryByDevice;
sublayout.VaryByLogin = rendering.RenderingItem.Caching.VaryByLogin;
sublayout.VaryByParm = rendering.RenderingItem.Caching.VaryByParm;
sublayout.VaryByQueryString = rendering.RenderingItem.Caching.VaryByQueryString;
sublayout.VaryByUser = rendering.RenderingItem.Caching.VaryByUser;
}
// Now render the sublayout to the placeholder
carouselItemsPh.Controls.Add(sublayout);
}
}
请注意,我偷了大部分从这里这段代码: 临时更改Sitecore的项目的布局
- 在内容树中创建子项,内容项目“转盘演示”下方即“旋转木马文件”,与(在配置/布局通过标准值)分配给每个一个sublayout控制。
一切都公开。
当我打的每个子项(“旋转木马项目”),以及转盘作品的产生我的测试页面的标记,但它看起来像数据源没有被正确地分配 - 所有子项的数据源/上下文是父项目,尽管明确地设置数据源,当我创建的子控件。 我该如何解决?
是否有什么我想在Sitecore的6.5,实现了更好的方法?
谢谢