使用glass时,Sitecore 8 MVC似乎不支持查询数据源(例如:query:...)。我想创建一个相对路径,以便分支模板在创建时指向正确的数据源。有没有办法使用Sitecore的查询构建器?我看到了自定义查询选项,其中可以指定路径,但似乎无法进行任何操作。我想我可能会在模型被玻璃绑定之前添加一个管道处理器,将以query:
开头的数据源更改为已解析的路径,并将其传递给管道参数。
答案 0 :(得分:2)
您可以将数据源查询添加到Sublayout
或Rendering
Datasource Layout
字段。您需要向Processor
getRenderingDatasource
添加新的Pipeline
。我自己在Branch Templates
上使用它来创建正确数据源的相对路径。
您的query:.
需要在子布局/渲染的Datasource Location
中定义,并使用ancestor-or-self
创建相对路径并遍历树以查找包含数据源的父项
query:.ancestor-or-self:: *[@@templatename = 'home']/*[@@templatename = 'storage']/*[@@templatename = 'articles']
处理器需要使用GetRenderingDatasourceArgs
。这些论点将为您提供所需的一切。基本上你需要获得你在query:.
中写的Datasource Locations
。
args.RenderingItem["Datasource Location"];
将查询的开头替换为Context Item路径(以使其相对),然后调用以获取项目;
private IEnumerable<Item> GetDatasourceLocationsFromQuery(string query)
{
string queryPath = query.Replace("query:.", args.ContextItemPath);
return args.ContextDatabase.SelectItem(queryPath);
}
然后返回匹配项,该项是数据源的父项。