【问题标题】:Is it possible to use queries as a data source for a Sitecore rendering with Glass Mapper?是否可以将查询用作使用 Glass Mapper 进行 Sitecore 渲染的数据源?
【发布时间】:2015-01-28 15:15:08
【问题描述】:

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

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

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

【问题讨论】:

  • 你能把部分代码也发一下吗?
  • 无需发布太多代码,Glass 为您处理了很多。但我想我可以添加一些基本代码。
  • 尝试使用 IEnumerable 作为玻璃模型
  • 我不确定我理解你的意思。我的数据模板的模型是由 TDS 使用 Glass 的代码生成模板自动生成的。子布局是显示单个文本字段的简单子布局。

标签: sitecore sitecore7 glass-mapper sitecore7.5


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我不知道什么是数据源模板和数据源位置。这是您定制的东西还是 Sitecore 的内置功能?
  • 它内置在 sitecore 中。它位于您正在使用的部分下方的子布局/渲染的定义中。这是一篇很好的文章,介绍了它们的工作原理:markstiles.net/Blog/2013/09/20/…
  • 另外,我将有一些需要将多个项目作为数据源的子布局。对于如何最好地使用 Glass Mapper 并支持页面编辑器,我真的很苦恼。我没有发现 Glass Mapper 网站上的教程很有帮助。他们假设您正在以某种方式构建您的网站。我正在尝试构建我的网站,以便内容作者可以将渲染添加到页面并在这些渲染上设置数据源。我尽可能不想硬编码数据的来源。
  • 好的,如果您要使用多个项目进行渲染,我想问题是它们之间的关系如何?以下是我提供的视频中的一些演示文稿的链接,这些视频解释了如何将数据源模板等用于信息架构。
  • (响应太长,所以不得不加倍评论)dl.dropboxusercontent.com/u/27360037/JonUpchurchRoundTable.pptxdl.dropboxusercontent.com/u/27360037/Latest%20Changeset.pptxdl.dropboxusercontent.com/u/27360037/ParagonIA.mp4 你绝对不想硬编码任何东西,因为你破坏了页面编辑器和 DMS 的目的。你在正确的轨道上。如果您需要对我链接的任何内容进行任何澄清,我很乐意详细说明。
【解决方案2】:

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

改变

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

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

【讨论】:

  • 好的,谢谢。我会尝试一下,看看是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多