添加新的 CMS 页面类型 "VendorPage"

Add new Cms PageType "VendorPage"

有没有一种简单的方法可以将 PageType "VendorPage" 添加到 Spartacus?

我们的用例: 我们在 Hybris 中使用市场扩展,它添加了 VendorPage PageType。我们现在创建了一个 VendorPage 模板(仅限于 VendorPage 类型),可以在 SmartEdit 中创建多个供应商页面。我们想通过 URL 访问这些页面,类似于:/vendor/vendorName。但是,Spartacus 默认总是尝试获取 ContentPage:

/cms/pages?fields=DEFAULT&pageType=ContentPage&pageLabelOrId=/vendor/vendorName

我调查并找到了 router reducer,与 PageType 的匹配发生在此处

if (params['productCode']) {
        context = { id: params['productCode'], type: PageType.PRODUCT_PAGE };
      } else if (params['categoryCode']) {
        context = { id: params['categoryCode'], type: PageType.CATEGORY_PAGE };
      } else if (params['brandCode']) {
        context = { id: params['brandCode'], type: PageType.CATEGORY_PAGE };
      } else if (state.data.pageLabel !== undefined) {
        context = { id: state.data.pageLabel, type: PageType.CONTENT_PAGE };
      } else if (!context) {
        ....

然后我尝试在我们的应用程序中替换这个 "CustomSerializer" 但随后还必须定义一个自定义 "PageContext" 类型,这导致 "CmsActivatedRouteSnapshot" 并且有一次我卡住了,因为我登陆了 ngRx RouterState 定义的状态。

我是不是做错了?在 Spartacus 中添加新的 Cms PageType 有更简单的方法吗?或者,也许还有其他方法可以实现我们的需求?

我不确定它对你来说是否仍然真实......

Currently the logic for detecting the pageType by route is hardcoded in the CustomSerializer class.

是的,理论上你是对的,要覆盖检测 pageType 的逻辑,我们只需要为 RouterStateSerializer 提供自实现的 CustomSerializer class,但是我老实说暂时不可能。

顺便说一下,Spartacus 团队已经有关于这个问题的问题,您可以在此处找到更多详细信息 https://github.com/SAP/spartacus/issues/7187