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-class in der composer.json und 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.