我需要在 Sitecore 中创建一种新型控件。我们的 CE 希望能够根据位置进行卡片过滤。为此,我们创建了三个位置列表:州、国家/地区和南美洲位置。每个位置都是 sitecore 中的一个文件夹,下面有一个名称/值对项列表,代表位置。
例如:
当 CE 将组件添加到页面时,他们应该获得一个树列表,以允许他们选择“位置”列表文件夹。一旦他们选择了该文件夹,下面的项目列表就会出现 该位置文件夹应显示在多选列表中。
问题是我无法弄清楚如何根据所选的“位置”列表文件夹刷新多选列表。现在,当组件工作时,正确的州列表会加载到多选中,但如果我选择国家/地区,则不会加载国家/地区列表。
这基本上就是我现在所拥有的:
public class DynamicMultilist : MultilistEx
{
private void RenderList(Guid listItemGuid)
{
Item listItem = GetListItem(listItemGuid, "master");
this.Source = string.Format("query:{0}/*", listItem.Paths.FullPath);
// ... Instantiate html writer
DoRender(writer);
}
protected override void DoRender(HtmlTextWriter output)
{
base.DoRender(output);
}
public override void HandleMessage(Message message)
{
if (message.Name == "datacontext:changed")
{
string guid = (message.Sender as DataContext).Folder;
// ... Convert string above to Item
RenderList(listItem);
}
}
}
几年前,当我遇到类似的需求时,没有办法用两个单独的字段来实现这一点,因为 CE 控件彼此不了解任何信息。
您可以尝试的选项之一是使用
Droptree
、Grouped Droplink
或 Treelist
字段类型来显示树结构。尝试一下,看看哪一种更适合您的条目数量。这种方法允许您仅存储选定的子项目 ID,同时向内容编辑器显示分组视图。如果我正确理解您的内容结构,您将能够从代码中选定的子项目中识别父文件夹 ID,即使它不会存储在专用字段中。