Controller erweitern

Hi, was wäre der beste weg einen Controller zu erweitern z.B neue Actions Hinzufügen?/Überschreiben denn im Controller selber wäre es doch nicht mehr Update-Sicher oder? ist es klug für die Actions einen eigenen Controller zu basteln? dabei habe ich allerdings das Problem das Die Textblöcke im Template dann nicht den richtigen namespace haben und ich diesen bei jedem angeben muss. gruß Moz

Den Namespace kannst du so benutzen: Beispiel {s name=‘IndexInfoArticles’ namespace=“frontend/index/checkout_actions”}{/s} Du mußt also nur den namespace noch dahinter schreiben, die kannst du dir ja im backend raussuchen. Grüße Frank

Dazu müsste man wissen, was du genau vorhast… Warum neue Actions in einen bestehenden Controller? Also ggf. das Vorhaben etwas genauer erklären…

[quote=“Stefan Hamann”]Dazu müsste man wissen, was du genau vorhast… Warum neue Actions in einen bestehenden Controller? Also ggf. das Vorhaben etwas genauer erklären…[/quote] Ich möchte z.B. eine neue Unterseite bei Mein Konto anlegen also den Account Controller erweitern.

Hi zusammen, ich habe das gleiche Vorhaben und hab das gestern als Viewport integriert bis ich gelesen habe das die ab Version 4 nicht mehr unterstützt werden und jetzt überlege ich das ganze als Controller zu integrieren. Bei mir geht es um die Entwicklung einer Unterseite von „Mein Konto“ und dort will ich eine Seite integrieren, die ähnlich funktioniert wie Tellafriend. Tellafriend gibt es aus der Historie einmal als Viewport und einmal als Controller. Wie gehe ich am besten vor ? Wie wird der Controller aktiviert und wo muss er eingebunden werden ? Leider ist die Doku hier sehr dünn oder ich habe noch nicht die richtige Doku gefunden. Danke im Voraus, viele Grüsse Jörg

Hier mal ein Plugin-Beispiel - das fügt einen neuen Menüpunkt rechts in der Account-Übersicht hinzu. Verknüpft diesen Menüpunkt mit einem neuen Controller und beeinhaltet auhc eine Template-Vorlage für diesen Controller. Einfach unter engine/Shopware/Plugins/Community/Frontend/NewController speichern und im Backend aktvieren. Code Bootstrap.php [*] Event-Listener für den neuen Controller anlegen [*] Event-Listener für den Account-Controller anlegen & Account-Menü rechts erweitern <?php class Shopware_Plugins_Frontend_NewController_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Account', 'onPostDispatchAccount' ); $this-\>subscribeEvent($event); $event = $this-\>createEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_NewController', 'onGetControllerPath' ); $this-\>subscribeEvent($event); } public static function onGetControllerPath(Enlight\_Event\_EventArgs $args) { return dirname(\_\_FILE\_\_).'/NewController.php'; } public static function onPostDispatchAccount(Enlight\_Event\_EventArgs $args) { if(!$request-\>isDispatched()||$response-\>isException()) { return; } $view = $args-\>getSubject()-\>View(); $view-\>extendsTemplate(dirname(\_\_FILE\_\_)."/extend.tpl"); } } Code extend.tpl [*] Das ist das Snippet welches den Menüpunkt im Account hinzufügt [code] {block name=„frontend_account_content_right_end“ append}

  • [{se name=„myControllerName“}LINK_ZUM_CONTROLLER{/se}]({url controller=‚NewController‘})
    {/block} [/code] Code myController.tpl [*] Das ist das Controller-Template [code] {extends file=‚frontend/account/index.tpl‘} {* Breadcrumb *} {block name=‚frontend_index_start‘ append} {$sBreadcrumb = [‚name‘=>"{s name=‚myBreadcrum‘}Mein Controller{/s}", ‚link‘=>{url}]} {/block} {* Main content *} {block name=‚frontend_index_content‘}

Content

{/block} [/code] Code NewController.php [*] Das ist der neue Front-Controller <?php class Shopware_Controllers_Frontend_NewController extends Enlight_Controller_Action { public function init(){ $this->View()-\>addTemplateDir(dirname(\_\_FILE\_\_)); } public function indexAction(){ $this-\>View()-\>loadTemplate("myController.tpl"); } }

1 Like

Hi, danke dir für das ausführliche Beispiel. Was du leider nicht geschrieben hast - ist wie ein Controller ins System integriert wird. Zum Beispiel liegt ja bei Tellafriend nur die Tellafriend.php im Controllers Verzeichnis und das System zieht diesen beim Aufruf über /shopware.php/sVieport,Tellafriend direkt mir an !!! Das wir mir nämlich nicht klar und habe auch nirgendwo eine Erklärung gefunden. Ich hab aber noch ein Problem mit dem MEINEM neuen Controller: Ich habe in dem Bootstrap von ControllerBase eine Variable auf $view schreiben lassen: $view->sJipoUserData = Shopware()->Modules()->Admin()->sGetUserData(); Die Variable / das Array $sJipoUserData kann ich super in dem zu meinem Controller gehörenden Template (.TPL) benutzen, aber leider kann ich irgendwie nicht auf die Daten innerhalb meines Controller zugreifen. Hast jemand eine Idee ??? Viele Grüsse Joerg

Das macht das System automatisch - wenn also unter engine/Shopware/Controllers/Frontend eine .php Datei existiert, die den gleichen Namen wie den Parameter in der URL hat - so wird diese automatisch durch den Dispatcher eingebunden. Der von mir beschrieben weg, fügt den Controller ja über ein Plugin hinzu - theoretisch kannst du den aber auch einfach in das bestehende Controller-Verzeichnis packen. Registrieren musst du den dann nirgendwo!

Danke ! Hast du noch eine Antwort für mich auf zu dem Thema mit den Variablen auf die ich nicht zugreifen kann ??? Ich hab aber noch ein Problem mit dem MEINEM neuen Controller: Ich habe in dem Bootstrap von ControllerBase eine Variable auf $view schreiben lassen: $view->sJipoUserData = Shopware()->Modules()->Admin()->sGetUserData(); Die Variable / das Array $sJipoUserData kann ich super in dem zu meinem Controller gehörenden Template (.TPL) benutzen, aber leider kann ich irgendwie nicht auf die Daten innerhalb meines Controller zugreifen. Hast jemand eine Idee ???

Kannst du da mal deinen Code komplett posten? Mir ist noch nicht klar, was du erreichen möchtest…

Hi, das ist zu viel - kann ich dir das mailen ? und wenn ja an welche Adresse ? Mfg

Schick mir das mal an forum@shopware.de - aber mit reinschreiben, was genau nicht geht und wie du was realisiert haben möchtest :wink:

Hi, Die gleiche Frage zu Shopware 4: sitze vor ähnlichem Problem gerade, allerdings möchte ich wirklich den Controller ergänzen und nicht einen neuen schreiben, da die indexAction auf eine neue Action verschoben wird, da eine neue indexAction erstellt wird, mit neuer Ansicht etc. Ich möchte dass index einfach nochmal das ganze User Konto Menü zusammenfasst und der Bereich Meine Daten dann über dataAction aufgerufen wird. Beste Grüße, Edin