Plugin: Bei Installation Datei anlegen

Hallo, ich habe mein erstes eigenes Plugin geschrieben. Das funktioniert soweit auch problemlos (*yay*). Aber auf eine Funktionalität muss ich soweit verzichten, da ich nicht weiß, wie sie umgesetzt werden kann. Ich möchte, dass bei der Installation des Plugins eine Datei kpoiert und in den template Ordner abgelegt wird. Diese Datei soll beim Deinstallieren des Plugins natürlich auch wieder entfernt werden. Den PHP Code dafür hab ich schon und der funktioniert. Die Frage ist nur, wo packe ich den hin? Denn wie ich heraus gefunden habe, wird mein copy, wenn ich es über die public function install() aufrufe, nicht ausgeführt. Gleiches gilt für mein unlink in der public function uninstall(). Außerdem hab ich es über einen Konstruktur versucht, leider auch ohne Erfolg. nur wenn ich ein Event registriere, kann ich beie Funktionen ausführen. Das hat aber den Nachteil, dass es jedes Mal neu ausgeführt wird, wenn das Event anspringt und das brauchts natürlich nicht. Kann mir hier jemand bitte weiter helfen?

Also ich sehe hier eher einen großen Bock im Design. Ein Plugin hat nichts im template Ordner zu suchen. Hier schaffst du dir zu große Abhängigkeiten - abgesehen davon, dass kein Mensch will, dass ein Plugin dort rumfummelt. Wieso willst du das überhaupt machen? Viele Grüße

Mein Plugin ist auch nicht im templates Ordner. Ich möchte lediglich, dass mein Plugin bei der Installation dort eine Datei hin kopiert. Die Idee ist recht simpel: Mein Plugin benötigt eine Template Überlagerung. Diese Template Datei muss aber im entsprechenden plugin Ordner unter templates liegen, wegen der Vererbungshierarchie von Shopware. Ich möchte aber nicht, dass der Nutzer meines Plugins nach der Installation noch manuell diese Überlagerung dort hinschieben braucht. Deswegen soll das Plugin dies bei Installation übernehmen.

[quote=“Laura Lieblich”]Mein Plugin ist auch nicht im templates Ordner. Ich möchte lediglich, dass mein Plugin bei der Installation dort eine Datei hin kopiert.[/quote] Das war mir bewusst. Weiterhin gilt jedoch: Also ich sehe hier eher einen großen Bock im Design. Ein Plugin hat nichts im template Ordner zu suchen. Hier schaffst du dir zu große Abhängigkeiten - abgesehen davon, dass kein Mensch will, dass ein Plugin dort rumfummelt. [quote=“Laura Lieblich”]Diese Template Datei muss aber im entsprechenden plugin Ordner unter templates liegen, wegen der Vererbungshierarchie von Shopware.[/quote] Warum muss dafür die Datei im template Ordner liegen? Die Template Hierarchie sieht folgendermaßen aus: _default -> _emotion -> _local -> plugins Du kannst innerhalb deines Plugins -jede- Datei im template Ordner überschreiben. Du kannst sogar andere Plugin Templates überschreiben, indem du deine Priorität der subscribeEvent() Methode mitteilst. Sag doch mal genauer, um welche Datei es sich handelt. Viele Grüße

Nehmen wir als Beispiel einfach das Plugin „AdvancedMenu“. Hier liegt uns ja der Code vor und wir wissen, wovon geredet wird :slight_smile: In der Bootstrap.php wird in der onPostDispatch ein Template erweitert über: $view->extendsTemplate(‚frontend/plugins/advanced_menu/index.tpl‘); Diese Template ist nicht im Plugin Ordner selbst zu finden, sondern im templates Ordner im genutzten Style, nehmen wir _emotion, unter frontend/plugins/advanced_menu/index.tpl Der Grund dafür, liegt in der Vererbungshierarchie von Shopware http://wiki.shopware.de/Templatedokumen … #Ausnahmen Mein Plugin sieht ähnlich aus. Nun habe ich mich gefragt, wie ich es erreiche, dass bei Installation des Plugins, mein Template ebenfalls im entsprechenden Style vorliegt. Und nach Deinstallation wieder gelöscht wird. Das wollte ich eben über ein copy in der install und ein unlink in der uninstall erreichen, was aber nicht funktioniert. Womit wir wieder bei meinem ursprünglichen Problem wären. Das ist mein Gedankengang, vielleicht ist ja hier schon ein Haken zu finden ^^ Wie gesagt, ist mein erstes Plugin und bin daher für sinnvolle Tipp/Vorschläge/Einwände durchaus dankbar

Aquatuning hat da vollkommen Recht, Du kannst doch jedes Template im Plugin selbst erweitern/überlagern. Deswegen gehört dein Plugin spezifisches Template natürlich auch in den Plugin-Ordner und nicht in den Standard Template-Ordner. Das AdvanvedMenu liegt nur dort, weil das zum Standard Shopware Umfang gehört. Deswegen greift das Menü auf diesen Ort zu. Da dein Plugin nicht zum Shop-Standard gehört gehört auch deine Template Datei in dein Plugin-Verzeichnis. Ich empfehle Dir mal die Wikis durchzuarbeiten, dort gibt es einige Beispiele die genau das beschreiben. Und auchw enn dein Template in Deinem Plugin-Ordner liegt wird sehrwohl die Template-Hierarchie von Shopware abgebildet. Wie gesagt - arbeite dich einmal durch das Wiki, es gibt Beispiel-Plugins die auch mit eigenen Templates arbeiten! Schöne Grüße, Niklas

Erstmal danke für die Antworten. Aber ich kenne das Wiki durchaus und habe auch schon einiges dort durchgearbeitet. Aus genau diesem Grund bin ich auch hierauf gestoßen: http://wiki.shopware.de/Templatedokumen … #Ausnahmen Ich weiß, dass das Template eigentlich in meinen Plugin Ordner gehört. Habe es dort auch zuerst mit selben Namen und selber Ordnerstruktur (der Übersichtlichkeit wegen) abgelegt. Die Änderungen wurden aber nicht angenommen. Ich möchte einen ganzen Block überlagern und diese Überlagerung wird nicht angenommen. Deswegen bin ich auf den obigen Wiki Eintrag gestoßen. Vielleicht hab ich an dieser Stelle das Wiki auch falsch verstanden? Ich lasse mich gerne eines besseren belehren. Aber so wie ich es verstanden habe, muss diese Überlagerung ins Template selbst. “Tipp: Sie haben die Möglichkeit, dieses Verhalten zu umgehen, indem Sie die Templatedatei des Plugins in Ihrem abgeleiteten Template ersetzen. Hierzu dient der Ordner “plugins”, wo Sie alle abgeleiteten Plugin-Templates ablegen können.”

Das ist ein sehr schöner Link, den kenne ich auch bereits. Und hier findet ein append statt. Der Block wird NICHT komplett überschrieben. Ich denke aber dennoch, dass ich das Problem sehe. Die Ordnerstruktur muss im Plugin eingehalten werden, hier gehört der plugins Ordner hin. Das war schon mein ganzes Problem :slight_smile: Manchmal könnte es so simpel sein :wink:

http://wiki.shopware.de/files/downloads/shopwaretemplatecheetsheet-10142820.pdf Dann machst Du eben replace statt append , im Cheatsheet und Block System.