Я работаю с SAP Spartacus/Composable Storefront 6.7 и у меня возникают проблемы с заголовками страниц.
В моем бэк-офисе я настроил все заголовки страниц, но мне нужно добавить «- Название компании» в качестве суффикса ко всем заголовкам страниц, включая все PLP и PDP.
Я попробовал решение ниже, и оно отлично работает на всех страницах контента, но имеет дефекты на PLP и PDP.
PLP сохраняется без какого-либо заголовка (показывает заголовок последней открытой мной страницы или URL-адрес страницы), а PDP показывает только название продукта без суффикса.
На app.module.ts
я добавил этого провайдера:
{
provide: PageMetaResolver,
useExisting: CustomPageMetaService,
multi: true,
},
И создал этот класс:
import { Injectable } from '@angular/core';
import {
BasePageMetaResolver,
PageHeadingResolver,
ContentPageMetaResolver,
PageTitleResolver,
PageType,
PageMetaResolver,
} from '@spartacus/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class CustomPageMetaService
extends PageMetaResolver
implements PageTitleResolver, PageHeadingResolver
{
constructor(private basePageMetaResolver: BasePageMetaResolver) {
super();
this.pageType = PageType.CONTENT_PAGE; // If I change this line to any other PageType, its stop working on all pages.
}
resolveHeading(): Observable<string | undefined> {
return this.basePageMetaResolver.resolveTitle();
}
resolveTitle(): Observable<string | undefined> {
return this.basePageMetaResolver
.resolveTitle()
.pipe(
map((title) =>
title
? `${title} - Company Name`
: 'Company Name'
)
);
}
}
Вместо расширения PageMetaResolver ПродуктПажеМетаРезолвер. Используйте, как показано ниже
import { ProductPageMetaResolver } from "@spartacus/core"
import { Observable, switchMap } from "rxjs"
export class CustomProductPageMetaResolver extends ProductPageMetaResolver {
override resolveHeading(): Observable<string> {
return super.resolveHeading();
}
override resolveTitle(): Observable<string> {
return this.product$.pipe(
switchMap((product) => {
// let title = product.name;
// title += this.resolveFirstCategory(product);
// title += this.resolveManufacturer(product);
let title = 'My Company Store';
return this.translation.translate('pageMetaResolver.product.title', {
title: title,
});
})
);
}
}
У меня работает, скрин прикреплю
Я понимаю, что ваша проблема связана с useExisting , лучше введите useClass, как показано ниже, обеспечить:PageMetaResolver, useClass:CustomProductPageMetaResolver, multi:true
чувак, большое спасибо, сейчас это работает, но мне нужно создать 3 сервиса/резольвера. один для страницы контента, один для страницы категории и последний для страницы сведений о продукте. Спасибо за ваше время :)
Я попробовал это решение для PDP, но оно не работает. Заголовок PDP возвращается пустым (с отображением URL-адреса на вкладке)