官方链接

CMS 中定义的每个站点都有自己的上下文,其中包括基本站点 ID、语言属性和货币属性。 上下文还定义了这些属性如何在 URL 中持久化。

Static Multi-Site Configuration

您可以通过定义上下文属性(例如基本站点、语言和货币)来配置您的应用程序。 当您将这些属性的值附加到店面 URL 时,店面将根据这些值进行配置。

例如访问https://localhost:4200/electronics-spa/en/USD/时,应用程序加载electronics-spa基地站点,设置站点语言为英语(en),设置货币为美元 (美元)。

上下文属性还为语言和货币下拉列表设置默认值,您可以使用它们来动态更改店面的上下文。

site 的属性:theme,channel 和 language

content catalog:

默认显示的产品:

配置现在放到 C:\Code\SPA\spartacus\projects\storefrontapp\src\app\spartacus\spartacus-b2c-configuration.module.ts 里了:

Context Properties

上下文属性位于 app.module.ts 中。

baseSite、语言和货币属性是将数组中的第一个元素作为默认值的数组。

urlParameters 属性采用其他上下文属性的值来创建附加到店面 URL 的上下文结构。

例如,如果您的店面 URL 是 https://localhost:4200,那么它会变为 https://localhost:4200/electronics-spa/en/USD/ 并具有以下上下文配置:

context: {baseSite: ['electronics-spa', //Selected by default because it is the first element in the list'electronics',],language: ['en'],currency: ['USD'],urlParameters: ['baseSite', 'language', 'currency']},...

Enabling Context in the Storefront URL

默认情况下,上下文不会出现在 Spartacus 店面 URL 中。

您可能希望在店面 URL 中显示上下文,以此作为优化 SEO 的一种方式,或保持 URL 与以前店面的兼容性。 例如,您可能希望搜索机器人根据 URL 中的语言和货币对不同版本的店面进行分类。 或者,您可能正在从另一个店面迁移到 Spartacus,该店面在店面 URL 中包含上下文,并且您希望保持先前建立的页面排名。

要在 URL 中包含上下文,请将 urlParameters 属性添加到 app.modules.ts 中的上下文属性。 下面是一个例子:

context: {baseSite: ['electronics-spa'],urlParameters: ['baseSite', 'language', 'currency']},

Automatic Multi-Site Configuration

此功能是在 Spartacus 库的 1.3 版中引入的。

CMS 中定义的每个站点都有自己的上下文,其中包括基本站点 ID、语言属性和货币属性。 上下文还定义了这些属性如何在 URL 中持久化。 您可以允许 Spartacus 根据 CMS 中定义的站点 URL 模式自动确定上下文。 您可以通过简单地不在 app.module.ts 中定义 context.baseSite 属性来启用此自动上下文配置。

在应用程序初始化之前,Spartacus 从后端获取基站点列表,将当前 URL 与 CMS 中定义的站点的 URL 模式进行比较,然后识别当前基站点及其语言, 货币和 URL 编码属性。

Mitigating the Initial Back End Call

对基本站点的后端的初始调用可能很慢,这会影响用户体验。 为了解决这个问题,您可以选择使用服务器端渲染 (SSR) 或渐进式 Web 应用程序 (PWA) 技术来缓存上下文。

Caching the Site Context with Server-Side Rendering

可以在服务器端渲染期间识别站点,并且可以使用 Angular TransferState 机制将上下文传输到浏览器。 为了避免在每次页面请求时调用服务器端的基本站点,可以使用反向代理缓存页面。

要允许在服务器端识别站点,您需要向 Spartacus 提供当前请求 URL。 您可以通过使用 ngExpressEngine 的 Spartacus 装饰器来完成此操作,该装饰器在幕后提供 SERVER_REQUEST_URL 注入令牌。 您可以在 main.server.ts 中进行配置,如下所示:

import { ngExpressEngine as engine } from '@nguniversal/express-engine';
import { NgExpressEngineDecorator } from '@spartacus/core';export const ngExpressEngine = NgExpressEngineDecorator.get(engine);

Caching the Back End Response with Base Sites in PWA

使用 PWA 时,Angular Service Worker 可以缓存提供基本站点的后端响应,方法是向 Service Worker 配置中的 dataGroups 数组添加配置。 以下是来自 ngsw-config.json 的示例:

{// ..."dataGroups": [// ...{"name": "basesites","urls": ["*/rest/v2/basesites?fields=baseSites\\(uid,defaultLanguage\\(isocode\\),urlEncodingAttributes,urlPatterns,stores\\(currencies\\(isocode\\),defaultCurrency\\(isocode\\),languages\\(isocode\\),defaultLanguage\\(isocode\\)\\)*"],"cacheConfig": {"maxSize": 1,"maxAge": "1d", // Set to 1 day. Customize this value according to your needs."strategy": "performance"}}]
}

Base Sites and Storefronts

当基本站点在 URL 参数中编码时,Spartacus 引用 baseSite 参数,而 CMS 将此参数称为 storefront. 您应该继续在 CMS 中使用店面参数名称,因为 Spartacus 将店面隐式映射到 baseSite。 其他参数,如语言和货币,不受影响。

如下图所示:backoffice CMS 里使用参数 “storefront”:

而 Spartacus 使用 baseSite:

Writing URL Patterns in Java

由于历史原因,在 CMS 中定义的具有 URL 模式的正则表达式是用 Java 编写的。 但是,这些正则表达式是在前端使用 JavaScript 计算的。 您应该继续在 CMS 中使用 Java regex,它们将在 Spartacus 中隐式转换为 JavaScript。 例如,为了不区分大小写,诸如 (?i) 之类的修饰符被映射到 /i。

注意:虽然 Java regex 和 JavaScript 之间的现有映射应该足以满足最常见的情况,但并非所有 Java regex 功能都在 JavaScript 中可用,因此验证您的 URL 模式不使用 Java regex 功能在 JavaScript 中不可用非常重要 JavaScript。 否则,任何带有错误 URL 模式的基本站点都不会被 Spartacus 识别。

Disabling a Base Site

无论 CMS 中定义的选项如何,例如 active、activeFrom 或 activeTo,后端端点都会返回所有基本站点的列表,不包含有关该站点是否处于活动状态的任何信息。 要禁用基本站点,您必须删除该基本站点的 URL 模式。

作为替代的低级解决方法,您可以设置对后端数据库调用的限制,以仅过滤活动站点。

更多Jerry的原创文章,尽在:“汪子熙”:

SAP Spartacus Multi-Site Configuration相关推荐

  1. SAP Spartacus Static Multi-Site Configuration

    官方链接 Static Multi-Site Configuration 您可以通过定义上下文属性(例如基本站点.语言和货币)来配置您的应用程序. 当您将这些属性的值附加到店面 URL 时,店面将根据 ...

  2. SAP Spartacus的site context配置

    https://github.com/SAP/spartacus-docs/blob/901d0521dcf4668e2ddc5982947268becd0e66dd/_pages/dev/conte ...

  3. SAP Spartacus powertools-spa site在Commerce Cloud后台的属性

    这个site的前台界面: 该site的base store为powertools,catalog为Powertools product catalog: site channel,B2B 或者 B2C ...

  4. SAP Spartacus名为Configuration的injection token

    Configuration injection token创建的factory方法: factory方法返回的值是{}, inject(DefaultConfig)和inject(RootConfig ...

  5. SAP Spartacus的site context配置参数SiteContextParamsService

    clone request之前: "https://jerry.eastus.cloudapp.azure.com:9002/occ/v2/electronics-spa/cms/pages ...

  6. SAP Spartacus central configuration - B2cStorefrontModule

    这个central config的源代码: import {AnonymousConsentsConfig,AsmConfig,AuthConfig,CartConfig,CmsConfig,Exte ...

  7. user.config.ts文件里定义的配置是如何合并到SAP Spartacus的标准配置里去的

    user.config.ts文件里提供的默认配置: userRoutingConfig userCmsConfig userTableConfigFactory - function provideD ...

  8. 什么是SAP Spartacus schematics

    https://sap.github.io/spartacus-docs/schematics/ SAP Spartacus Schematics提供了一个向导,能够帮助您将Spartacus lib ...

  9. SAP Spartacus ConfigurationService

    位于文件configuration.service.ts内: import { Inject, Injectable, OnDestroy } from '@angular/core'; import ...

  10. SAP Spartacus UI 服务器端渲染的调试启动方式 - debug 模式

    首先确认你已经熟悉这篇文章的启动方式:SAP Spartacus develop branch 的服务器端渲染启动方式. 第一步 添加一个新的 build script,把 --configurati ...

最新文章

  1. 所有各数据库或文件的连接串定义CHM文件.
  2. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  3. HDR-100-24N LRS-100-24 漏电测量
  4. java 点是否在三角形_java – 查找点是否在三角形内
  5. RFID图书管理系统程序源代码(转)
  6. Django_form补充
  7. [thinkphp 5.0源码阅读] 缓存(一)
  8. 【codevs1946】【BZOJ2434】阿狸的打字机,AC自动机练习
  9. 获取屏幕的宽高 android,Android获取屏幕宽高的方法
  10. 微信上线红包新玩法,今年春节可以“当面”给红包了!
  11. Linux中如何使用帮助
  12. C++查找一个目录下所有特定扩展名的文件
  13. C#设计模式系列:抽象工厂模式(AbstractFactory)
  14. SMTP命令 发送邮件 DOS命令
  15. 计算机基础知识教程excel单元格拆分,如何快速的拆分Excel单元格日期与时间呢?...
  16. 如何成为一名成功的自由程序员?
  17. 京东口罩到货,邮件实时通知
  18. 图片瀑布流差异化设计尝试
  19. 重磅!Linux基金会白皮书:开源软件技术不受美国出口管制
  20. 2020年蓝桥杯模拟赛解题报告(Python真香)

热门文章

  1. PLSQL Developer 运用Profiler 分析存储过程性能
  2. 专家称 AI 可以在 120 年内接管人类的所有工作
  3. mariadb集群初次启动方法
  4. Wpf 调用线程无法访问此对象,因为另一个线程拥有该对象,解决方案
  5. 消除软硬件鸿沟,芯客网完美支持智能硬件在移动互联时代的爆发
  6. Apache 安装的2种方法
  7. Android手机WIFI与电脑间共享文件
  8. 人人商城小程序用户授权问题
  9. sql server 生成万年历
  10. long long , __int64 范围