如何使用自定义解析器添加自定义元数据,如 PageTitleResolver 、 PageDescriptionResolver 等
How to add a custom meta data using custom resolvers as PageTitleResolver , PageDescriptionResolver etc
我创建了一个扩展 "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));
}
}
因此,这是将以下条目添加到页面的头部元素:
<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 }
]
})
PageMetaResolver
被 PageMetaService
用来生成页面元数据。可以在 specific 解析器中添加特定的元数据(即在您的 MyContentPageMetaResolver
中),或者您可以扩展 PageMetaResolver
以收集所有解析器的额外元数据。
默认情况下,Spartacus 迭代(从功能标志 1.3
)各种解析器,并且 - 如果实现了解析器 - 将解析的数据添加到页面元模型。这是在 PageMetaService
中完成的,您 可以 (但不应该 ;),见下文)扩展该服务中 resolverMethods
的列表,以便您的自定义方法被调用。
另一种(但不太灵活)方法是提供自定义 SeoMetaService
,并覆盖 meta
setter。此外,SeoMetaService
仅限于页面元数据,而 PageMetaService
可用于应用程序的其他领域,例如结构数据。
在 2020 年使用关键字是否仍然是个好主意,我建议您继续阅读,因为爬虫似乎很久以前就不再为此担心了。这就是为什么我们没有在 Spartacus 中添加默认解析器的原因,但是如果您提出好的论据来这样做,我很想学习!
我创建了一个扩展 "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));
}
}
因此,这是将以下条目添加到页面的头部元素:
<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 }
]
})
PageMetaResolver
被 PageMetaService
用来生成页面元数据。可以在 specific 解析器中添加特定的元数据(即在您的 MyContentPageMetaResolver
中),或者您可以扩展 PageMetaResolver
以收集所有解析器的额外元数据。
默认情况下,Spartacus 迭代(从功能标志 1.3
)各种解析器,并且 - 如果实现了解析器 - 将解析的数据添加到页面元模型。这是在 PageMetaService
中完成的,您 可以 (但不应该 ;),见下文)扩展该服务中 resolverMethods
的列表,以便您的自定义方法被调用。
另一种(但不太灵活)方法是提供自定义 SeoMetaService
,并覆盖 meta
setter。此外,SeoMetaService
仅限于页面元数据,而 PageMetaService
可用于应用程序的其他领域,例如结构数据。
在 2020 年使用关键字是否仍然是个好主意,我建议您继续阅读,因为爬虫似乎很久以前就不再为此担心了。这就是为什么我们没有在 Spartacus 中添加默认解析器的原因,但是如果您提出好的论据来这样做,我很想学习!