如何替换 SiteContextSlot 的内容?

How to replace SiteContextSlot content?

我想将语言和货币选择器从 spartacus 替换为我自己的选择器并添加更多内容。问题是我不能 cxOutletRef SiteContextSlot。我无法覆盖 LanguageComponent 和 CurrencyComponet,如果可以的话,我不想使用 Language - Currency,而是 Currency - Language。所以我真正需要知道的是如何更改 SiteContextSlot。

提前致谢!

您可以使用 Spartacus 的 cmsComponents 配置覆盖此 CMS 组件。请参阅文档 https://sap.github.io/spartacus-docs/customizing-cms-components/#page-title

cms 映射配置中使用的组件名称是 LanguageCurrencyComponent(或 CMSSiteContextComponent,具体取决于您的实际 CMS 数据)。

SiteContext 插槽(不是 'SiteContextSlot' 顺便说一句)在 CMS 中定义,默认包含 2 个组件。两者都是 CMSSiteContextComponent 类型。 CMSSiteContextComponent 有一个 属性 ('context') 来定义实际上下文。

上下文由 SiteContextSelectorComponent 获取,后者将逻辑委托给 SiteContextComponentServiceSiteContextComponentService 使用通用方法在 select 元素中加载上下文列表。

如果要更改 SiteContext 中的顺序或上下文 select,我建议如下:

  • 只需更改 CMS 中 SiteContextSlot 中组件的顺序即可更改顺序
  • 删除上下文;只需从 SiteContextSlot
  • 中删除一个组件
  • 添加自定义上下文(组件)。

添加新上下文有不同的选项: - 添加 SiteContextSelectorComponent 的新实例。这相当复杂,因为您需要在后端引入一个新的上下文(虽然只是一个枚举)并扩展 SiteContextComponentService 以便可以使用新的上下文。 - 创建您自己的上下文组件以呈现额外的上下文 - 创建自定义组件以呈现所有上下文(您将替换 SiteContextSlot 内的所有组件并添加新组件)。 - 完全忘记 CMS,正如你所建议的那样,一起覆盖插槽。这实际上适用于网点。

您还可以混合搭配以上选项:

  • 保留 CMS 中的现有组件(但可能会重新排序)
  • 使用带有 OutletPosition 的插座,在那里你会有额外的组件。

下面的代码在代码中向您展示了这一点

<ng-template cxOutletRef="SiteContext" cxOutletPos="after">
  more context
</ng-template>