为什么我们在Hybris WCMS页面中已经有ContentSlot,却有ContentSlotName?

为什么我们在Hybris WCMS页面中已经有ContentSlot,却有ContentSlotName?,hybris,Hybris,在hybris中创建页面时,我们创建页面模板,然后创建内容槽。 每个内容槽都有与其关联的组件。内容槽映射到页面模板。最后,我们将PageTemplate映射到ContentPage。 这就是在hybris中创建页面的方式 既然我们已经有了页面模板的内容槽,那么为什么我们有ContentSlotName,为什么我们要使用它呢 我们可以避免创建普通内容页和电子邮件页吗?ContentSlotName用于指示cmscockpit/smartedit可以在页面的特定部分添加什么类型的组件。例如: INS

在hybris中创建页面时,我们创建页面模板,然后创建内容槽。 每个内容槽都有与其关联的组件。内容槽映射到页面模板。最后,我们将PageTemplate映射到ContentPage。 这就是在hybris中创建页面的方式

既然我们已经有了页面模板的内容槽,那么为什么我们有ContentSlotName,为什么我们要使用它呢


我们可以避免创建普通内容页和电子邮件页吗?

ContentSlotName用于指示cmscockpit/smartedit可以在页面的特定部分添加什么类型的组件。例如:

INSERT_UPDATE ContentSlotName; name[unique = true]; template(uid, $contentCV)[unique = true][default = 'loginPageTemplate']; validComponentTypes(code)
; Login-LeftSection            ; ; CMSImageComponent
登录LeftSection”是在结构\u loginPageTemplate.vm中定义的:

td colspan="6" class="structureViewSection">
  <cockpit code="Login-LeftSection"/>
</td>
因此,“Login LeftSection”可以在登录页面的cmscockpit中看到,如果您尝试在与该节相关联的插槽中添加组件,则只有CMSImageComponent类型的组件可供添加(因为上面定义了ContentsLogName实例):

因此,ContentSlotName的目的是限制可以为特定内容槽添加的组件类型

第二个问题的答案是,我们可以避免它,但这意味着任何类型的组件都可以添加到给定的内容槽中

更新


上述解释适用于Hybris的较新版本,其中cmscockpit已被弃用,并且使用了smartedit。尽管smartedit在不允许将组件添加到特定插槽时具有不同的外观,但ContentSlotName的用途仍然相同。

实际上,ContentSlotName只是页面模板中的一个部分,可以用CMS组件填充。它可以为页面模板填充(如果您不想使用此页面模板为每个页面重复填充),也可以为页面填充(如果您想更改每个页面的内容)

例如:

INSERT_UPDATE ContentSlotName; name[unique = true]; template(uid, $contentCV)[unique = true][default = 'loginPageTemplate']; validComponentTypes(code)
; Login-LeftSection            ; ; CMSImageComponent
  • 像页眉和页脚这样的内容槽应该在每个页面上看起来都一样。因此,它们是为页面模板定义的
  • 内容槽,如页面的主要内容(如条款和条件),可能会因页面而异。因此,它们是为页面定义的
对于更多的页面模板(例如,只有一个ContentSlot“HeaderContent”用于所有页面模板),重复使用ContentSlot(如页眉和页脚)是常见的做法。因此,如果这些槽的内容发生变化,则所有页面模板和所有页面的槽都会发生变化。所有页面只需更改一次

在CMSCockpit中,ContentSlotForTemplate显示为红色,因此您知道您更改了PageTemplate,并且由于这个原因,可能不仅仅是您正在查看的页面