获取占位符Sitecore中的组件数

时间:2014-12-08 11:37:18

标签: loops indexing components sitecore placeholder

我有一个组件需要知道当前添加到同一个占位符的组件数量,因为它需要根据占位符中的索引更新html属性的值。

无论如何要获得已添加到占位符的组件数量,还是获取当前渲染器索引?

通常我会使用一个简单的for循环并设置属性,但因为它的占位符的组件不是一个选项。

提前致谢!

2 个答案:

答案 0 :(得分:6)

试试这个:

var placeholder = "my-placeholder";
var renderingReferences = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true);
var renderingsInPlaceholder = renderingReferences.Where(r => r.Placeholder.EndsWith('/' + placeholder, StringComparison.OrdinalIgnoreCase));
var numberOfRenderingsInPlaceholder = renderingsInPlaceholder.Count();

更新:将占位符密钥的搜索从IndexOf更改为EndsWith

答案 1 :(得分:1)

您尝试更新的HTML属性是什么?您计划如何更新此值?从渲染时的C#代码?或者,您是否希望在页面编辑器中添加组件时存储此值并将值存储在Sitecore项目中?

这取决于你的用例是什么,但是建议前端使用将是使用JavaScript执行这个逻辑,否则你必须挂钩到Sitecore管道,找到你的HTML元素并适当地添加属性。添加组件时保存此值意味着您需要为整个占位符运行登录并更新任何存储的值,因为用户可以(应该)可以在任何地方使用组件...

如下所示,将订单订单数据属性添加到元素列表中。如果另一个插件正在使用它,请确保在初始化插件之前运行此代码。

// get element + its siblings
var $els = $('.selector').siblings().addBack();

// loop and add data-attr with index number
$els.each(function(index, element) {
    $(this).attr('data-sortorder', index);
}