Sitecore 8 MVC Glass 查询数据源

Sitecore 8 MVC Glass Query Datasource

使用 glass 时,Sitecore 8 MVC 似乎不支持查询数据源(例如:查询:...)。我想创建一个相对路径,以便分支模板在创建时指向正确的数据源。有没有办法使用 Sitecore 的查询生成器来做到这一点?我看到了自定义查询选项,其中可以指定路径但似乎无法进行任何操作。我想我可能会在模型被玻璃绑定之前添加一个管道处理器,以将以 query: 开头的数据源更改为已解析的路径,并将其沿着管道参数传递。

您可以将数据源查询添加到 SublayoutRendering Datasource Layout 字段。您需要将新的 Processor 添加到 getRenderingDatasource Pipeline。我自己已经在 Branch Templates 上使用它来创建到正确数据源的相对路径。

你的query:.需要定义在sublayout/rendering的Datasource Location中,利用ancestor-or-self做相对路径,遍历树找到父节点包含数据源的项目。

query:.ancestor-or-self:: *[@@templatename = 'home']/*[@@templatename = 'storage']/*[@@templatename = 'articles']

处理器将需要使用 GetRenderingDatasourceArgs。这些争论将为您提供几乎所有您需要的东西。本质上,您需要获取您在 Datasource Locations 中编写的 query:.

args.RenderingItem["Datasource Location"];

将查询的开头替换为上下文项路径(以便其相对),然后调用以获取项;

private IEnumerable<Item> GetDatasourceLocationsFromQuery(string query)
{
    string queryPath = query.Replace("query:.", args.ContextItemPath);
    return args.ContextDatabase.SelectItem(queryPath);
}

这将 return 作为数据源父项的匹配项。