# Plugin-Probleme seit Update auf SW5

**URL:** <https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093>\
**Category:** Programmierung\
**Created:** [10. Mai 2015 um 14:53 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093 "2015-05-10T14:53:35Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dwza](https://avatars.discourse-cdn.com/v4/letter/d/c57346/32.png) [@Dwza](https://forum.shopware.com/u/Dwza)\
**Post date:** [10. Mai 2015 um 14:53 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/1 "2015-05-10T14:53:35Z")

</div>

Ich habe ein paar Plugins nach der Slogan-Anleitung geschrieben. Diese haben auch super funktioniert. Seit dem Update auf SW5 geht es leider nicht mehr. Letztendlich kann ich das Plugin installieren… es wird mir auch angezeigt. Was die Funktionalität angeht habe ich wohl nur Probleme mir der Config in dem Plugin. In meinen Plugineinstellungen kann ich eine der vorhandenen Kundengruppen auswählen. Wenn ich aber das Dropdown öffnen will dann werden mir keine Kundengruppen mehr angezeigt. Hier mal der zutreffende Codeausschnitt: ` $ass\_array = array( "controller" =\> "Config", "action" =\> "getValues", "name" =\> "customerGroup" ) $remoteUrl = Shopware()-\>Front()-\>Router()-\>assemble($ass\_array); $form = $this-\>Form(); for ($i = 1; $i \<= $this-\>code\_count; $i++) { $form-\>setElement( 'combo', $this-\>prefix . '\_foobar\_' . $i, array( 'label' =\> 'Kundengruppe ' . $i, 'value' =\> 'Bitte wählen Sie ein Gruppe', 'valueField' =\> 'id', 'displayField' =\> 'key', 'triggerAction' =\> 'all', 'store' =\> 'new Ext.data.Store({ fields: ["id", "key"], proxy : { type : "ajax", autoLoad : true, api : { read : "' . $remoteUrl . '", }, reader : { type : "json", root : "data" } } })', 'scope' =\> Shopware\Models\Config\Element::SCOPE\_SHOP ) ); }` das hat normal die Kundengruppen rein geholt… macht es aber nicht mehr… jemand ne Idee warum ?

---

<div class="post-metadata">

**Author:** ![Dwza](https://avatars.discourse-cdn.com/v4/letter/d/c57346/32.png) [@Dwza](https://forum.shopware.com/u/Dwza)\
**Post date:** [11. Mai 2015 um 11:26 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/2 "2015-05-11T11:26:38Z")

</div>

Folgendes konnte ich bislang herausfinden… Wenn ich das hier in meinen Browser eingebe: h t t p : [//localhost/shops/[color=red]sw4[/color]/backend/Config/getValues/name/customerGroup](https://localhost/shops/%5Bcolor=red%5Dsw4%5B/color%5D/backend/Config/getValues/name/customerGroup) dann bekomme ich einen JSON-String zurück der wie erwartet alle Kundengruppen beinhaltet. hier: h t t p : [//localhost/shops/[color=red]sw5[/color]/backend/Config/getValues/name/customerGroup](https://localhost/shops/%5Bcolor=red%5Dsw5%5B/color%5D/backend/Config/getValues/name/customerGroup) macht er das eben nicht… da bekomme ich einen leeren „JSON“-String zurück. Also nur: []

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [11. Mai 2015 um 16:12 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/3 "2015-05-11T16:12:03Z")

</div>

Du kannst auch “store =\> Ext.create(‘Shopware.apps.Base.store.CustomerGroup’)” nutzen

---

<div class="post-metadata">

**Author:** ![Dwza](https://avatars.discourse-cdn.com/v4/letter/d/c57346/32.png) [@Dwza](https://forum.shopware.com/u/Dwza)\
**Post date:** [12. Mai 2015 um 13:58 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/4 "2015-05-12T13:58:14Z")

</div>

ok, habe das mit den Kundengruppen wieder hinbekommen… wie ist das mit \_SESSION, ist das in SW5 depricated ?

---

<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:** [12. Mai 2015 um 14:13 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/5 "2015-05-12T14:13:33Z")

</div>

Hi, die globalen Variablen \_GET, \_POST, $\_SESSION, etc. wurden vom SW-Store schon immer abgelehnt. Die Alternative ist ja: $this-\>get(‘session’) Heiner

---

<div class="post-metadata">

**Author:** ![Dwza](https://avatars.discourse-cdn.com/v4/letter/d/c57346/32.png) [@Dwza](https://forum.shopware.com/u/Dwza)\
**Post date:** [12. Mai 2015 um 15:08 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/6 "2015-05-12T15:08:59Z")

</div>

Ich meinte ja nicht die normale Session… es ging mir um: `Shopware()-\>Modules()-\>System()-\>\_SESSION['myVarName'] = "hallo";` So hatte ich eine Sessionvariable erstellt die ich dann in dem Bereich in dem ich Sie brauchte nutzen konnte… Allerdings ist …System-\>\_SESSION depricated und jetzt scheint es wohl `Shopware()-\>Session()` zu sein. Aber wenn ich schreibe `Shopware()-\>Session['myVarName'] = "Hallo";` dann kann ich diesen Wert leider nicht in der Session sehen.

---

<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:** [12. Mai 2015 um 15:16 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/7 "2015-05-12T15:16:29Z")

</div>

Hi, das sollte so in aktuelleren PHP-Versionen funktionieren: Shopware()-\>Session()[‘myVarName’] = “Hallo”; Aber im Prinzip ist das auch “deprecated” / veraltet. Besser wäre der DI-Weg: ` public function \_\_construct($session) { $this-\>session = $session; } /\*\* \* @param \Enlight\_Controller\_ActionEventArgs $args \*/ public function onPostDispatchCheckout($args) { if(!empty($this-\>session['myname'])) { ... } }` Heiner

---

<div class="post-metadata">

**Author:** ![Dwza](https://avatars.discourse-cdn.com/v4/letter/d/c57346/32.png) [@Dwza](https://forum.shopware.com/u/Dwza)\
**Post date:** [12. Mai 2015 um 20:28 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/8 "2015-05-12T20:28:15Z")

</div>

Also das mit der \_\_construct function funktioniert so nicht… wenn ich die in mein plugin so einbaue dann geht garnichts mehr 😃 Davon abgesehen bringt mir die Session so nichts. Ich muss die Session zugreifen in der die aktuellen Kundengruppen-Informationen stehen. In dieser Session sind die Werte nicht vorhanden. Zu dem: `Shopware()-\>Session()['myVarName'] = "Hallo";` Dann kommt [quote]Fatal error: Can’t use function return value in write context[/quote] Habe das versucht… ` protected $session; public function init($session) { $this-\>session = $session; //code here... }` Leider ist die Session dann leer

---

<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:** [12. Mai 2015 um 20:35 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/9 "2015-05-12T20:35:06Z")

</div>

Hi, naja, zur DependencyInjection gehört ja auch, dass da irgendwer die dependency injected, das machst du ja hier nicht :). `Shopware()-\>Session()-\>offsetSet('name', 'wert');` Steht dir eigentlich immer zur Verfügung, auch wenn es nicht unbedingt best practice ist, immer global über das Shopware-Singleton zu arbeiten - das wollte Heiner auch nur betonen, denke ich. Daniel

---

<div class="post-metadata">

**Author:** ![madco-sven](https://avatars.discourse-cdn.com/v4/letter/m/7cd45c/32.png) [@madco-sven](https://forum.shopware.com/u/madco-sven)\
**Post date:** [12. Mai 2015 um 21:03 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/10 "2015-05-12T21:03:16Z")

</div>

Hey hiermit sollte es richtig laufen zum setzen Shopware()-\>Session()-\>offsetSet(‚name‘, ‚wert‘) Zum Abfragen Shopware()-\>Session()-\>offsetGet(‚name‘)

---

<div class="post-metadata">

**Author:** ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)\
**Post date:** [7. August 2015 um 11:34 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/11 "2015-08-07T11:34:31Z")

</div>

[quote=“Dwza”]ok, habe das mit den Kundengruppen wieder hinbekommen…[/quote] Woran lag es? Ich bekomme vereinzelt auch Probleme. In manchen Instanzen funktioniert die Abfrage, in manchen nicht, völlig schleierhaft. Bisher habe ich die Remote Combo auch mit folgender URL gefüllt: ` $remoteUrlPriceGroup = Shopware()-\>Front()-\>Router()-\>assemble( array("controller" =\> "Base", "action" =\> "getCustomerGroups") ); ` Wie gesagt, eig. funktioniet das, in seinem System in 5.0.2 nut nicht mehr. Dabei gibt die URL definitiv eine Liste der Gruppen zurück, nur die Comboboxen bleiben leer. EDIT: Jetzt habe ich das reproduzierbar: Der Shop ist von einem Unterordner in den Root gewandert. Im Logging sehe ich, dass das Plugin die URL noch von der Unterordner-Instanz aufrufen möchte (was es ja gar nicht mehr gibt). Shopware scheint nach dem Umzug noch irgendetwas altes (die URL) im Cache/System zu haben, was das Plugin verwendert. Wäre nett hier offiziell einen Fix/Hinweis zu bekommen … Schöne Grüße, Niklas

---

<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. August 2015 um 16:40 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/12 "2015-08-07T16:40:44Z")

</div>

Hi Niklas, du kannst den Store auch direkt beim Element hinterlegen. Beispiel: ` $form-\>setElement( 'store' =\> 'base.CustomerGroup' ` Das alte Format mit “new Ext.data.Store(” wird aus diesem Grund nicht empfohlen noch funktioniert sie 100%ig. Sie ist nur zur Kompatibilität mit Shopware 3 enthalten. Viele Grüße Heiner

---

<div class="post-metadata">

**Author:** ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)\
**Post date:** [7. August 2015 um 18:51 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/13 "2015-08-07T18:51:45Z")

</div>

[quote=“Heiner Lohaus”]du kannst den Store auch direkt beim Element hinterlegen. Beispiel: ` $form-\>setElement( 'store' =\> 'base.CustomerGroup' ` [/quote] Okay, prinzipiell schonmal gut der Hinweis - jedenfalls für neue Versionen. Aber wir haben eben schon eine Vielzahl von installierten Plugins. Die Plugin-Konfiguration wird eben beim install gesetzt und nicht beim Update. Eine erzwungene Neu-Installation des Plugins dafür wäre jetzt nicht die beste Möglichkeit. Gibt es keinen Weg die alte URL webgzubekommen? Die Frage ist ja auch, wo die überhaupt drin sitzt, da der Unterordner in den Shop-Einstellungen defintiv nicht mehr drin ist, und ich den gesamten Cache des Shops mehrmals geleert habe. Im “Prinzip” darf der Verweis auf den alten Ordner gar nicht mehr existieren, nur im Plugin bzw. über Shopware()-\>Front()-\>Router()-\>assemble() scheint dieser noch zu existieren … Irgendein gecachter Bereich muss das noch drin haben, dann müsste man den doch auch irgendwie wegekommen können … Schöne Grüße! Niklas

---

<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:** [10. August 2015 um 08:23 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/14 "2015-08-10T08:23:29Z")

</div>

Hi Niklas, ja, der Link wird gecached bzw. in die Datenbank geschrieben. Daher ist es auch falsch den Router dort zu verwenden. Sattdessen könnte man auch z.B. „document.location.pathname“ verwenden: [https://github.com/shopwareLabs/SwagPay … p.php#L370](https://github.com/shopwareLabs/SwagPaymentPaypal/blob/master/Bootstrap.php#L370) Oder halt einen BaseStore wie in meinen Beispiel. Viele Grüße Heiner

---

<div class="post-metadata">

**Author:** ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)\
**Post date:** [10. August 2015 um 13:05 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/15 "2015-08-10T13:05:54Z")

</div>

[quote=„Heiner Lohaus“]Daher ist es auch falsch den Router dort zu verwenden.[/quote] Hm … wieso nehmt Ihr dann in der Doku den Router um die URL zu bauen, wenn es dadurch massiv zu Problemen kommen kann? … [http://community.shopware.com/Shopware-4-plugin-configuration\_detail\_1287.html#Selection\_field\_.2F\_remote\_combo](http://community.shopware.com/Shopware-4-plugin-configuration%5C_detail%5C_1287.html#Selection%5C_field%5C_.2F%5C_remote%5C_combo) Interessant wäre auch eine Liste mit möglichen Verweisen. „base.CustomerGroup“ entspricht ja nicht dem eig. Controller wie „Base, getCustomerGroups“ EDIT: Habe die Stelle gefunden, wo diese definiert werden: [https://github.com/shopware/shopware/tree/5.0/themes/Backend/ExtJs/backend/base/store](https://github.com/shopware/shopware/tree/5.0/themes/Backend/ExtJs/backend/base/store) Da ist ja definitiv nicht alles möglich, was man einfach im Plugin über den Router machen könnte. Lassen die Stores sich überhaupt mit dem Plugin an- und mitgeben? … ☹ [quote=„Heiner Lohaus“]ja, der Link wird gecached bzw. in die Datenbank geschrieben[/quote] Ist es möglich herauszufinden wo dieser Cache genau liegt bzw. wie man diesen löschen kann? Wie gesagt, ich passe das gerne im Plugin an, aber es geht darum der bereits installierten Basis einen Fix für dieses Szenario geben zu können ohne eine neue Installation aufzuzwingen. Das wäre super! Vielen Dank und schöne Grüße, Niklas

---

<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:** [10. August 2015 um 14:04 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/16 "2015-08-10T14:04:58Z")

</div>

Hi, der Fix wäre ja: ` public function update($oldVersion) { $form = $this-\>Form(); $form-\>setElement('combo', 'TEST', array( 'label'=\>'Backend-User','value'=\>'Please select', 'store' =\> 'base.CustomerGroup' , 'scope' =\> \Shopware\Models\Config\Element::SCOPE\_SHOP)); return true; }` Das würde den Eintrag in der Datenbank (beim Plugin-Update) aktualisieren. Einen anderen Weg gibt es nicht bzw. die Plugin-Konfiguration steht extra in der Datenbank. Im Wiki-Artikel stand es wirklich falsch drin. Danke für den Hinweis. Ich werde es korrigieren. Gruß Heiner

---

<div class="post-metadata">

**Author:** ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)\
**Post date:** [10. August 2015 um 15:00 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/17 "2015-08-10T15:00:14Z")

</div>

Ja, so habe ich das nun auch drin, funktioniert. Trotzdem noch einmal: Wie sind dort eigene Verweise über die ExtJS Stores machbar? Ich hätte ein anderes Beispiel (ab SW5) wo über die Remotecombo eine Liste mit aktuellen Freitextfeldern geholt wird: ` $remoteUrlArticleAttributes = Shopware()-\>Front()-\>Router()-\>assemble( array("controller" =\> "Config", "action" =\> "getList", "\_repositoryClass" =\> "attribute") ); ` Den Bereich Config in Bezeihung mit getList und die repositoryClass finde ich nicht in den vorhandenen ExtJS Stores … jetzt ist die Frage wie das geht, wenn der Router nicht mehr verwendet werden soll. Das genannte Beispiel mit document.location.pathname erkenne ich im Button-Handler, wie würde das im Combobeispiel aussehen? Schöne Grüße, Niklas Teich

---

<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:** [10. August 2015 um 15:16 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/18 "2015-08-10T15:16:29Z")

</div>

Das wäre z.B. so möglich: api: { read: document.location.pathname + ‚Config/getList?\_repositoryClass=attribute‘ } Aber JavaScript in der Datenbank ist nicht so schön und wir empfehlen daher in solchen Fällen eigene Module zu schreiben. Gruß Heiner

---

<div class="post-metadata">

**Author:** ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)\
**Post date:** [10. August 2015 um 15:25 UTC](https://forum.shopware.com/t/plugin-probleme-seit-update-auf-sw5/27093/19 "2015-08-10T15:25:46Z")

</div>

Ah, okay. Ja, ich habe nur Tutorials für komplette Backend Plugins gesehen, da muss ich mal ausprobieren. Aber, ist ja dann mit den Backend Stores deutlichst höherer Aufwand als eig. dem dem Router zu arbeiten, mit dem das ja in ein paar Zeilen fertig ist und ziemlich unkompliziert. Würde vielleicht Sinn machen, die Backend Router-Anweisungen vielleicht nicht zu cachen. Dann würde die ganze Problematik ja gar nicht mehr bestehend … Ok, dann guck ich mal weiter. Vielen Dank und schöne Grüße, Niklas
