Skip to content

Für Entwickler

Entität

Landingpages sind die DAL-Entität repertus_seo_filter_landingpage und über die Admin-API unter /api/repertus-seo-filter-landingpage erreichbar, inklusive Suche (/api/search/repertus-seo-filter-landingpage) und Sync-API.

Wichtige Felder und Zuordnungen:

FeldBedeutung
name, title, description, metaTitle, metaDescription, keywordsÜbersetzbare Textfelder; title und metaTitle sind Pflicht
breadcrumbText des Breadcrumb-Eintrags; ohne Admin-Feld, nur per API
ogTitle, ogDescription, openGraphMediaIdOpen-Graph-Daten; werden gespeichert, aktuell nicht im Storefront ausgegeben
enabled, robotType, sitemapPrio, changeFreq, sitemapExcludeStatus und SEO-Strategie
configurationModeshared oder per_sales_channel
categoryId, useScNavKategorie bzw. Sales-Channel-Navigation
properties, manufacturersFilterkombination (M:N auf property_group_option und product_manufacturer)
parametersZusätzliche Listing-Parameter als Typ/Wert-Paare, zum Beispiel min-price = 10. Nur per API pflegbar, ohne Admin-Oberfläche.
salesChannelsSichtbarkeit im Modus shared
children, parentId, salesChannelIdSales-Channel-Varianten im Modus per_sales_channel
cmsPageId, slotConfigLayout und Elementinhalte
canonicalForeignKeyZiel der kanonischen URL (Foreign-Key einer seo_url)

Eine Landingpage per API anlegen:

json
POST /api/repertus-seo-filter-landingpage
{
  "name": "Tischdeko in Creme",
  "title": "Tisch/Creme",
  "metaTitle": "Tischdeko in Creme kaufen",
  "enabled": true,
  "configurationMode": "shared",
  "robotType": "follow, index",
  "categoryId": "0190…",
  "properties": [{ "id": "0190…" }],
  "salesChannels": [{ "id": "0190…" }]
}

Nach dem Anlegen erzeugt der Indexer die SEO-URLs; bei Warteschlangen-Indizierung asynchron.

Konfigurations-Modus per API wechseln

Der Moduswechsel läuft nicht über ein Feld-Update, sondern über zwei Aktionen, die Varianten anlegen bzw. zusammenführen und die SEO-URLs mit umhängen:

POST /api/_action/repertus/seo-filter-landingpage/{id}/convert-to-per-sales-channel
POST /api/_action/repertus/seo-filter-landingpage/{id}/convert-to-shared
     { "chosenVariantId": "…" }

Schreibzugriffe auf Landingpages im Modus per_sales_channel über die Admin-API werden ohne aktive In-App-Erweiterung mit HTTP 403 abgewiesen; die Rückumstellung auf shared ist immer erlaubt.

Storefront-Routen

RouteZweck
GET /landingpage/{landingpageId} (frontend.repertus.landingpage.page)Storefront-Seite; die SEO-URL zeigt hierauf
GET /widgets/landingpage/{navigationId}/checkPrüfung aus dem Listing, ob die aktiven Filter einer Landingpage entsprechen
/widgets/cms/tonur-seo-filter-landingpage/{landingpageId} und …/filterNachladen von Listing und Filtern per XHR

Events

  • Tonur\SeoFilterLandingpages\Storefront\Page\Landingpage\LandingpagePageLoadedEvent wird nach dem Laden der Storefront-Seite ausgelöst und trägt LandingpagePage, Kontext und Request. Die Seite erweitert die Navigationsseite um landingpage und parentCategoryUrl.
  • Tonur\SeoFilterLandingpages\Core\Content\Landingpage\Event\SeoFilterLandingpageIndexerEvent wird nach der Indizierung ausgelöst und stößt die SEO-URL-Erzeugung an.

Templates

Das Plugin erweitert diese Storefront-Templates:

  • storefront/page/content/index.html.twig: Breadcrumb-Block
  • storefront/layout/breadcrumb.html.twig: Landingpage als Breadcrumb-Element
  • storefront/component/product/listing.html.twig: Listing-Optionen (Landingpage-Filter, Zurück-Button, Prüf-URL)
  • storefront/element/cms-element-product-listing.html.twig: XHR-URLs des Listings

Das JavaScript-Plugin TonurSeoFilterLandingpageListingPlugin überschreibt Shopwares Listing-Plugin global (PluginManager.override('Listing', …)). Es sperrt die Landingpage-Filter, rendert den Zurück-Button und schickt bei jeder Filteränderung in jedem Listing die Weiterleitungsprüfung an frontend.repertus.landingpage.check. Eigene Listing-Overrides müssen davon erben oder die Prüfung selbst auslösen.

Landingpages generieren

Der Befehl bin/console repertus:seo-filter-landingpage:generate-for-filter legt Landingpages in Masse über die Sync-API an. Die Daten liefern Services, die Tonur\SeoFilterLandingpages\DataProvider\LandingpageDataProvider erweitern und mit tonur.seo_filter_landingpages.landingpage_data_provider getaggt sind:

php
class ColorLandingpageProvider extends LandingpageDataProvider
{
    public function getAction(): string { return 'upsert'; }
    public function getEntity(): string { return 'repertus_seo_filter_landingpage'; }
    public function getPayload(): array { /* Liste von Landingpage-Payloads */ }
}

Nach dem Import werden die SEO-URLs der neuen Landingpages direkt erzeugt.

SEO-URL-Vorlage

Die Route frontend.repertus.landingpage.page ist beim SEO-URL-System registriert. In der Vorlage stehen alle Felder der Landingpage unter landingpage bereit, ergänzt um propertyIds, manufacturerIds, parameters und, bei zugewiesener Kategorie, seoBreadcrumb.