You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP Spartacus 3.6:分类页与商品详情页自定义页面标题求助

How to Customize Page Titles for Category Pages and PDP in SAP Spartacus 3.6

我帮你梳理下具体的实现步骤,完全适配Spartacus 3.6版本,正好对应你提到的需求:

1. 创建自定义分类页Meta Resolver

分类页目前标题为空,我们可以通过继承CategoryPageMetaResolver,直接复用Backoffice配置的分类描述来生成页面标题:

import { Injectable } from '@angular/core';
import { CategoryPageMetaResolver, CategoryService, PageTitleResolver } from '@spartacus/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({ providedIn: 'root' })
export class CustomCategoryPageMetaResolver extends CategoryPageMetaResolver implements PageTitleResolver {
  constructor(protected categoryService: CategoryService) {
    super(categoryService);
  }

  resolveTitle(): Observable<string> {
    // 获取当前路由对应的分类数据,提取Backoffice配置的描述作为标题
    return this.categoryService.getCurrentCategory().pipe(
      map(category => category?.description || '默认分类标题') // 可以设置一个fallback值防止为空
    );
  }
}

2. 创建自定义商品详情页(PDP)Meta Resolver

PDP默认标题是「商品名称 - 网站名称」,我们需要移除商品名称,只保留网站名称:

import { Injectable } from '@angular/core';
import { ProductPageMetaResolver, SiteContextConfig, WindowRef } from '@spartacus/core';
import { Observable, of } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class CustomProductPageMetaResolver extends ProductPageMetaResolver {
  constructor(
    protected siteContextConfig: SiteContextConfig,
    protected winRef: WindowRef
  ) {
    super(siteContextConfig, winRef);
  }

  resolveTitle(): Observable<string> {
    // 直接返回网站名称,也可以替换成你需要的固定文本
    return of(this.siteContextConfig.site?.name || '默认网站名称');
  }
}

3. 在模块中配置Provider替换默认Resolver

最后在你的AppModule(或者对应的Feature模块,比如ProductModule/CategoryModule)中添加Provider配置,替换Spartacus默认的Resolver:

import { NgModule } from '@angular/core';
import { PageMetaResolver, CategoryPageMetaResolver, ProductPageMetaResolver } from '@spartacus/core';
import { CustomCategoryPageMetaResolver } from './custom-category-page-meta.resolver';
import { CustomProductPageMetaResolver } from './custom-product-page-meta.resolver';

@NgModule({
  providers: [
    // 注册自定义Resolver到PageMetaResolver集合
    {
      provide: PageMetaResolver,
      useExisting: CustomCategoryPageMetaResolver,
      multi: true,
    },
    {
      provide: PageMetaResolver,
      useExisting: CustomProductPageMetaResolver,
      multi: true,
    },
    // 直接替换默认的分类/PDP专属Resolver,确保优先级
    {
      provide: CategoryPageMetaResolver,
      useClass: CustomCategoryPageMetaResolver,
    },
    {
      provide: ProductPageMetaResolver,
      useClass: CustomProductPageMetaResolver,
    },
  ],
})
export class AppModule {}

关键说明

  • 我们只需要重写resolveTitle方法即可,其他元数据逻辑可以复用Spartacus默认实现
  • 分类页的categoryService.getCurrentCategory()会自动关联当前路由的分类,直接读取description就能拿到Backoffice配置的内容
  • PDP中通过SiteContextConfig获取网站名称,如果你需要固定文本,直接修改of()里的内容就行

内容的提问来源于stack exchange,提问作者Rodrigo Roberto de Almeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:30:42