如何使用自定义解析器作为PageTitleResolver,PageDescriptionResolver等添加自定义元数据

问题描述 投票:1回答:1

我创建了一个扩展“ ContentPageMetaResolver”的页面,该页面实现了PageRobotsResolver

export class MyContentPageMetaResolver extends ContentPageMetaResolver implements
PageRobotsResolver {

pageType = PageType.CONTENT_PAGE;
pageTemplate = 'StaticContentPageTemplate';

resolveRobots(): Observable<PageRobotsMeta[]> {
  return of(new Array(PageRobotsMeta.NOFOLLOW, PageRobotsMeta.NOINDEX));
}
}

因此,这将以下条目添加到页面的head元素:

<meta name="robots" content="NOFOLLOW, NOINDEX">

现在我需要对关键字执行相同的操作。任何想法如何创建自定义解析器实现?

PageRobotsResolver接口在page.resolvers.d.ts文件中是开箱即用的:

/**
* Resolves the robot information for the page. This is used by
* search engines to understand whether the page and subsequential links
* should be indexed.
*
*/

export interface PageRobotsResolver {
/**
 * Resolves the robots for the page.
 *
 * @deprecated since version 1.3
 * Use `resolveRobots()` instead.
 */
resolveRobots(...args: any[]): Observable<PageRobotsMeta[]>;
/**
 * Resolves the robots for the page.
 */
resolveRobots(): Observable<PageRobotsMeta[]>;

}

并将以下内容添加到我的模块的提供者列表中:

@NgModule({
providers: [
    { provide: ContentPageMetaResolver, useExisting: MyContentPageMetaResolver }
]
})
spartacus-storefront
1个回答
0
投票

PageMetaResolverPageMetaService用于生成页面元数据。可以在specific解析器中添加特定的元数据(即,在MyContentPageMetaResolver中),也可以扩展PageMetaResolver来收集所有解析器的其他元数据。

默认情况下,Spartacus在各种解析器上进行迭代(从功能标志1.3开始),并且-如果实现了解析器,则会将解析后的数据添加到页面元模型中。这是在PageMetaService中完成的,您could(但不应;,请参见下文)扩展该服务中resolverMethods的列表,以便调用您的自定义方法。

另一种(但不太灵活)的方法是提供自定义SeoMetaService,并覆盖meta设置器。同样,SeoMetaService仅限于页面元数据,而PageMetaService可以对应用程序的其他领域(例如结构数据)有所贡献。

是否在2020年使用关键字仍然不是一个好主意,我建议您仔细阅读这一内容,因为爬虫程序似乎早已不再为此担心。这就是为什么我们没有在Spartacus中添加默认解析程序的原因,但是如果您提出了很好的论据,我很想学习!

© www.soinside.com 2019 - 2024. All rights reserved.