Plugin Programmierung - Template einbinden

Hallo Leute,

ich beschäftige mich seit kurzem mit der Plugin-Programmierung für Shopware (erstmal nur mit dem Legacy-System) und habe noch ein paar Startschwierigkeiten.
An sich will ich fürs Erste nur einen vorhanden Template-Block erweitern.

Ich habe in meiner Bootstrap.php den folgenden Code:

public function install()
{
    //(...)

    $this->subscribeEvent('Shopware_Modules_Basket_AddArticle_Start', 'onShopwareModulesBasketAddArticleStart');

    //(...)
}

//wenn ein artikel zum warenkorb hinzugefuegt wird
public function onShopwareModulesBasketAddArticleStart(Enlight_Event_EventArgs $args){
    //verzeichnis fuer templates hinzufuegen
    $this->Application()->Template()->addTemplateDir($this->Path() . 'templates/');

    //funktioniert nicht, weil View() nicht vorhanden ist?!
    //$args->getSubject()->View()->addTemplateDir($this->Path() . 'templates/');
}

 

Dazu habe ich ein Template unter “MeinPluginName/templates/ajax_cart.tpl”:

{extends file="parent:frontend/checkout/ajax_cart.tpl"}

{block name="frontend_checkout_ajax_cart_button_container_inner" append}
	foobar
{/block}

Wenn ich nun einen Artikel in den Warenkorb lege, würde ich erwarten, dass dort der entsprechende Block um den Text “foobar” erweitert wird, was aber nicht der Fall ist. Das Template von mir wird nicht berücksichtigt.
Was läuft also schief? Ich schätze mal, dass ich den Template-Ordner nicht richtig eingebunden habe. Ich bin auch etwas verwirrt, dass es mehrere Wege gibt, um addTemplateDir() aufzurufen. Kann hier jemand einem Anfänger helfen :)? Danke für Eure Hilfe schonmal!

PS: Gibt es ein Event, dass jedesmal feuert, wenn der Warenkorb angesehen wird und nicht nur beim Artikel-Hinzufügen?

Hi und willkommen in der Shopware Community!

als erstes solltest du dir die Developer Doku anschauen: Developer Guides

Für Template Erweiterungen solltest du immer Events nutzen die wie folgt zusammen gesetzt sind.
Enlight_Controller_Action_PostDispatch\ MODULE-NAME_ CONTROLLER-NAME_

Infos dazu findest du hier: Shopware events

In deinem Fall wäre das also Enlight_Controller_Action_PostDispatch_Frontend_Checkout. Das ist der Controller der für den Warenkorb Prozess zuständig ist. 

Das Event, dass du nutzt, wird nur gefeuert, wenn ein Artikel hinzugefügt wird. Diese Art von Events (Application Events) eignen sich in der Regel nicht für Template Erweiterungen. 

Grundsätzlich sieht das aber erst mal ok aus. Wichtig ist, dass die tpl-Datei in der gleichen Ordnerstrukur liegt, wie die Original Datei, die du überschreiben möchtest. Heißt also in deinem Falle plugin-directory/templates/frontend/checkout/ajax_cart.tpl

Desweiteren solltest du in Smarty auf die Benutzung von append und prepend verzichten. Siehe Getting started with Shopware templating

Ich hoffe, das hilft dir erstmal weiter. Viel Spaß bei der Programmierung deines ersten Plugins  Wink

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“