乐趣区

关于go:SAP-Spartacus-UI-中的-CmsTicketInterceptor

在 Spartacus UI 发动的 OCC API 申请的 URL 中,您可能会留神到一个名为 cmsTicketId 的字段。这个字段的含意与用处如下:

cmsTicketId 是一个标识符,用于关联 Spartacus UI 与 SAP Commerce Cloud 后端 CMS (Content Management System) 的会话。CMS 是一个用于治理网站内容的零碎,如页面、组件和其余与前端显示相干的元素。在 SAP Commerce Cloud 中,CMS 通过 CMS Cockpit 或者 SmartEdit 工具进行治理。为了确保在 Spartacus UI 中显示的内容与 CMS 的状态保持一致,须要应用一个会话标识符来关联二者。这就是 cmsTicketId 的作用。

当用户在 CMS 中进行更改并预览更改后果时,零碎会创立一个 CMS 会话票证(CMS Ticket)。这个票证蕴含了以后 CMS 会话的所有更改,但尚未公布到生产环境。Spartacus UI 会将这个票证的 ID 作为 cmsTicketId 参数传递给 OCC API,以便在 API 申请中获取与该票证关联的 CMS 数据。这样,用户就能够在 Spartacus UI 中实时预览他们在 CMS 中所做的更改。

cmsTicketId 参数只在开发或预览模式下应用,以确保用户可能预览未公布的 CMS 更改。在生产环境中,Spartacus UI 通常不会传递 cmsTicketId 参数,因为生产环境只显示已公布的 CMS 内容。

为了让 SmartEdit 可能在可组合的商店界面加载页面,须要向 SmartEdit 发送所有所需的上下文数据。这包含站点、内容目录和内容目录版本,还能够指定语言、日期和工夫。因而,须要将 cmsTicketId 附加到从可组合商店界面发送到后端的任何 CMS 申请中。

为此,可组合商店界面具备 CmsTicketInterceptor。如果存在 cmsTicketId 并且申请指定了 cms,拦截器会将 cmsTicketId 增加为申请参数之一。以下是一个示例:

https://localhost:9002/occ/v2/electronics-spa/cms/pages?lang=…

拿到的响应如下:

把失去的 page uuid 进行 base64 解码:

eyJpdGVtSWQiOiJsb2dpbiIsImNhdGFsb2dJZCI6ImVsZWN0cm9uaWNzLXNwYUNvbnRlbnRDYXRhbG9nIiwiY2F0YWxvZ1ZlcnNpb24iOiJTdGFnZWQifQ==

失去后果:

{"itemId":"login","catalogId":"electronics-spaContentCatalog","catalogVersion":"Staged"}

如果应用 cmsTicketId 发送 CMS 申请,响应的 JSON 数据中将蕴含一个 properties 字段。properties 字段蕴含了所需的动静属性组,这些属性组实用于蕴含的 CMS 项。例如,CMS 页面中的属性可能蕴含以下数据:

...
"label" : "homepage",
"properties" : {
    "smartedit" : {"classes" : "smartedit-page-uid-homepage smartedit-page-uuid-eyJpdGVtSWQiOiJob21lcGFnZSIsImNhdGFsb2dJZCI6ImVsZWN0cm9uaWNzLXNwYUNvbnRlbnRDYXRhbG9nIiwiY2F0YWxvZ1ZlcnNpb24iOiJTdGFnZWQifQ== smartedit-catalog-version-uuid-electronics-spaContentCatalog/Staged"}
    }
}

在 smartedit 组中,存在一个 classes 属性。classes 属性的值是此特定 CMS 页面所需的 SmartEdit 合同。因而,您须要将这些类增加到 HTML body 标签的类列表中。如果您查看 HTML 页面源代码,您将看到 body 标签具备此 classes 属性。以下是一个示例:

<body class="smartedit-page-uid-homepage smartedit-page-uuid-eyJpdGVtSWQiOiJob21lcGFnZSIsImNhdGFsb2dJZCI6ImVsZWN0cm9uaWNzLXNwYUNvbnRlbnRDYXRhbG9nIiwiY2F0YWxvZ1ZlcnNpb24iOiJTdGFnZWQifQ== smartedit-catalog-version-uuid-electronics-spaContentCatalog/Staged">
    <cx-storefront ng-version="8.0.0" class="stop-navigating"><header><cx-page-layout section="header" ng-reflect-section="header" class="header"><!--bindings={...
退出移动版