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