XML-Sitemap: Erweiterbarkeit
XML-Sitemap für Sylius 2 erweitern: eigene URL-Provider für CMS-Seiten oder Marken, Services dekorieren, Twig-Hooks der Admin-Seite und Hinweise zur Kompatibilität.
XML-Sitemap: Erweiterbarkeit
Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Sylius selbst kennt keine CMS-Seiten und keine Hersteller, deshalb gibt es dafür keine eingebauten Provider. Eigene URLs ergänzt du mit einem eigenen Provider.
Eigener URL-Provider
Implementiere Mmd\SyliusSitemapPlugin\Provider\UrlProviderInterface. Mit aktivierter Autokonfiguration (Symfony-Standard) wird der Service automatisch mit dem Tag mmd_sylius_sitemap.url_provider versehen:
use Mmd\SyliusSitemapPlugin\Provider\UrlProviderInterface;
use Mmd\SyliusSitemapPlugin\Sitemap\ChannelContext;
use Mmd\SyliusSitemapPlugin\Sitemap\SitemapUrl;
final class BrandUrlProvider implements UrlProviderInterface
{
public function getSection(): string
{
return 'brands'; // die Datei heißt sitemap-brands-1.xml
}
public function supports(ChannelContext $context): bool
{
return true;
}
public function provide(ChannelContext $context): iterable
{
yield new SitemapUrl('https://' . $context->hostname . '/brands/acme');
}
}
| Methode | Aufgabe |
|---|---|
getSection() |
Name des Abschnitts. Er ist Teil des Dateinamens und besteht aus Kleinbuchstaben, Ziffern und Unterstrichen |
supports() |
Ob der Provider für diesen Channel Daten liefert |
provide() |
Die URLs als SitemapUrl, am besten als Generator, damit nichts im Speicher wächst |
Der ChannelContext liefert unter anderem hostname, defaultLocale, locales, code und die Einstellungen des Channels in settings.
Zu beachten:
- Jeder Provider schreibt eigene Dateien. Provider mit demselben Abschnitt teilen sich die Nummerierung, nicht eine Datei.
- Ein ungültiger Abschnittsname wird vor dem ersten Schreiben abgelehnt, auch wenn der Provider für keinen Channel aktiv ist.
- Eine URL, die mehrere Provider liefern, steht nur einmal in der Sitemap, in der Datei des ersten Providers.
- Hreflang-Alternativen und Bilder kannst du am
SitemapUrlselbst mitgeben (AlternateundSitemapImage). Für lokalisierte Routen eignet sichMmd\SyliusSitemapPlugin\Url\LocalizedUrlFactory.
Bestehende Teile austauschen
Um zu ändern, wie ein vorhandener Teil arbeitet, dekorierst du den passenden Service:
| Service-ID | Aufgabe |
|---|---|
mmd_sylius_sitemap.provider.product |
Produkt-URLs (Abschnitt products) |
mmd_sylius_sitemap.provider.taxon |
Kategorie-URLs (Abschnitt categories) |
mmd_sylius_sitemap.provider.static_route |
Statische Seiten (Abschnitt pages) |
mmd_sylius_sitemap.product_reader |
Liest die Produkte (Interface ProductReaderInterface) |
mmd_sylius_sitemap.taxon_reader |
Liest die Kategorien (Interface TaxonReaderInterface) |
mmd_sylius_sitemap.writer |
Schreibt das XML (Interface SitemapWriterInterface) |
mmd_sylius_sitemap.storage |
Dateispeicher (Interface SitemapStorageInterface) |
mmd_sylius_sitemap.generation_lock |
Sperre pro Channel (Interface GenerationLockInterface) |
mmd_sylius_sitemap.url_builder |
Baut absolute URLs über den Router (Interface ChannelUrlBuilderInterface) |
mmd_sylius_sitemap.image_url_resolver |
Bildet Bild-URLs (Klasse ImageUrlResolver) |
mmd_sylius_sitemap.generator |
Erzeugt die Dateien eines Channels (Interface SitemapGeneratorInterface) |
mmd_sylius_sitemap.refresher |
Prüft, sperrt und startet die Generierung (Interface SitemapRefresherInterface) |
Die Reihenfolge der Dateien im Index folgt der Tag-Priorität: Produkte (30), Kategorien (20), statische Seiten (10). Eigene Provider ohne Priorität kommen danach.
Admin-Seite erweitern
Die Admin-Seite der Einstellungen nutzt zwei Twig-Hooks. Eigene Inhalte oder Buttons hängst du an denselben Hook-Namen:
| Hook | Inhalt |
|---|---|
sylius_admin.sitemap_settings.index.content.header.title_block.actions |
Aktionsleiste neben „Erstellen“, enthält den Button „Jetzt generieren“ |
sylius_admin.sitemap_settings.index.content.header.title_block |
Titelblock, zeigt unter dem Titel die installierte Plugin-Version über die Twig-Funktion sitemap_plugin_version() |
sitemap_plugin_version() liefert die per Composer installierte Version des Plugins, bei einer Installation aus einem Pfad-Repository dev-main@ mit dem kurzen Commit-Hash.
Kompatibilität
Das Projekt folgt Semantic Versioning. ChannelSettingsFormType und AdminMenuListener sind als @internal markiert: Ihre Konstruktoren und Interna können sich in einem Minor-Release ändern und gehören nicht zur Erweiterungs-API. Dekoriere sie nicht.