Templates 将Sitecore模板字段源值设置为动态Sitecore查询

Templates 将Sitecore模板字段源值设置为动态Sitecore查询,templates,dynamic,field,sitecore,Templates,Dynamic,Field,Sitecore,我有一个用例,在这个用例中,用户需要从项目列表中选择一个字段值。问题在于,需要在每个项目上动态构建droplist(所有项目都使用相同的模板),以仅显示文件夹中字段值等于当前项目ID值的项目。如果您已经丢失,以下是该结构的示例: - sitecore - content - Home - ContentItem1 (with droplist) - Site Data - SelectableItem1(ContentItem1 selected in

我有一个用例,在这个用例中,用户需要从项目列表中选择一个字段值。问题在于,需要在每个项目上动态构建droplist(所有项目都使用相同的模板),以仅显示文件夹中字段值等于当前项目ID值的项目。如果您已经丢失,以下是该结构的示例:

- sitecore
  - content
    - Home
      - ContentItem1 (with droplist)
    - Site Data
      - SelectableItem1(ContentItem1 selected in 'itemid' field)
      - SelectableItem2(ContentItem1 selected in 'itemid' field)
      - SelectableItem3(ContentItem1 not selected in 'itemid' field)
      - SelectableItem4(ContentItem1 not selected in 'itemid' field)
  - templates
    - ContentItem1Template
      - Droplist field (source set to below query)
我希望我的查询通过获取ContentItem1的id作为其“itemid”字段值的项目列表动态分配ContentItem1的droplist字段源,但要将字段值与ContentItem1 id的值进行比较。我尝试通过将字段值与id标记进行比较来实现这一点,如下所示:

query:/sitecore/content/Site Data/*[@#itemid#=$id]

无论我对id(“$id”、“$id”、“@id”、“@id”、“@@id”、“@@id”等)尝试什么值,它都不希望在项目级别上解析。是否有某种方法可以这样做,以便我可以将此ContentItem1Template重新用于需要相同功能的所有项目?

您可能需要将ID用单引号括起来,如下所示:

query:/sitecore/content/#Site Data#/*[@itemid='$id']
也就是说,这似乎非常适合使用Sitecore链接数据库。每当您将SelectableItem与ContentItem关联时,Sitecore都会将该关系存储在链接数据库中(只要您使用支持该关系的字段引用该关系,如DropLink、DropTree、GeneralLink等)


从那里,您可以使用
Globals.LinkDatabase.getreferers(contentItem)
contentItem.Links.GetValidLinks()
获取指向内容项的所有引用项的列表。在这里,您可以按模板ID筛选列表,以确保只返回可选择的项。

如果您使用的是Sitecore 7,则可以使用编码字段数据源。这将允许您使用任何自定义逻辑来指定应显示在列表中的项目

创建一个类,该类实现
IDataSource
ListQuery()
方法,该方法返回一个项列表作为字段的源。然后使用
code:
前缀将字段的源设置为方法,例如
code:MyProject.Custom.FieldDataSource,MyProject.Custom

使用系统;
使用Sitecore.Bucket.FieldType;
使用Sitecore.Data.Items;
命名空间MyProject.Custom
{
公共类FieldDataSource:IDataSource
{
公共项[]列表查询(项)
{
var root=item.Database.GetItem(“/sitecore/content/myitem”);
//筛选项目集的其他逻辑
返回root.Children.ToArray();
}
}
}
这些文章可以帮助您: