# Controller Action überschreiben/erweitern

**URL:** <https://forum.shopware.com/t/controller-action-uberschreiben-erweitern/33794>\
**Category:** Programmierung\
**Created:** [21. Januar 2016 um 13:56 UTC](https://forum.shopware.com/t/controller-action-uberschreiben-erweitern/33794 "2016-01-21T13:56:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Urst](https://avatars.discourse-cdn.com/v4/letter/u/3da27b/32.png) [@Urst](https://forum.shopware.com/u/Urst)\
**Post date:** [21. Januar 2016 um 13:56 UTC](https://forum.shopware.com/t/controller-action-uberschreiben-erweitern/33794/1 "2016-01-21T13:56:16Z")

</div>

Hallo, ich möchte die IndexAction des Shopware\_Controllers\_Frontend\_Listing Controllers überschreiben/erweitern. Ich hab das Forum durchsucht, aber leider nichts wirklich passendes gefunden. Daher habe ich ein Plugin geschrieben mit folgenden Dateien: Bootstrap [code] \<?php class Shopware\_Plugins\_Frontend\_BehindyouCategorylisting\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap  
{  
public function getVersion(){  
return ‘0.1’;  
}

```
public function getLabel(){
    return 'Unterkategiorielisting in Kategorien';
}

public function install()
{
    $this->subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing', 'onPostDispatchListing' ); $this-\>subscribeEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_BehindyouCategoryListing', 'onGetControllerPath' ); return true; } public function onPostDispatchListing(Enlight\_Event\_EventArgs $args){ $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); if(!$request-\>isDispatched()||$response-\>isException()) { return; } return $this-\>onGetControllerPath(); } public function onGetControllerPath(Enlight\_Event\_EventArgs $args){ return $this-\>Path().'Controllers/Categorylisting.php'; } }[/code] Categorylisting.php [code]<?php class Shopware_Controllers_Frontend_Categorylisting extends Enlight_Controller_Action

```

{  
public function init()  
{  
$this-\>View()-\>addTemplateDir(dirname(\_\_FILE\_\_) . “/…/Views/”); } /\*\* \* Index action method \* Wir überschreiben die IndexAction des Lsiting Controllers um hier \* Kinder der Jeweiligen Kategorie dem Template übergeben und dort ausgeben zu können \*/ public function indexAction(){ \* Anpassungen der Shopware\_Controllers\_Frontend\_Listing IndexAction() \* die(‘Test’); } } }[/code] Meine Ordnerstruktur gliedert sich wie folgt: `Frontend BehindyouCategoryListing Controllers Categorylisting.php Bootstrap.php` Wenn ich nun aber ein Artikellisting aufrufe, so werden meine Änderungen nicht übernommen (ich will Variablen dem Template zuweisen, diese sind aber NULL) Die Installmethode in der Bootstrap läuft soweit ganz gut - würde ich den Code direkt darein schreiben, würde es sicher auch gehen, ich möchte ihn aber lieber in eine extra Controller-Datei auslagern. Geht es eventuell auch über Hooks? Aber auch das bekomme ich irgendwie nicht gebacken. Ich hoffe, ihr könnt mir einen Tipp geben, wieso es nicht geht. Dannke

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [21. Januar 2016 um 20:38 UTC](https://forum.shopware.com/t/controller-action-uberschreiben-erweitern/33794/2 "2016-01-21T20:38:18Z")

</div>

Hi, grundsätzlich geht es über Hooks (KLASSENNAME::METHODENNAME::REPLACE) oder das Event Enlight\_Controller\_Action\_Frontend\_Listing\_Index. Beides ist in Sachen Interoperabilität mit anderen Plugins potenziell problematisch - aber so lassen sich prinzipiell Methoden ersetzen. Besten Gruß, Daniel
