Sitecore 8 MVC Glass Query Datasource

时间:2015-10-10 15:13:30

标签: asp.net-mvc sitecore sitecore8 glass-mapper sitecore-mvc

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

1 个答案:

答案 0 :(得分:2)

您可以将数据源查询添加到SublayoutRendering 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);
}

然后返回匹配项,该项是数据源的父项。