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.

CMS Block Builder
| Einstellung | Typ | Standard | Beschreibung |
|---|---|---|---|
defaultCategory — Standardkategorie für neue Blöcke | single-select | custom | Optionen: custom (Benutzerdefiniert), text-image (Text & Bild), commerce (Commerce), video (Video). |
maxColumnsPerRow — Maximale Spalten pro Zeile | int | 6 | Die 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.
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
id | UUID (Binär 16) | Ja | Primärschlüssel. Wird automatisch generiert. |
technicalName | string | Ja | Eindeutiger Bezeichner, der als CMS-Block-Typ verwendet wird (ssd-custom-<technicalName>). Nach der Erstellung unveränderlich. |
label | string (übersetzbar) | Ja | Lesbarer Anzeigename, der im CMS-Block-Picker angezeigt wird. |
category | string | Ja | Kategoriegruppe im Block-Picker. Eines von: custom, text-image, commerce, video oder eine andere Kategorie im Shopware-Block-Registry. |
gridConfig | JSON | Ja | 12-Spalten-CSS-Grid-Bereichsdefinitionen je Breakpoint. Siehe Datenmodell unten. |
slots | JSON | Ja | Slot-ID-zu-Elementtyp-Zuordnung. Schlüssel sind Bereichs-IDs aus gridConfig; Werte sind { type, config }-Objekte. |
previewMediaId | UUID (FK zu media) | Nein | Optionales Vorschaubild im Block-Picker. |
position | int | Nein | Sortierreihenfolge innerhalb einer Kategorie im Block-Picker. Standard: 0. Niedrigere Werte erscheinen zuerst. |
active | bool | Nein | Ob der Block im Block-Picker registriert ist. Standard: true. |
createdAt | datetime | Ja | Wird automatisch bei der Erstellung gesetzt. |
updatedAt | datetime | Nein | Wird automatisch beim Speichern aktualisiert. |
Übersetzungs-Entität: ssd_custom_block_translation
| Feld | Typ | Beschreibung |
|---|---|---|
ssd_custom_block_id | UUID | FK zu ssd_custom_block. |
language_id | UUID | FK zu language. |
label | string | Übersetzter Anzeigename für diesen Block. |
gridConfig-Datenmodell
{
"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— immer12. Das Grid ist ein festes 12-Spalten-CSS-Grid.gridRows— Anzahl der Zeilen im Grid-Canvas. Minimum1.breakpoints.desktop.areas— das maßgebliche Layout. Jeder Bereich hat eine Slot-id, sowie nullbasierterowStart/rowEnd/colStart/colEndin 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
{
"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.
| Rolle | Gewährte Berechtigungen | Abhängigkeiten |
|---|---|---|
ssd_custom_block.viewer | ssd_custom_block:read, ssd_custom_block_translation:read, media:read, cms_block:read | Keine |
ssd_custom_block.editor | ssd_custom_block:update, ssd_custom_block_translation:update/create/delete, media:create/update | viewer |
ssd_custom_block.creator | ssd_custom_block:create, ssd_custom_block_translation:create | viewer, editor |
ssd_custom_block.deleter | ssd_custom_block:delete, cms_block:read, cms_section:read, cms_page:read | viewer |
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:
- Die
ssdCustomBlock-Erweiterung liest, dieCustomBlockRegistrationSubscriberbeim Laden der Seite anhängt. - Drei CSS-Grid-Container erstellt — Desktop, Tablet und Mobile — jeder mit
grid-column- undgrid-row-Inline-Styles aus den Bereichsdefinitionen. - 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:
CustomBlockCmsSubscriberhört aufGenericPageLoadedEventund hängt aktive Blöcke alsssdCustomBlocks-Erweiterung an die Seite an.CustomBlockRegistrationSubscriberhört aufCmsPageLoadedEventund hängt die passendegridConfigundslotsalsssdCustomBlock-Erweiterung an jedenssd-custom-*-Block auf der Seite an.- Auf der Admin-Seite überschreibt
ssd-cms-block-registry.jssw-cms-sidebarund ruftcmsService.registerCmsBlock()für jeden aktiven Block auf, der von der API abgerufen wird, um ihn im Block-Picker verfügbar zu machen.
