SAP Spartacus Multi-Site Configuration

析构星云
• 阅读 2627

官方链接

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

Static Multi-Site Configuration

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

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

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

SAP Spartacus Multi-Site Configuration

site 的属性:theme,channel 和 language

SAP Spartacus Multi-Site Configuration

content catalog:
SAP Spartacus Multi-Site Configuration

默认显示的产品:

SAP Spartacus Multi-Site Configuration

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

SAP Spartacus Multi-Site Configuration

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”:

SAP Spartacus Multi-Site Configuration

而 Spartacus 使用 baseSite:
SAP Spartacus Multi-Site Configuration

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

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这