spartacus-storefront - 如何添加我的自定义页面解析器而不是 Spartacus 页面解析器?
问题描述
我正在将我的解析器(从 PageMetaResolver 扩展)添加到我自己的 home.module 中的提供程序中。但是,我的方法'resolve'没有被调用。你有什么想法吗?
@Injectable({
providedIn: 'root'
})
export class HomePageMetaResolver extends PageMetaResolver implements PageDescriptionResolver {
constructor(
protected routingService: RoutingService,
protected translationService: TranslationService,
protected cms: CmsService
) {
super();
this.pageType = PageType.CONTENT_PAGE;
}
resolve(): Observable<PageMeta> {
console.log('RESOLVE')
return this.cms.getCurrentPage().pipe(
switchMap(page =>
combineLatest([
this.resolveDescription()
])
),
map(([description]) => ({ description }))
);
}
resolveDescription(): Observable<string> {
return new Observable(sub => {
sub.next('test description');
});
}
}
解决方案
TL;博士
请指定不仅this.pageType
,而且this.pageTemplate
为您的PageMetaResolver
。
详细解释
最具体的页面元解析器获胜
从您的元解析器的名称猜测,您只想为您的主页提供自定义元。请注意,由于简单的评分算法,最具体的元解析器获胜,该算法考虑了 2 个因素:页面类型和页面模板(参见源https://github.com/SAP/cloud-commerce-spartacus-storefront/blob /develop/projects/core/src/cms/page/page-meta.resolver.ts#L11)。
目前,您的解析器HomePageMetaResolver
与通用解析器具有相同的特异性,因此resolve
不会调用您的方法。
您需要通过定义其属性来指定更多元解析器this.pageTemplate = '<name-of-page-template-used-only-at-homepage>'
。然后,每当您访问主页时,您HomePageMetaResolver
将获得比默认值更高的分数。ContentPageMetaResolver
自定义评分算法
对于自定义评分算法(例如可以考虑pageId
),您可以覆盖getScore
您PageMetaResolver
的 s. 您甚至可以扩展该方法PageMetaService.getMetaResolver
以重新定义选择正确页面元解析器的所有规则。但是对于您的情况,标准解决方案(如上所述)就足够了。
推荐阅读
- json - Scrapy Json 返回相同的内容
- docker - kubectl 顶部节点`错误:指标尚不可用`。使用 metrics-server 作为 Heapster 已弃用
- jquery - Angular - 如何在组件模板中引用类变量?
- excel - Excel/VBA 循环仅在第一个文件上执行
- python - 从标准输入读取时如何处理索引
- asp.net-core - 通过 UserManager 更新用户会清除导航属性
- ruby-on-rails - Heroku + Apartment:Apartment::FileNotFound: /app/db/schema.rb 尚不存在
- python - 无法读取日志文件,但复制粘贴到记事本后可以读取
- android - Android平板电脑以太网连接进行网络通信?
- javascript - 使用 html 将几个文本框中的内容邮寄到 gmail