Skip to content

Konfigurationsreferenz

Diese Seite enthält alle Plugin-Einstellungen, das Entitäts-Glossar für eigene Blöcke und die ACL-Berechtigungsstruktur.

Plugin-Einstellungen

Diese Einstellungen werden unter Erweiterungen > Meine Erweiterungen > CMS Block Builder > Konfigurieren (oder über die Shopware-Admin-Systemkonfiguration) festgelegt.

Plugin-Konfigurationsseite mit den Einstellungen defaultCategory und maxColumnsPerRow

CMS Block Builder

EinstellungTypStandardBeschreibung
defaultCategory — Standardkategorie für neue Blöckesingle-selectcustomOptionen: custom (Benutzerdefiniert), text-image (Text & Bild), commerce (Commerce), video (Video).
maxColumnsPerRow — Maximale Spalten pro Zeileint6Die maximale Anzahl an Spalten, die ein Händler zu einer Zeile im Block-Editor hinzufügen kann.

Entität: ssd_custom_block

Jeder eigene Block wird als eine Zeile in dieser Entität gespeichert. Die Entität ist übersetzbar — das Feld label speichert sprachspezifische Anzeigenamen.

FeldTypPflichtBeschreibung
idUUID (Binär 16)JaPrimärschlüssel. Wird automatisch generiert.
technicalNamestringJaEindeutiger Bezeichner, der als CMS-Block-Typ verwendet wird (ssd-custom-<technicalName>). Nach der Erstellung unveränderlich.
labelstring (übersetzbar)JaLesbarer Anzeigename, der im CMS-Block-Picker angezeigt wird.
categorystringJaKategoriegruppe im Block-Picker. Eines von: custom, text-image, commerce, video oder eine andere Kategorie im Shopware-Block-Registry.
gridConfigJSONJa12-Spalten-CSS-Grid-Bereichsdefinitionen je Breakpoint. Siehe Datenmodell unten.
slotsJSONJaSlot-ID-zu-Elementtyp-Zuordnung. Schlüssel sind Bereichs-IDs aus gridConfig; Werte sind { type, config }-Objekte.
previewMediaIdUUID (FK zu media)NeinOptionales Vorschaubild im Block-Picker.
positionintNeinSortierreihenfolge innerhalb einer Kategorie im Block-Picker. Standard: 0. Niedrigere Werte erscheinen zuerst.
activeboolNeinOb der Block im Block-Picker registriert ist. Standard: true.
createdAtdatetimeJaWird automatisch bei der Erstellung gesetzt.
updatedAtdatetimeNeinWird automatisch beim Speichern aktualisiert.

Übersetzungs-Entität: ssd_custom_block_translation

FeldTypBeschreibung
ssd_custom_block_idUUIDFK zu ssd_custom_block.
language_idUUIDFK zu language.
labelstringÜbersetzter Anzeigename für diesen Block.

gridConfig-Datenmodell

json
{
  "columns": 12,
  "gridRows": 4,
  "breakpoints": {
    "desktop": {
      "areas": [
        { "id": "slot-0", "rowStart": 0, "colStart": 0, "rowEnd": 1, "colEnd": 6 },
        { "id": "slot-1", "rowStart": 0, "colStart": 6, "rowEnd": 1, "colEnd": 12 }
      ]
    },
    "tablet": { "areas": [] },
    "mobile": { "areas": [] }
  }
}
  • columns — immer 12. Das Grid ist ein festes 12-Spalten-CSS-Grid.
  • gridRows — Anzahl der Zeilen im Grid-Canvas. Minimum 1.
  • breakpoints.desktop.areas — das maßgebliche Layout. Jeder Bereich hat eine Slot-id, sowie nullbasierte rowStart/rowEnd/colStart/colEnd in CSS-Grid-Koordinaten.
  • breakpoints.tablet.areas / breakpoints.mobile.areas — optionale unabhängige Layouts. Leere Arrays bedeuten, dass das Desktop-Layout bei diesem Breakpoint als Fallback verwendet wird.

slots-Datenmodell

json
{
  "slot-0": { "type": "image", "config": {} },
  "slot-1": { "type": "text", "config": {} }
}

Schlüssel sind Bereichs-IDs aus gridConfig.breakpoints.desktop.areas. Der type-Wert ist der Shopware-CMS-Elementtypname (z. B. text, image, product-slider). Das config-Objekt enthält elementspezifische Standardwerte (derzeit nicht genutzt; die Element-Konfiguration wird in den CMS-Seitendaten gespeichert).


ACL-Berechtigungen

Das Plugin registriert eine Berechtigungsgruppe namens CMS Block Builder unter der Kategorie Inhalte in Shopwares Rollenverwaltung.

RolleGewährte BerechtigungenAbhängigkeiten
ssd_custom_block.viewerssd_custom_block:read, ssd_custom_block_translation:read, media:read, cms_block:readKeine
ssd_custom_block.editorssd_custom_block:update, ssd_custom_block_translation:update/create/delete, media:create/updateviewer
ssd_custom_block.creatorssd_custom_block:create, ssd_custom_block_translation:createviewer, editor
ssd_custom_block.deleterssd_custom_block:delete, cms_block:read, cms_section:read, cms_page:readviewer

Weisen Sie diese Rollen unter Einstellungen > System > Benutzerverwaltung > Rollen zu. Ein typischer Content-Redakteur benötigt viewer + editor. Ein Content-Manager benötigt zusätzlich creator. Nur Administratoren sollten die deleter-Rolle haben.


Storefront-Rendering

Das Plugin überschreibt cms-section-block-container.html.twig, um jeden Block abzufangen, dessen Typ mit ssd-custom- beginnt. Für diese Blöcke rendert es cms-block-ssd-custom-block.html.twig, das:

  1. Die ssdCustomBlock-Erweiterung liest, die CustomBlockRegistrationSubscriber beim Laden der Seite anhängt.
  2. Drei CSS-Grid-Container erstellt — Desktop, Tablet und Mobile — jeder mit grid-column- und grid-row-Inline-Styles aus den Bereichsdefinitionen.
  3. Das Standard-Shopware-CMS-Element-Template für jeden Slot einbindet.

Das responsive Umschalten wird in base.scss mit Bootstraps media-breakpoint-down()-Mixins gehandhabt: Das Desktop-Grid ist standardmäßig sichtbar; das Tablet-Grid ersetzt es bei ≤ md; das Mobile-Grid ersetzt beide bei ≤ sm.


Block-Registrierungsablauf

Zur Laufzeit folgt das Plugin dieser Reihenfolge, um eigene Blöcke im CMS-Editor verfügbar zu machen:

  1. CustomBlockCmsSubscriber hört auf GenericPageLoadedEvent und hängt aktive Blöcke als ssdCustomBlocks-Erweiterung an die Seite an.
  2. CustomBlockRegistrationSubscriber hört auf CmsPageLoadedEvent und hängt die passende gridConfig und slots als ssdCustomBlock-Erweiterung an jeden ssd-custom-*-Block auf der Seite an.
  3. Auf der Admin-Seite überschreibt ssd-cms-block-registry.js sw-cms-sidebar und ruft cmsService.registerCmsBlock() für jeden aktiven Block auf, der von der API abgerufen wird, um ihn im Block-Picker verfügbar zu machen.

Your Vision. Signed, Sealed, Delivered.