【发布时间】:2013-04-25 18:42:38
【问题描述】:
我在 Sitecore 中有以下内容结构:
- 首页
- 产品
- A-E
- 产品样品A
- B 样品产品 B
- F-J
- K-O
- L 样品产品 L
- P-T
- U-Z
- A-E
- 产品
此外,每个产品都有一个名为“活动”的复选框字段。我想要一个允许用户选择一个或多个产品的 Treelist - 但他们应该只被允许选择选中 Active 复选框的产品。这可能吗?
【问题讨论】:
我在 Sitecore 中有以下内容结构:
此外,每个产品都有一个名为“活动”的复选框字段。我想要一个允许用户选择一个或多个产品的 Treelist - 但他们应该只被允许选择选中 Active 复选框的产品。这可能吗?
【问题讨论】:
听起来您可以使用 Sitecore 查询来实现您所需要的。查看documentation 了解确切的语法规则。
但并非所有字段类型都支持 Sitecore 查询,因此您需要使用支持的字段类型(Multilist)。或者你可以实现一个custom TreeList field type that works with query。
【讨论】:
您还可以使用属性IncludeTemplatesForDisplay 或IncludeTemplatesForSelection 来保持您的TreeList 字段干净。
IncludeTemplatesForDisplay 确保只有那些模板会显示在 TreeList 中。IncludeTemplatesForSelection 允许您定义可以在 TreeList 字段中实际选择的模板。
在您的情况下,您可以设置 IncludeTemplatesForDisplay 产品项目的模板,然后是 A-E 等项目,以及实际的产品模板。如果您随后选择 IncludeTemplatesForSelection,则可以确保内容编辑器仍然只能选择实际的产品项目。
其他参数有ExcludeTemplatesForSelection、DatabaseName、ExcludeTemplatesForDisplay、IncludeItemsForDisplay、ExcludeItemsForDisplay和AllowMultipleSelection。
请记住,在选中复选框的情况下不允许选择,但您可以考虑基于 TreeList 字段创建自定义字段,该字段具有检查 Active 字段是否已设置的附加属性.
【讨论】:
我不确定是否有一种开箱即用的方法可以将树列表(或任何基于列表的字段)的数据源设置为一组项目并按其字段的值进行过滤。
换个角度想想怎么样。
如果您在树的其他地方有一个树的产品部分的镜像,但不是所有产品都在这个镜像部分中,您将只有处于活动状态的产品。此镜像部分中的项目将具有一个下拉链接字段,该字段映射到树的原始部分中的原始产品。要使此列表保持最新,您可以在保存原始产品时使用自定义操作。保存产品时,如果选中 Active 复选框,则在树的 Mirrored Products 部分中创建类型为 Mirrored Product 的项目(例如),并将下拉链接设置为原始产品。保存产品时,如果未选中Active复选框,则找到映射到该产品的Mirrored Product并删除它。
最后,树列表的数据源将是树的这些镜像产品部分的根,而不是原始产品本身。这样一来,您的树形列表的选项将始终仅映射到选中了“活动”复选框的产品。
要记住一件事:当您删除镜像产品时,如果它被树列表引用,则该引用将保留;在尝试使用树列表项之前,您需要让代码检查 null。
【讨论】: