Shopware Plugin 101 | Unser erster eigener Controller

In vielen Fällen brauch man bei der Pluginentwicklung einen Controller, welcher die entsprechenden Models „organisiert“ – hier zeige ich euch in einem einfachen Beispiel wie das ab SW 5.2 geht…

URL Aufbau

Bei den meisten MVC Frameworks ist der Aufbau gleich TLD/controller/action ein Beispiel dafür in CakePHP ist zum Beispiel.

http://www.meinshop.de/users/index – welches alle meine User auflisten würde.

In Shopware steht vor dem controller und der action noch das module.

Zum Beispiel http://www.meinshop.de/frontend/index/index

Module

Es gibt aktuell 4 Module:

  • Frontend
  • Backend
  • Widgets
  • API

Bis auf Widgets ist eigentlich alles selbsterklärend. Widgets sind wiederverwendbar und sind durch ESI Tags auch unabhängig „cachebar“ (ESI Tags)

Auf Controller und Action gehe ich ebenfalls nicht ein, dazu schaut euch am besten mal das MVC Konzept im ganzen an.

Controller

Um jetzt einen Controller anzulegen erstellen wir in unserem Plugin einen Ordner Controllers in dem wir den/die jeweils nötigen Modulordner anlegen – in unserem Fall Frontend.

Wir können hier noch kein Text ausgeben, z.B. durch ein echo oder var_dump. Das liegt am fehlenden View – wie in jedem MVC Framework brauch der Controller einen View wenn man Ihn im Frontend aufrufen möchte. Also packen wir’s

Funktioniert nicht? Ja, das ist mir erst auch passiert – wenn du noch der Shopware Doku gehst ist dir das sicher auch passiert.

Template View

Wir müssen für eine richtige Verlinkung von Controller und Template dieses in der serivce.xml registieren:

danach fügen wir in den Ordner Subscriber noch eine TemplateRegistration.php ein

Jetzt sollte es klappen 😉

Das ganze sollte dann ungefähr so aussehen:

5 Antworten auf „Shopware Plugin 101 | Unser erster eigener Controller“

  1. Hallo,

    ich habe ein Verstädnisproblem. Ich habe meinen service für SW 5.5.1 entsprechend erweitert. Das scheint zu funktionieren.

    %gwen_move_menubar.plugin_dir%

    entsprechend habe ich den Controller Video.php angelegt.

    class Shopware_Controllers_Frontend_Video extends Enlight_Controller_Action {
    public function indexAction() {
    exit(‚Videos will be here soon!‘);
    }
    }

    und wie beschrieben, den Subscriber und das Template.

    Als Ausgabe bekomme ich unter 127.0.1.1:8080/video

    den Exit Aufruf „Videos will be here soon!“

    Ich möchte aber das Video sehen.
    Entsprechend habe ich in der ActionIndex() den Exit Call durch $this->View()->loadTemplate(„frontend/video/index.tpl“);

    ersetzt. Aber das ist schon vom Gefühl irgendwie falsch,
    da die View in im Subscriber TemplateRegistration.php ausgeführt wird. Was auch zu entsprechender Fehlermeldung im Frontend führt, wenn die Exit() Funktion ersetzt wird:

    Fatal error: Uncaught SmartyException: Unable to load template snippet ‚frontend/video/index.tpl|frontend/plugins/seo/index.tpl‘ in /shopware-5.5.1-0

    Was muss ich in die IndexAction eintragen, damit ein Video angezeigt wird?

    Vielen Dank.

Schreibe einen Kommentar

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