6

假设在一个项目中存在一个呈现无序列表的展示组件(可能称为 ListRenderer)。我们有几个选项可以向页面上的任何给定 ListRenderer 提供数据:

  1. 在内容项上有一个 TreeList(或 TreeListEx)字段,并让 ListRenderer 从中读取。
  2. 通过演示详细信息向 ListRenderer 提供数据源(或其他参数)。

我通常在我的项目中避免使用 #1,因为它将子布局绑定到模板,这会变得非常混乱。如果您沿着这条路走下去,最终您将拥有支持项目中每个潜在子布局的字段。

所以我的解决方案倾向于选项#2,它可以解决这个问题。但是,它确实有自己的问题。我应该将这些不同的“列表”放在哪里供给定的 ListRenderer 使用?为了最大限度地重用和共享,我通常在站点根目录附近创建一个包含所有这些类型的东西的组件目录,如果我预测列表将被共享。对于内容作者来说,这似乎不太容易找到并且更难使用,他们突然不知道他们的 ListRenderer 的来源在哪里,除非他们知道如何打开演示详细信息(这对我的普通用户来说有点先进)。

如果我觉得列表不会被共享,并且非常特定于页面,我会将它们直接放在相关项目的下方。但是,这会混淆内容树,并且任何动态生成的导航子布局都必须在生成指向它的链接之前检查项目是否是实际页面。我在 Sitecore 工作的越多,我使用这种方法的次数就越少,但对内容作者来说似乎更容易。当您使用这种方法时,更容易访问信息。

是否有任何行业接受的方法来解决这个问题?它一直发生在项目中,在我的脑海中,我很难在这种情况下平衡技术和内容作者问题。

4

2 回答 2

7

好问题。我已经使用了您提到的所有技术,具体取决于项目的受众和具体情况。问题在于,与 Sitecore 的所有事物一样,它们都是实现相同目标的有效方法,您将很难找到适用于各种情况的答案。

我也几乎总是使用 #2,但可能需要对内容作者进行再培训,并确保对内容作者能够选择的目标添加限制。我(在同一个项目中)在根附近(在共享内容文件夹中)和有问题的项目下构建了项目,这取决于我认为会提供最佳上下文的内容。

此外,如果其他子页面将存在于该项目以及列表项下方,那么我会将列表项放在一个单独的文件夹中(带有一个常见的“列表项”图标“)并将其重新排序为第一个项目为了分离和清晰。

如果您想使用任何类型的个性化和 DMS,那么您将需要能够切换数据源,因此您不应该对位置进行硬编码。

您可能还(如果您还没有)想考虑使用:

使用 Sitecore ASP.NET CMS 将数据源路径转换为 ​​ID
- 如果您需要在以后重新构建内容,这很有用

可查询的数据源位置
- 当您需要进行克隆时适用于多站点情况,或者当列表直接位于项目下方时设置为标准值中的默认数据源值,但让您可以灵活地更改它。

我个人更喜欢使用可查询数据源,我发现 xpath 语法更合乎逻辑。

于 2012-12-20T20:53:08.373 回答
4

正如 Mark 所说,没有真正的行业标准。

我觉得这是需要改进的地方。尤其是当您使用 DataSource 选项时,对于编辑者来说,事情变得不那么透明,并且随着网站规模的增长,复杂性也随之增加。

我只能告诉你我会怎么做,这很可能很像你的做法。

1) 对于新闻、事件和常见问题项等概览页面,我会将项目放在概览项下方,并使用 NewsMover 共享源模块自动创建层次结构。

2) 我将创建一个全球站点,其中包含跨站点或页面共享的项目。组件的 DataSource 项将放在此处。

3)对于标准值上存在的组件,我将在模板中添加一个列表字段(例如,当您在内容页面上显示相关项目时)

大多数情况下,这是一个合乎逻辑的选择,有时只是品味问题。

我想补充一点,我写了一篇关于如何为设置为标准值的组件自动创建数据源项的博客文章。如果您正在使用它们,那可能会对您有所帮助。

编辑: “我通常在我的项目中避免 #1,因为它将子布局绑定到模板,这会变得非常混乱。如果你沿着这条路走,最终你将拥有支持项目中每个潜在子布局的字段。”

今天,我在博客中介绍了一种在内容编辑器中隐藏字段和部分的方法,如果在需要这些字段的项目上没有设置子布局,这有助于防止在您的项目上有大量未使用的字段而造成混乱。

于 2012-12-20T20:46:39.807 回答