首页 > 解决方案 > Spartacus 多站点特定配置

问题描述

我们想在 Spartacus 的前端存储一些特定于站点的配置。例如:(多站点设置的)每个站点都有不同的 Google API 密钥。

现在,我已经建立了一个 CONFIG_INITIALIZER 工厂,如下所示。但是对于虚假的范围界定,这似乎不是正确的方法。

import { Inject, Injectable } from '@angular/core';
import { ConfigInitializer, ConfigInitializerService, deepMerge } from '@spartacus/core';
import { StoreFinderConfig } from '@spartacus/storefinder/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { MultiSiteConfigChunk } from './multisiteconfig-tokens';

@Injectable({ providedIn: 'root' })
export class MultisiteConfigInitializer implements ConfigInitializer {

  // Fake scoping :(
  readonly scopes = ['all'];

  readonly configFactory = () => this.resolveConfig().toPromise();

  constructor(
    protected configInit: ConfigInitializerService,  @Inject(MultiSiteConfigChunk) private multiSiteConfig: Array<any>) {
  }

  protected resolveConfig(): Observable<StoreFinderConfig> {
    return this.configInit.getStable('context.baseSite').pipe(
      map((config) => {
        const mergedConfig = deepMerge(...this.multiSiteConfig);
        return mergedConfig[config.context.baseSite];
      })
    );
  }
}

有什么推荐的方法可以做到这一点?

标签: spartacus-storefront

解决方案


您可以先查看此文档:https ://sap.github.io/spartacus-docs/automatic-context-configuration/#adding-a-custom-context

如果你使用自动上下文配置,你也可以试试这个:

  1. 扩展SiteContextConfigInitializer(在子类中注入您的 multiSiteConfig);替换SiteContextConfigInitializer在提供者中使用孩子。
  2. 子类中的替换getConfig函数以将 Google API 密钥添加到site-context.

推荐阅读