Plugin-Struktur
Aufbau eines Plugins
Jedes Shopware-6-Plugin folgt derselben Grundstruktur. Wer sie einmal verstanden hat, findet sich in jedem Plugin sofort zurecht.
Das Verzeichnislayout
SwagExample/
├── composer.json
└── src/
├── SwagExample.php (Basisklasse)
├── Resources/
│ ├── config/
│ │ ├── services.xml (Dependency Injection)
│ │ └── config.xml (Plugin-Einstellungen)
│ └── views/storefront/ (Twig-Templates)
└── Migration/ (DB-Migrationen)
Die composer.json
Sie macht das Verzeichnis überhaupt erst zu einem Shopware-Plugin. Entscheidend sind der Typ und die Angabe der Basisklasse:
{
"name": "swag/example",
"type": "shopware-platform-plugin",
"require": {
"shopware/core": "6.6.*"
},
"autoload": {
"psr-4": { "Swag\\Example\\": "src/" }
},
"extra": {
"shopware-plugin-class": "Swag\\Example\\SwagExample"
}
}
Die Basisklasse
Sie ist der Einstiegspunkt und erbt von der Shopware-Plugin-Basisklasse. Oft bleibt sie zunächst leer – die eigentliche Arbeit passiert in Services, Subscribern und Templates.
<?php declare(strict_types=1);
namespace Swag\Example;
use Shopware\Core\Framework\Plugin;
class SwagExample extends Plugin
{
}
Merke: Der Wert bei
shopware-plugin-classin dercomposer.jsonund der voll qualifizierte Klassenname der Basisklasse müssen exakt übereinstimmen – ein häufiger Stolperstein beim ersten Plugin.
Damit ist das Skelett komplett. Als Nächstes geht es darum, das Plugin zu installieren und zu aktivieren.