Shopware Artikel Zusatzfelder erweitern

Heute mal eine kurze Anleitung zum Erstellen von eigenen Artikel Zusatzfeldern im Shopware Backend aus einem Plugin heraus. Wie das bei Plugins so üblich ist, starten wir in der Bootstrap.

Shopware/Plugins/Local/Backend/UnserPlugin/Bootstrap.php

Wir erstellen die install() Funktion und rufen unsere Funktion _createAttributes() auf. Diese ist ebenfalls in der Bootstrap.php untergebracht und sieht wie folgt aus:

Was passiert also in unserer Funktion?

Mit  $this->Application()->Models()->addAttribute('s_articles_attributes', 'shorties', 'cool_bool', 'TINYINT(1)', false, 0); fügen wir über eine Funktion des Models ein neues Attribut hinzu. Die Parameter der Funktion stehen für:

  • s_articles_attributes: Tabelle die das neue Attribut (die neue Spalte) bekommen soll
  • shorties: Prefix des Spaltennames
  • cool_bool: Spaltenname
  • TINYINT(1): Typ
  • false: Gibt an ob der Wert nullable sein soll
  • 0: Gibt den Default Wert an

Es würde also bei diesem Aufruf eine neue Spalte vom Typ TINYINT mit der Länge 1 in der Tabelle s_articles_attributes angelegt werden. Der Name dieser Spalte wäre shorties_cool_bool.

Anschließend wird via Statement dafür gesorgt, dass diese Checkbox auch in den Grundeinstellungen von Shopware auftaucht. Dabei ist auf mehrere Sachen zu achten.

  • groupID: Ist die Id, die auf die Tabelle s_core_engine_groups verweist und muss den Wert 7 haben. Dieser identifiziert das Element als Artikel Zusatzfeld.
  • position: Die Position sollte so gewählt werden, dass sichergestellt ist keinen anderen Wert zu überschreiben. Ich habe an dieser Stelle 1001 benutzt. Erschien mir cool…
  • name: Der Name sollte dem späteren Attributsnamen entsprechen (dazu später mehr). Wir lassen hier die „_“ weg.

Ich glaube es gibt auch eine Möglichkeit das SQL Statement zu umgehen und eine Shopware Funktion zu benutzen. Da ich nicht mehr weiß wie diese heißt und diese Funktion auch niemals richtig verstanden, geschweige zum Laufen, bekommen habe, verzichte ich darauf. Vielleicht weiß es ja jemand von euch und kann es hier für alle kundtun.

Anschließend werden die Artikel Attribute neu generiert.

Die ganze Sache deinstallieren

Natürlich muss auch darauf geachtet werden, die vorgenommenen Änderungen in den Deinstallationsprozess des Plugins zu integrieren.

Das Attribut wird entfernt und der Tabelleneintrag gelöscht – nichts wirklich Spannendes.

Nun müssen wir dem Artikelmodul nocht unser neues Feld mitteilen.

Wir ergänzen unsere install() Funktion also um folgenden Aufruf:

Dieser Aufruf sollte bekannt sein. Es wird ein Event registriert, welches Shopware sagt: „Beim Aufrufen der Artikelansicht, mach mal bitte loadBackendModuleArticles“. In dieser Funktion geschieht dann das:

Zuerst belegen wir uns ein paar Hilfsvariablen. Dann teilen wir noch mit welche JavaScript-Datei das bisherige Template erweitern soll. Die angesprochene Datei ist keine Zauberei. Auch wenn es, bedingt durch den megastarken Reim, noch einfacher erscheint, hier der Inhalt:

Shopware/Plugins/Local/Backend/UnserPlugin/Views/backend/
article/unser_plugin/model/attribute.js

Wie bereits weiter oben angesprochen, sehen wir hier auch den Namen des neuen Attributes. Dieser Name muss gleich dem Namen sein, den wir in die s_core_engine_elements Tabelle eingetragen haben.

That’s it! Unser Feld sollte nun die Shopware Artikel Zusatzfelder erweitern.