问题描述
我想将斯巴达克斯的语言和货币选择器替换为我自己的语言和货币选择器,并添加更多内容。问题是我无法cxOutletRef SiteContextSlot。我无法覆盖LanguageComponent和CurrencyComponet,如果可以的话,我也不想具有语言-货币,但不希望具有货币-语言。因此,我真正需要知道的是如何更改SiteContextSlot。
谢谢!
解决方法
SiteContext
插槽(不是'SiteContextSlot'btw)是在CMS中定义的,默认情况下它包含2个组件。两者均为CMSSiteContextComponent
类型。 CMSSiteContextComponent
具有用于定义实际上下文的属性(“上下文”)。
SiteContextSelectorComponent
将上下文委托给SiteContextComponentService
。 SiteContextComponentService
使用通用方法在select元素中加载上下文列表。
如果要更改SiteContext
中的顺序或上下文选择器,我建议以下内容:
- 只需更改CMS中
SiteContextSlot
内组件的顺序即可更改顺序 - 删除上下文;只需从
SiteContextSlot
中删除组件
- 添加自定义上下文(组件)。
有多种添加新上下文的选项:
-添加SiteContextSelectorComponent
的新实例。这是相当复杂的,因为您需要在后端(尽管只是一个枚举)引入一个新的上下文并扩展SiteContextComponentService
以便可以使用新的上下文。
-创建自己的上下文组件以呈现其他上下文
-创建自定义组件以呈现所有上下文(您将替换SiteContextSlot
中的所有组件并添加新组件)。
-完全不使用CMS,并且如您所建议,请一起覆盖该插槽。实际上,这可以在网点使用。
您还可以混合使用上述选项:
- 保留CMS中的现有组件(但可能会对其重新排序)
- 在
OutletPosition
上使用插座,以备不时之需。
下面的代码通过代码向您显示
<ng-template cxOutletRef="SiteContext" cxOutletPos="after">
more context
</ng-template>
,
您可以使用Spartacus的cmsComponents
配置覆盖此CMS组件。参见文档https://sap.github.io/spartacus-docs/customizing-cms-components/#page-title
在cms映射配置中使用的组件名称为LanguageCurrencyComponent
(或CMSSiteContextComponent
,具体取决于您的实际CMS数据)。