Shopware Plugin 101 | Snippets installieren/deinstallieren

Sobald in in eurem Plugin variabel sein möchtet, kommt Ihr um Snippets nicht herum. Mit Snippets könnt Ihr entweder eure Subshops oder Sprachshops entsprechend an Kunden oder Backendnutzer ausliefern.  Wie das in der Plugin Entwicklung geht zeige ich euch hier an ein paar Beispielen.

Snippets / Textbausteine

Die einen kennen Sie unter Textbausteine oder auch Snippets – genutzt werden Sie Hauptsächlich für die Übersetzung oder Ansprache der Kunden im Shop Frontend (aber auch im Backend).

Speicherung

Ich möchte kurz noch auf die Struktur der Snippets eingehen. Diese werden in der Shopware Datenbank gespeichert (s_core_snippets) – besonders dirty ist für uns interessant bzw. ist vielen nicht klar.

Datenbankauszug

 

namespace

Beschreibt den Ort an dem der Textbaustein initialisiert wurde oder aufgerufen wird.

shopID

Gibt die shopID an

localID

Gibt die Sprache an

name

Der Name des Snippets

value

Der Wert des Snippets (was angezeigt wird)

created

Wann das Snippet erstellt wurde.

updated

Wann das Snippet verändert wurde

dirty

Ob das Snippet im Backend bearbeitet wurde (wird somit nicht durch ein Update o.Ä. überschrieben)

 

Anlegen von Snippets

Shopware handelt Snippets von selbst, diese müssen eigentlich nicht extra angelegt werden (siehe hier) – ich möchte diesen Schritt dennoch zeigen, da er in manchen Fällen notwendig ist.

Angenommen Ihr programmiert ein Plugin, welches einen Textbaustein im Backend hat, welcher nicht direkt aufgerufen wird, wird dieser auch nicht angelegt und eure Ansicht bleibt leer. Ein gutes Beispiel dafür ist das Captcha und dessen Anzeige im Dropdown (snippets/backend/captcha) Shopware setzt dieses Snippet bei der Installation z.B. mit:

INSERT INTO s_core_snippets (namespace, shopID, localeID, name, value, created, updated, dirty) VALUES ('backend/captcha/display_names', 1, @locale_en_GB, 'honeypot', 'Honeypot (Invisible)', '2018-01-17 13:47:41', '2018-01-17 13:47:41', 0) ON DUPLICATE KEY UPDATE updated=IF(dirty = 1, updated, '2018-01-17 13:47:41'), value=IF(dirty = 1, value, 'Honeypot (Invisible)'), dirty=IF(value = 'Honeypot (Invisible)', 0, 1);

möchten wir nun eine vernünftige Anzeige erstellen wir eine .ini File im obigen Ordner -> snippets/backend/captcha/display_names.ini

[en_GB]
recaptcha-invisible = "reCAPTCHA (invisible)"


[de_DE]
recaptcha-invisible = "reCAPTCHA (unsichtbar)"

diese .ini File binden wir nun in unseren Installationprozess ein:

public function install(InstallContext $context)
	{
		$this->container->get('snippets')->addConfigDir( $this->getPath() . '/Resources/snippets/' );

	}

Wir binden dabei ähnlich wie das template einfach snippets ein und nutzen statt addTemplateDir einfach addConfigDir .

Nun wird beim installieren des Plugins unser Textbaustein/Snippet recaptcha-invisible angelegt und zwar unter dem Namespace backend/captcha/display_names

Ziemlich nett gelöst *thumbs up*

Löschen von Snippets

Leider habe ich keine Methode gefunden welche man ähnlich beim Deinstallieren des Plugins nutzen könnte, daher habe ich mich einfach am CLI Befehl bedient (sw:snippets:remove), welcher über den Ordner Snippets entfernt

public function uninstall(UninstallContext $context)
	{
		$folder = $this->container->getParameter('kernel.root_dir') . '/' . $this->getPath() . '/Resources/snippets/' ;

		$databaseLoader = $this->container->get('shopware.snippet_database_handler');
		$databaseLoader->removeFromDatabase($folder);

	}

 

Auf mehr möchte ich in diesem Artikel auch nicht eingehen – sollte noch Bedarf bestehen, kann ich den Artikel noch erweitern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert