Markus Michalski FAQ

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.

English Version

Zurück zur Übersicht

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:

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.