我在 Sitecore 中有以下内容结构:
- 家
- 产品
- AE
- 样品产品 A
- B 样品产品 B
- 缩略词
- KO
- L 样品产品 L
- PT
- 乌兹别克斯坦
- AE
- 产品
此外,每个产品都有一个名为“Active”的复选框字段。我想要一个允许用户选择一个或多个产品的 Treelist - 但他们应该只被允许选择选中 Active 复选框的产品。这可能吗?
您还可以使用属性IncludeTemplatesForDisplay
或IncludeTemplatesForSelection
保持 TreeList 字段清洁。
IncludeTemplatesForDisplay
确保只有那些模板会显示在 TreeList 中。
IncludeTemplatesForSelection
允许您定义可以在 TreeList 字段中实际选择的模板。
在您的情况下,您可以设置IncludeTemplatesForDisplay
Products 项目的模板,然后是 AE 等项目,以及实际的 Products 模板。如果您随后选择IncludeTemplatesForSelection
,则可以确保内容编辑器仍然只能选择实际的产品项目。
其他参数是ExcludeTemplatesForSelection
、DatabaseName
、ExcludeTemplatesForDisplay
、IncludeItemsForDisplay
和。ExcludeItemsForDisplay
AllowMultipleSelection
请记住,不允许在选中复选框的情况下进行选择,但您可以考虑基于字段创建自定义字段TreeList
,该字段具有检查字段是否已设置的附加属性Active
。
听起来您可以使用 Sitecore 查询来实现您所需要的。查看文档以了解确切的语法规则。
不过,并非所有字段类型都支持 Sitecore 查询,因此您需要使用支持的字段类型(Multilist)。或者,您可以实现与 query 一起使用的自定义 TreeList 字段类型。
我不确定是否有一种开箱即用的方法将树列表(或任何基于列表的字段)的数据源设置为一组项目并按其字段的值进行过滤。
换个角度想想怎么样。
如果您在树的其他地方有一个树的产品部分的镜像,但不是所有产品都在这个镜像部分中,您将只有活动的产品。此镜像部分中的项目将具有一个下拉链接字段,该字段映射到树的原始部分中的原始产品。要使此列表保持最新,您可以在保存原始产品时使用自定义操作。保存产品时,如果选中活动复选框,则在树的镜像产品部分创建镜像产品类型的项目(例如),并将下拉链接设置为原始产品。保存产品时,如果未选中“活动”复选框,则找到映射到正在保存的该产品的镜像产品并将其删除。
最后,树列表的数据源将是树的这些镜像产品部分的根,而不是原始产品本身。这样,您的树形列表的选项将始终仅映射到选中了“活动”复选框的产品的项目。
要记住的一件事:当您删除镜像产品时,如果它被树列表引用,则该引用将保留;在尝试使用树列表项之前,您需要让代码检查 null。