Skip to content

DmfCmsBlockLibrary

Zentrale Bibliothek zum Speichern und Wiederverwenden von CMS-Blöcken und -Sections in Shopware 6.7 Shopping Experiences. Editor:innen persistieren beliebige Blöcke oder ganze Sections (mit allen Slots und Elements), nutzen sie über jede beliebige Erlebniswelt und kopieren Blöcke oder Sections innerhalb einer Admin-Session zwischen Seiten, wiederkehrende Layouts müssen nicht mehr von Hand nachgebaut werden.

Schnellinfo

Composer-Paketdmf/sw6-plugin-cms-block-library
Plugin-KlasseDmf\CmsBlockLibrary\DmfCmsBlockLibrary
NamespaceDmf\CmsBlockLibrary
Version1.0.0
Shopware^6.7
PHP8.2+
ScopeAdmin-only, keine Storefront-Komponente

Installation

bash
composer require dmf/sw6-plugin-cms-block-library
bin/console plugin:refresh
bin/console plugin:install --activate DmfCmsBlockLibrary
bin/console cache:clear
bin/console database:migrate --all DmfCmsBlockLibrary
./bin/build-administration.sh

Reine Admin-Erweiterung

Kein Storefront-Build nötig. Gespeicherte Einträge sind Templates für den Page Builder; die Storefront rendert nach dem Einfügen wie gewohnt über cms_block und cms_section.

Konfiguration

DmfCmsBlockLibrary bringt keine Plugin-Konfiguration mit. Die Bedienung erfolgt direkt im Admin unter Inhalte → Blockbibliothek und Inhalte → Sectionbibliothek.

Features

  • Saved Blocks: beliebige CMS-Blöcke mit allen Slots persistieren und in jeder Erlebniswelt wiederverwenden.
  • Linked Blocks: alternativer Insert-Modus, der jede Instanz mit dem Bibliothekseintrag synchron hält. Änderungen an einer verlinkten Instanz propagieren live an alle weiteren Instanzen und an den Bibliothekseintrag.
  • Saved Sections: vollständige Sections (inkl. Blöcken und Elementen) persistieren und vor/nach beliebigen Sections einfügen.
  • Block-Bibliothek-Übersicht unter Inhalte → Blockbibliothek: Liste, Suche, Vorschau, Umbenennen, Löschen, Import, Export. Spalte Typ unterscheidet statische Kopien von Linked Blocks.
  • Section-Bibliothek-Übersicht unter Inhalte → Sectionbibliothek mit demselben Funktionsumfang.
  • Picker-Kategorie Saved Blocks, Drag-and-drop in die Erlebniswelt erzeugt einen frischen cms_block (neue UUIDs). Bei Linked-Mode behält die eingefügte Instanz eine Referenz auf den Bibliothekseintrag.
  • Block-Copy/Paste in der Block-Sidebar: vor/nach beliebigen Block einfügen, über mehrere Seiten hinweg innerhalb derselben Admin-Session.
  • Section-Zahnrad auf jeder Section öffnet Section Settings: umbenennen, kopieren, einfügen, in Bibliothek speichern, gespeicherte Section vor/nach einsetzen.
  • JSON-Import/Export je Bibliothek.

Datenmodell

Zwei DAL-Entitäten, jeweils mit Standard-Admin-API-CRUD:

dmf_cms_saved_block

SpalteTypAnmerkung
idBINARY(16)UUID
nameVARCHAR(255)Anzeigename
tagsJSON NULLoptionale Liste aus Strings
block_typeVARCHAR(255)originaler cms_block.type
block_configJSONSnapshot Block + Slots
is_linkedTINYINT(1)1 = Linked-Mode
created_at/updated_atDATETIME(3)

dmf_cms_saved_section

SpalteTypAnmerkung
idBINARY(16)UUID
nameVARCHAR(255)Anzeigename
tagsJSON NULLoptional
section_typeVARCHAR(255)default, sidebar, …
section_configJSONSnapshot Section + Blöcke + Slots
created_at/updated_atDATETIME(3)

API-Endpunkte

Alle Routen liegen im Scope api und erfordern Admin-Auth.

MethodRouteBeschreibung
POST/api/search/dmf-cms-saved-blockDAL-Suche
POST/api/dmf-cms-saved-blockerstellen
PATCH/api/dmf-cms-saved-block/{id}aktualisieren
DELETE/api/dmf-cms-saved-block/{id}löschen
GET/api/_action/dmf-cms-block-library/export[?ids=…]JSON-Download
POST/api/_action/dmf-cms-block-library/importMultipart-Upload file
POST/api/_action/dmf-cms-block-library/{id}/syncneuen block_config persistieren, an alle Linked-Instanzen propagieren, betroffene cms-page-{id}-Cache-Tags invalidieren
POST/api/search/dmf-cms-saved-sectionDAL-Suche
POST/api/dmf-cms-saved-sectionerstellen
PATCH/api/dmf-cms-saved-section/{id}aktualisieren
DELETE/api/dmf-cms-saved-section/{id}löschen
GET/api/_action/dmf-cms-section-library/export[?ids=…]JSON-Download
POST/api/_action/dmf-cms-section-library/importMultipart-Upload file

UUIDs

Beim Import werden alle UUIDs neu generiert, derselbe Payload kann beliebig oft importiert werden, ohne Kollisionen zu erzeugen.

Linked Blocks

Wird ein Linked-Block in eine CMS-Seite eingefügt:

  • Block speichert customFields.dmfSavedBlockId und customFields.dmfLinked = true.
  • Live-Mirroring auf der Seite: Ein Watcher auf page.sections spiegelt Slot-Config-Änderungen sofort auf alle Geschwister-Instanzen desselben Bibliothekseintrags.
  • Live-Library-Sync (debounced): Derselbe Watcher pusht den neuen block_config nach ~800 ms Idle an die Sync-Route. Der Bibliothekseintrag bleibt aktuell, ohne dass gespeichert werden muss.
  • Auto-Sync beim Save: Beim Speichern der CMS-Seite werden alle Linked Blocks zusammengeführt und pro Saved-Block-ID gesynct.
  • Cache-Invalidierung: Sync-Route resolvt alle CMS-Seiten mit passender dmfLinked-Markierung und invalidiert deren cms-page-{id}-Tags.
  • Storefront-Rendering bleibt unverändert: Die Sync-Route schreibt direkt in cms_slot_translation.config, keine Runtime-Substitution.

Bedienung

Block speichern

  1. Erlebniswelt im Admin öffnen.
  2. Block markieren, die rechte Sidebar zeigt Settings und Quickactions.
  3. Als Block speichern, Name + optionale Tags eingeben, optional Als Linked-Block speichern aktivieren, Speichern.

Saved Block wiederverwenden

  1. Block-Picker (linke Sidebar) öffnen.
  2. Kategorie Saved Blocks auswählen.
  3. Eintrag auf die Stage ziehen.

Section-Settings (Zahnrad)

Jede Section zeigt ein Zahnrad neben den bestehenden Section-Actions. Im Modal:

  • Allgemein: Name editieren (Live-Binding, sichtbar im Navigator).
  • Aktionen: Section kopieren, Section nach einsetzen (aktiv, wenn Clipboard eine Section enthält), Section speichern.
  • Saved Section einfügen: vor/nach der aktuellen Section. Section, Blöcke und Slots erhalten neue UUIDs.

Bekannte Einschränkungen

Clipboard-Scope

Block- und Section-Clipboards leben in sessionStorage. Sie überleben Navigation innerhalb eines Admin-Tabs, aber nicht das Schließen des Tabs. Cross-Tab-Paste wird nicht unterstützt.

  • Import/Export ausschließlich JSON: keine Integration in Shopware Import/Export-Profile. Exporte sind nicht über Schema-Major-Versionen hinweg portabel.
  • Linked-Block-Editor zeigt Roh-JSON. Die Edit linked block-Modale exponieren den block_config über sw-code-editor. Ein WYSIWYG-Editor existiert nur für die Live-Instanzen, der CMS-Editor bleibt der empfohlene Pfad für nicht-technische Edits.
  • Linked-Block-Scope. Synchronisiert wird nur der block_config. Wrapper-Felder (cssClass, marginTop, backgroundColor) und Section-Zuordnung bleiben seitenlokal.
  • Sync schreibt durch in cms_slot_translation.config: sprachspezifische Overrides werden überschrieben.
  • Live-Mirroring nur seitenintern: Instanzen auf anderen Seiten aktualisieren erst nach Library-Sync und nächstem Storefront-Request.