4

我正在使用 Sitecore 7.5 和 Glass Mapper 3.2.3 构建一个站点。当我将子布局添加到页面的演示详细信息时,Glass Mapper 将假定子布局的数据源应该是当前页面。我还可以通过在演示详细信息对话框中选择站点上的不同页面来显式设置渲染的数据源。

在此处输入图像描述

Glass Mapper 仍然可以正常工作,并使用另一个选定的页面作为渲染的数据源。但是,如果我尝试使用“构建查询”对话框并为我的数据源构建查询,Glass Mapper 似乎忽略了这一点,只使用当前页面作为数据源。有什么方法可以使用我使用“构建查询”对话框构建的查询吗?

在此处输入图像描述

编辑:这是有关我的设置的更多信息。我在 Sitecore 中有一个名为 ContentPage 的数据模板。它有一个字段:内容。我在站点中有多个使用此数据模板的页面。我有一个名为 sublayoutPageContent 的子布局。它继承自 GlassUserControl。它所做的只是显示内容字段。如果我将此子布局添加到页面 A 的演示详细信息中并且不指定数据源,则它可以正常工作。当我打开页面 A 时,它会完美地显示页面 A 的内容字段。我还可以进入子布局的演示详细信息并告诉它使用不同的页面作为数据源 - 比如说页面 B。如果我这样做然后我去查看页面 A,我将看到页面 B 中的内容字段. 太棒了——按预期工作。现在不是为数据源选择一个页面,

4

2 回答 2

5

如果您支持页面编辑器并且这些源会定期变化,您可能希望使用数据源模板和数据源位置而不是使用数据源。然后,当您通过页面编辑器添加项目时,系统会提示您创建或选择数据源项目。这使它变得非常容易,尤其是在您描述的场景中。您可以对数据源位置使用静态或相对路径。我经常使用类似的构造,尽管有多个字段,而且效果很好。即使您不使用页面编辑器,您也可以使用它,但最佳实践是支持页面编辑器和 DMS,这使您可以灵活使用两者。

如果您需要多个项目,这将不起作用,但根据您的描述,您似乎只需要能够在它们之间进行选择。此外,在这种情况下,您可以将多个项目分组到一个文件夹或其他项目下,并使用 [SitecoreChildren] 属性并以这种方式获取项目。这实际上完全取决于您需要多么灵活以及您的要求是什么。

于 2015-01-28T17:59:12.413 回答
0

因为查询可以返回多个项目,所以您应该更改代码以期望多个项目而不是单个项目。不确定它在网络表单中是如何工作的,但在 Razor 中你可以这样做:

改变

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<MyEntity>

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<IEnumerable<MyEntity>>
于 2015-01-28T17:24:46.727 回答