eigener Controller wird nicht aufgerufen

Hallo, ich habe das Problem, dass ich einen eigenen Controller verwenden muss. Jetzt habe ich mich hier im Forum umgeschaut und habe einige ‘Lösungen’ gefunden, die jedoch nicht funktionieren. Der Controller den ich machen möchte soll zwar andere Dinge können wie die der Beispiel-Controller, aber ich kriege nicht einmal die Beispiele - die ja anscheinend funktionieren - zum laufen. Mittlerweile glaube ich da liegt ein Problem seitens Shopware vor, da wirklich kein einziger Ansatz funktionierte und ich mit meinem Latein am Ende bin. Ich habe mittlerweile sogar eine komplett frische Shopware 4.2.1 installation gemacht, aber auch hier läuft keines der Beispiel-Plugins. Wenn folgendes Beispiel laufen würde wäre ich ja schon zufrieden: Es soll im Account-Bereich in das rechte Menü (mit dem Logout/Abmelden-Button ganz unten) direkt unter dem Merkzettel-Link einen weiteren Link einfügen und bei einem klick auf eine weitere Seite leiten. Der folgende Code wird ganz exakt so von mir verwendet: Bootstrap.php: <?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"); } } extend.tpl: [code] {block name=“frontend_account_content_right_notes” append}

  • [{se name=“myControllerName”}LINK_ZUM_CONTROLLER{/se}]({url controller=‘NewController’})
    {/block}[/code] myController.tpl: [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] NewController.php: <?php class Shopware_Controllers_Frontend_NewController extends Enlight_Controller_Action { public function init(){ $this->View()-\>addTemplateDir(dirname(\_\_FILE\_\_)); } public function indexAction(){ $this-\>View()-\>extendsTemplate("myController.tpl"); } } Alle Dateien liegen in einem Ordner mit dem Namen ‘NewController’ welcher in einem ‘Frontend’ Ordner liegt. Letzter wird dan gezippt und mittels Plugin-Manager installiert. Ich habe wirklich keine Ahnung, warum der Code nicht funktioniert und bin wirklich mehr als Dankbar für jeden Hinweis! Vielen Dank schon mal im Voraus

Hi, deine Schreibweise sieht etwas altertümlich aus. Schau mal unter wiki.shopware.de/Shopware-4-Grundlagen-der-Plugin-Entwicklung_detail_971.html .Verzichte auf CamelCase!

1 Like

Solange du dich nicht an Namenskonventionen, Ordnerstrukturen oder intern genutzte Shopware Funktionalitäten hältst - kann alles mögliche passieren. Innerhalb eines Frameworks sollte man dessen Richtlinien beachten. Ohne deinen code genauer untersucht und getestet zu haben: genau da würde ich ansetzen. Viele Grüße

1 Like

Vielen Dank für die informativen Antworten! Ich hatte zwischendurch naürlich auch Versionen mit Pfad-angaben. Ich habe die Pluginstruktur nun verändert und die Pfadangaben im Code angepasst. Irgendwie will der Controller aber immer noch nicht seine indexAction ausführen. Die Datei extend.tpl wird jedoch schon einmal eingebunden! Ich komme mal wieder nicht weiter und würde mich über erneute Hilfe sehr(!) freuen. Pluginstruktur sieht im Moment so aus: NewController/Views/frontend/account/myController.tpl NewController/Views/frontend/account/extend.tpl NewController/Bootstrap.php NewController/Controllers/Frontend/NewController.php Inhalt Bootstrap.php: <?php class Shopware_Plugins_Frontend_NewController_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function getCapabilities() { return array( 'install' => true, 'update' =\> true, 'enable' =\> true ); } public function getLabel() { return 'Neuer Link Controller'; } public function getVersion() { return '1.0.0'; } public function getInfo() { return array( 'version' =\> $this-\>getVersion(), 'label' =\> $this-\>getLabel(), 'supplier' =\> 'supplier', 'description' =\> 'neuer link im account-Bereich rechte Seite Menue', 'support' =\> 'kein Support', 'link' =\> 'http://www.example.com' ); } 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 $this-\>Path() . "Controllers/Frontend/NewController.php"; //return dirname(\_\_FILE\_\_).'/NewController.php'; } public static function onPostDispatchAccount(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $request = $controller-\>Request(); $response = $controller-\>Response(); $view = $controller-\>View(); //Check if there is a template and if an exception has occured if(!$request-\>isDispatched()||$response-\>isException()||!$view-\>hasTemplate()) { return; } //load extension $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate("frontend/account/extend.tpl"); } } Inhalt NewController.php <?php class Shopware_Controllers_Frontend_NewController extends Enlight_Controller_Action { public function init(){ $this-View()->addTemplateDir()$this-\>Path() . "../../Views/"; //$this-\>View()-\>addTemplateDir(dirname(\_\_FILE\_\_)); } public function indexAction(){ $this-\>View\_\>extendsTemplate("frontend/account/myController.tpl"); //$this-\>View()-\>extendsTemplate("myController.tpl"); } } Inhalt extend.tpl [code]{block name=“frontend_account_content_right_notes” append}

  • [{se name=“myControllerName”}LINK_ZUM_CONTROLLER{/se}]({url controller=‘NewController’})
    {/block}[/code] Inhalt myController.tpl [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] Nochmal vielen Dank für die Hilfe bis hierhin und ich hoffe ich bekomme nochmal die richtigen Hinweise was ich gerade falsch mache. Ich weiß wirklich nicht mehr weiter…

Zip das Plugin doch mal und lad es irgendwo hoch - dann schau ich mir das gerne mal genauer an. Viele Grüße

Vielen Dank für das Angebot! http://d.pr/f/uNom

Ich sag mal wie ich es mach: Bootstrap.php Eventlistener in der install function: public function install(){ $this-\>subscribeEvent( "Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Mycontroller", "onGetFrontendController" ); return true; } Bootstrap.php Pfade: public function onGetFrontendController(Enlight\_Event\_EventArgs $arguments){ $this-\>Application()-\>Template()-\>addTemplateDir( $this-\>Path() . "Views/" ); return this-\>Path() . "Controllers/Frontend/Mycontroller.php" } Mycontroller.php habe ich keine init function und auch keine spezielle Templateextentions, sondern nur „Datenbankabfragen“ und Variablenzuweisung public function indexAction(){ $this-\>View()-\>meineVariable = "jojojo"; } in Views/frontend/meinding/index.tpl dann {$meineVariable}