# Eigenes Plugin mit URL rewrite

**URL:** <https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858>\
**Category:** Programmierung\
**Created:** [23. August 2015 um 16:34 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858 "2015-08-23T16:34:30Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![max1](https://avatars.discourse-cdn.com/v4/letter/m/e99b99/32.png) [@max1](https://forum.shopware.com/u/max1)\
**Post date:** [23. August 2015 um 16:34 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858/1 "2015-08-23T16:34:30Z")

</div>

Hallo zusammen, ich habe ein eigenes Plugin erstellt, in welchem nun aber noch “schöne” umgeschriebene URLs verwendet werden sollen. Ich will jedoch nicht nur feste URLs umschreiben, sondern habe für jede URL noch eine ID ähnlich wie bei den Artikeln. Ich habe soweit auch alles eingebaut, die URLs werden richtig über `Shopware()-\>Modules()-\>RewriteTable()-\>sInsertUrl(...);` eingetragen, allerdings funktioniert das automatische umschreiben mit der Smarty URL Funktion nicht. Nach ein bisschen herum suchen bin ich darauf gestoßen, dass in der Funktion [Shopware\Components\Routing\Generators\RewriteGenerator::getOrgQueryArray()](https://github.com/shopware/shopware/blob/5.0/engine/Shopware/Components/Routing/Generators/RewriteGenerator.php#L187) der Parameter der ID entfernt wird. Falls ich diesen nun in der Funktion den Parameter hinzufüge funktioniert auch alles. Jedoch weiß ich nicht wie ich dieses Verhalten von meinem Plugin aus implementieren kann/soll. Beste Grüße Max

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [7. September 2015 um 12:23 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858/2 "2015-09-07T12:23:37Z")

</div>

Hi Max, ja, an der genannten Stelle bist du richtig. Da mit Shopware 5 die Events aus dem Router entfernt wurden, muss du jetzt DI einsetzten. Da der Router jetzt soweit „DI“ ist, sollte es kein Problem sein: Außerdem waren die Events nicht performant. 🙂 [https://developers.shopware.com/develop … ion-plugin](https://developers.shopware.com/developers-guide/shopware-5-core-service-extensions/#your-extension-plugin) Achtung: Da der Router vor den Plugins geladen wird, musst du statt dem dort genannten Event dieses Event verwenden: ` $this-\>subscribeEvent( 'Enlight\_Controller\_Front\_RouteStartup', 'onRouteStartup' );` Viele Grüße Heiner

---

<div class="post-metadata">

**Author:** ![Pixeleyes](https://avatars.discourse-cdn.com/v4/letter/p/96bed5/32.png) [@Pixeleyes](https://forum.shopware.com/u/Pixeleyes)\
**Post date:** [14. Oktober 2015 um 12:30 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858/3 "2015-10-14T12:30:56Z")

</div>

Ein Pluginbeispiel wäre dazu sehr hilfreich, wie man dies mit Hilfe von DI bewerkstelligen könnte

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [14. Oktober 2015 um 16:38 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858/4 "2015-10-14T16:38:44Z")

</div>

Ja, ein Beispiel kannst du bekommen: 🙂 engine/Shopware/Plugins/Community/Frontend/SwagSeoRoutes/Bootstrap.php [code]\<?php use \Shopware\Components\Routing\Generators\RewriteGenerator;

/\*\*

- @category Shopware
- @package Shopware\Plugins\SwagSeoRoutes
- @copyright Copyright © shopware AG ([http://www.shopware.de](http://www.shopware.de))  
_/  
class Shopware\_Plugins\_Frontend\_SwagSeoRoutes\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap  
{  
/_\*
  - @return bool  
\*/  
public function install()  
{  
$this-\>subscribeEvent( ‘Enlight\_Controller\_Front\_RouteStartup’, ‘onRouteStartup’ ); return true; } /\*\* \* @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’) ); } else { return $generator; } }, $generators); $router-\>setGenerators($generators); } } class NewRewriteGenerator extends RewriteGenerator { protected function getOrgQueryArray($query) { $orgQuery = [‘sViewport’ =\> $query[‘controller’]]; switch ($query[‘controller’]) { case ‘meinPlugin’: $orgQuery[‘action’] = $query[‘action’]; $orgQuery[‘groupid’] = $query[‘groupid’]; $orgQuery[‘id’] = $query[‘id’]; return $orgQuery; default: return parent::getOrgQueryArray($query); } } }[/code] Das ist aber noch nicht ganz optimal. Es wäre ja schön, wenn man weitere Routen ohne extra Plugin hinzufügen kann. Vielleicht hast du ja eine Idee? Gruß Heiner

---

<div class="post-metadata">

**Author:** ![Pixeleyes](https://avatars.discourse-cdn.com/v4/letter/p/96bed5/32.png) [@Pixeleyes](https://forum.shopware.com/u/Pixeleyes)\
**Post date:** [17. Oktober 2015 um 18:06 UTC](https://forum.shopware.com/t/eigenes-plugin-mit-url-rewrite/29858/5 "2015-10-17T18:06:56Z")

</div>

ich würde mir hierbei wünschen “Plugin-Routen” per Plugin dynamisch definieren zu können ohne eine interne Core Funktion zu manipulieren.
