# Smarty wandelt URLs nicht um

**URL:** <https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720>\
**Category:** Programmierung\
**Created:** [27. Juni 2016 um 10:13 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720 "2016-06-27T10:13:47Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ellwe](https://avatars.discourse-cdn.com/v4/letter/e/e36b37/32.png) [@ellwe](https://forum.shopware.com/u/ellwe)\
**Post date:** [27. Juni 2016 um 10:13 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720/1 "2016-06-27T10:13:47Z")

</div>

Hallo,

ich habe ein Plugin mit einem neuen Controller. Der funktioniert auch super. In diesem Controller habe ich eine&nbsp;Cronjob-Methode, die mir die Urls für die Actions generiert und mit

```
Shopware()->Modules()->sRewriteTable()->sInsertUrl($org_path, $path);

```

in die Tabelle&nbsp;s\_core\_rewrite\_urls schreibt.

Da kommen sie auch in der Form&nbsp;

sViewport=meinplugincontrollername&sAction=meineaction&meinattribut=id

an.

Im Tempate werden sie leider aber nicht korrekt ausgegeben wenn ich  
&nbsp;

```
{url controller='meinplugincontrollername' action='meineaction' meinattribut=id}

```

ausführe, bekomme ich nicht die url aus der Datenbank, sondern einfach nur /meinplugincontrollername/meineaction/id

Muss ich den Controller irgendwo registrieren damit Smarty arbeiten kann?

&nbsp;

Gruß

&nbsp;

---

<div class="post-metadata">

**Author:** ![ellwe](https://avatars.discourse-cdn.com/v4/letter/e/e36b37/32.png) [@ellwe](https://forum.shopware.com/u/ellwe)\
**Post date:** [27. Juni 2016 um 20:14 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720/2 "2016-06-27T20:14:21Z")

</div>

Ok, habs hinbekommen.

Dank Max (falls du hier überhaupt unterwegs bist) und diesem Beitrag ([https://forum.shopware.com/discussion/comment/138402/#Comment\_138402](https://forum.shopware.com/discussion/comment/138402/#Comment_138402))&nbsp;habe ich es hinbekommen. Alle Routings mit Parametern müssen gesondert eingetragen werden, wie in der Klasse&nbsp;RewriteGenerator unter&nbsp;Shopware\Components\Routing\Generators.

Das passende Event registiert man so.&nbsp;

```
$this->subscribeEvent(
            'Enlight_Controller_Front_RouteStartup',
            'onRouteStartup'
        );

```

Dann weiter so. Der dritte Parameter muss (anders als im verlinkten beitrag oben) seit Version 5.2 (glaube ich, hab es nicht genau verglichen) auch dabei sein.

```
    /**
     * @param Enlight_Controller_EventArgs $args
     */
    public function onRouteStartup($args)
    {
	    
	     /** @var \Shopware\Components\Routing\Router $router */
        $router = $this->get('router');
        $generators = $router->getGenerators();
        $generators = array_map(function($generator) {
            if($generator instanceof RewriteGenerator) {
	            return new NewRewriteGenerator(
                    $this->get('dbal_connection'),
                    $this->get('query_alias_mapper'),
                    $this->get('events') // Important since SW 5.2
                );
            } else {
                return $generator;
            }
        }, $generators);
        $router->setGenerators($generators);
        
       
    }

```

Dann noch diese Klasse in den passenden Namespace

```
 $query['controller']];
        switch ($query['controller']) {
            case 'my_controller_class': // Name of the Plugin Controller Class
            	if($query['action'] == 'index') { //if you need differents params for different actions 
	            	$orgQuery['sAction'] = $query['action']; // Add params
					$orgQuery['sSupplier'] = $query['sSupplier'];
            	} elseif($query['action'] == 'getall') {
	            	$orgQuery['sAction'] = $query['action'];
					$orgQuery['wert'] = $query['wert'];
                    $orgQuery['param'] = $query['param'];
            	}
                
                return $orgQuery;
            default:
                return parent::getOrgQueryArray($query);
        }
    }
}

```

&nbsp;

und in die Bootstrap.php muss natürlich dann noch oben drüber

```
use Shopware\Components\Routing\Generators\RewriteGenerator;
use ShopwarePlugins\{MYPLUGINNAME}\FOLDERTOCLASS\NewRewriteGenerator;

```

&nbsp;

Vielleicht kann es jemand gebrauchen.

&nbsp;

Gruß

ellwe

---

<div class="post-metadata">

**Author:** ![Patrick\_Stahl](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/patrick_stahl/32/7679_2.png) [@Patrick\_Stahl](https://forum.shopware.com/u/Patrick_Stahl)\
**Post date:** [28. Juni 2016 um 06:14 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720/3 "2016-06-28T06:14:24Z")

</div>

Hallo ellwe,

ab der Shopware 5.2 wird es dafür übrigens ein passendes Filter-Event geben, damit man sich nicht länger einen eigenen Generator schreiben muss. 🙂  
[SW-15223 - Implement a new filter-event to edit the seo-queries for p… · shopware/shopware@01eb119 · GitHub](https://github.com/shopware/shopware/commit/01eb119723873ddcede902038774addb45af934d)

Das kann dann so aussehen:  
&nbsp;

```
$this->subscribeEvent(
   'Shopware_Components_RewriteGenerator_FilterQuery',
   'onFilterRewriteQuery'
);

```

sowie:  
&nbsp;

```
public function onFilterRewriteQuery(\Enlight_Event_EventArgs $args)
{
    $orgQuery = $args->getReturn();
    $query = $args->getQuery();

    if ($query['controller'] === 'mein_controller' && isset($query['mein_parameter'])) {
        $orgQuery['mein_parameter'] = $query['mein_parameter'];
        unset($orgQuery['sAction']);
    }

    return $orgQuery;
}

```

Vielleicht hilft das in der Zukunft weiter. 🙂

Gruß,  
Patrick ![Shopware](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "Shopware")

&nbsp;

---

<div class="post-metadata">

**Author:** ![ellwe](https://avatars.discourse-cdn.com/v4/letter/e/e36b37/32.png) [@ellwe](https://forum.shopware.com/u/ellwe)\
**Post date:** [28. Juni 2016 um 07:42 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720/4 "2016-06-28T07:42:32Z")

</div>

> [@Patrick Stahl schrieb:](https://forum.shopware.com/profile/1869/Patrick%20Stahl "Patrick%20Stahl")
> 
> Hallo ellwe,
> 
> ab der Shopware 5.2 wird es dafür übrigens ein passendes Filter-Event geben, damit man sich nicht länger einen eigenen Generator schreiben muss. 🙂  
> [https://github.com/shopware/shopware/commit/01eb119723873ddcede902038774addb45af934d](https://github.com/shopware/shopware/commit/01eb119723873ddcede902038774addb45af934d)
> 
> Das kann dann so aussehen:  
> &nbsp;
> 
> $this-\>subscribeEvent(  
> ‚Shopware\_Components\_RewriteGenerator\_FilterQuery‘,  
> ‚onFilterRewriteQuery‘  
> );
> 
> sowie:  
> &nbsp;
> 
> public function onFilterRewriteQuery(\Enlight\_Event\_EventArgs $args)  
> {  
> $orgQuery = $args-\>getReturn();  
> $query = $args-\>getQuery();
> 
> if ($query[‚controller‘] === ‚mein\_controller‘ && isset($query[‚mein\_parameter‘])) {  
> $orgQuery[‚mein\_parameter‘] = $query[‚mein\_parameter‘];  
> unset($orgQuery[‚sAction‘]);  
> }
> 
> return $orgQuery;  
> }
> 
> Vielleicht hilft das in der Zukunft weiter. 🙂
> 
> Gruß,  
> Patrick ![Shopware](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "Shopware")
> 
> &nbsp;

Ach Mist, hätte ich das mal 24 Stunden vorher gewusst :-)&nbsp;

Sehr cool, damit wird es dann noch sauberer.

---

<div class="post-metadata">

**Author:** ![doerndorfer](https://avatars.discourse-cdn.com/v4/letter/d/df705f/32.png) [@doerndorfer](https://forum.shopware.com/u/doerndorfer)\
**Post date:** [30. Januar 2017 um 15:15 UTC](https://forum.shopware.com/t/smarty-wandelt-urls-nicht-um/37720/5 "2017-01-30T15:15:32Z")

</div>

Hallo,

ich habe oben genannten Filter-Event angelegt und entsprechend erweitert, aber die URLs werden von Smarty nicht richtig gerendert.

Meine URLs sollten wie folgt aussehen:

[http://www.meinshop.de/meincontroller/meinwert](http://www.meinshop.de/meincontroller/meinwert)

In der Tabelle&nbsp;s\_core\_rewrite\_urls ist der Eintrag auch entsprechend vorhanden:  
org\_path: sViewport=meincontroller&meinattribut=wert  
path: meincontroller/meinwert

In Smarty wird die URL aber nicht richtig ausgegeben:  
aus [  
wird ]({url controller=meincontroller meinattribut=wert})&nbsp;

Muss da noch etwas registriert werden, oder ist die Registrierung des Events falsch?

```
public static function getSubscribedEvents()
{
    return [
        'Shopware_Components_RewriteGenerator_FilterQuery' => 'onFilterRewriteQuery'
    ];
}

public function onFilterRewriteQuery(\Enlight_Event_EventArgs $args)
{
    $orgQuery = $args->getReturn();
    $query = $args->getQuery();
    
    if ($query['controller'] === 'meincontroller' && isset($query['meinattribut'])) {
        $orgQuery['meinattribut'] = $query['meinattribut'];
        unset($orgQuery['sAction']);
    }

    return $orgQuery;
}

```

Gruss, Sven
