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
相关产品推荐
相关产品推荐

