我正在进行Sitecore 8.1安装。我正在尝试使用droptree字段来允许内容编辑者从项目树中选择一个项目(数据模板A)。保证有效选择的每个项目具有不同数据模板的一个或多个子项目(数据模板B)。根据文档,这应该很容易做到:只需将源设置为参数化数据源:
Datasource=/sitecore/Media Library/Images/Folder&IncludeTemplatesForDisplay=Data Template A
或查询:
query:/sitecore/Media Library/Images/Folder/*[@@templatename='Data Template A']
出于某种原因,该领域似乎忽略了除路径之外的任何事情。它将显示树的正确部分,但显示所有项目(包括数据模板B的项目)并允许选择它们。我尝试了[Exclude|Include]TemplatesFor[Selection|Display]
的各种排列,其中没有一种被证明是有效的。我还尝试使用[@@templatename!='Data Template B']
或使用templateid
的两种方法从查询中排除B。
我无法找到很多关于此的信息,除了偶尔模糊地提到droptree不尊重排除。常见的解决方案似乎是使用带有正则表达式验证的TreeList将其限制为一个选择。这种方法是足够的,但不是我真正喜欢的:TreeList UI对于单个选择来说有点奇怪,我宁愿不允许用户选择多个项目而不是在他们输入时发出验证错误做。
我可以使用其他几个字段来尊重排除但不提供树视图:再次,可维护但不是想法,因为这里可能有很多项目,树视图为用户提供一些有用的背景。
我可能会写一个模仿Droptree的新字段类型,但实际上是为了尊重排除 - 而且我很顽固,这可能是我采取的路线 - 但我想首先检查以确保我不是'只是缺少一些东西。所以这就是问题:任何人都知道一种方法可以使Droptree成为ExcludeTemplatesForSelection / Display或者在我继续编写之前通过查询进行筛选吗?
答案 0 :(得分:8)
Sitecore DropTree
字段不支持IncludeTemplatesForSelection
或IncludeTemplatesForDisplay
个参数。
它们仅适用于Treelist
,TreelistEx
和Mulitlist
字段。
您可以使用的是由Richard Cabral创建的FilteredTree
字段类型。
你可以在这里找到它:Filtered Tree by Richard Cabral at github。