# Hooks auf keine Core-Class ?

**URL:** https://forum.shopware.com/t/hooks-auf-keine-core-class/3298
**Category:** Shopware 3.5
**Tags:** programming
**Created:** [27. Juni 2011 um 07:31 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298 "2011-06-27T07:31:26Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 07:31 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/1 "2011-06-27T07:31:26Z")

</div>

Ich wünsche einen super sonnigen Guten Morgen 😉 Ist es möglich per Hook Plugin auf Shopware/Models/Document/Order.php zuzugreife? ` $event = $this-\>createHook( 'Shopware\_Models\_Document\_Order', 'getPositions', 'mygetPositions', Enlight\_Hook\_HookHandler::TypeReplace,0); $this-\>subscribeHook($event); ` (ich weiß, ich könnte es ja einfach probieren. Aber über eine AW würde ich mich freuen 😉 ) Danke

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [27. Juni 2011 um 07:32 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/2 "2011-06-27T07:32:38Z")

</div>

Ja - ` class Shopware\_Models\_Document\_Order extends Enlight\_Class implements Enlight\_Hook `

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 07:33 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/3 "2011-06-27T07:33:43Z")

</div>

Kurz und Knapp 😉 Merci

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 07:44 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/4 "2011-06-27T07:44:55Z")

</div>

Frage zurück gezogen

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 08:56 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/5 "2011-06-27T08:56:25Z")

</div>

Hi Stefan, ich brauche noch mal deine Hilfe. Mein Code geht nicht ☹ ` class Shopware\_Plugins\_Backend\_OttschoPDFPositionOrder\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $event = $this-\>createHook( 'Shopware\_Models\_Document\_Order', 'getPositions', 'mygetPositions', Enlight\_Hook\_HookHandler::TypeReplace,0 ); $this-\>subscribeHook($event); $form = $this-\>Form(); $form-\>setElement('text', 'order\_by', array('label'=\>'Order By','value'=\>'od.articleordernumber DESC')); $form-\>save(); return true; } static function mygetPositions(Enlight\_Hook\_HookArgs $args) { $config = Shopware()-\>Plugins()-\>Backend()-\>OttschoPDFPositionOrder()-\>Config(); $this-\>\_positions = new ArrayObject(Shopware()-\>Db()-\>fetchAll(" SELECT od.\*, at.attr1, at.attr2, at.attr3, at.attr4, at.attr5, at.attr6, at.attr7, at.attr8, at.attr9, at.attr10, at.attr11, at.attr12, at.attr13, at.attr14, at.attr15, at.attr16, at.attr17, at.attr18, at.attr19, at.attr20 FROM s\_order\_details od LEFT JOIN s\_articles\_groups\_value g ON g.ordernumber=od.articleordernumber AND g.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_details d ON (g.articleID=d.articleID OR d.ordernumber=od.articleordernumber) AND d.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_attributes at ON at.articledetailsID=d.id WHERE od.orderID=? ORDER BY ".$config-\>order\_by,array($this-\>\_id)), ArrayObject::ARRAY\_AS\_PROPS); foreach ($this-\>\_positions as &$position){ $position["meta"] = Shopware()-\>Modules()-\>Articles()-\>sGetPromotionById('fix',0,$position["articleordernumber"]); } } ` Plugin ist installiert und aktiviert. Aber es ändert sich nichts. Mache ich die Änderung direkt in der Datei (ohne Plugin) so funktioniert es! Hast du eine Idee?

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [27. Juni 2011 um 09:09 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/6 "2011-06-27T09:09:30Z")

</div>

Lösche die Proxy-Klasse im Ordner /engine/Shopware/Proxies mal kurz und checke ob es danach funktioniert -

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 09:59 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/7 "2011-06-27T09:59:54Z")

</div>

Leider war es das nicht. Ich habe das Plugin deinstalliert, die Proxie Datei gelöscht und das Plugin installiert. Die Proxie Datei wurde neu erstellt, aber es funktioniert trotzdem nicht!

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 17:35 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/8 "2011-06-27T17:35:43Z")

</div>

Hey Stefan, ich habe noch was festgestellt. Wenn ich in der Belegerstellung auf Vorschau klicke, erhalte ich diesen Fehler: Fatal error: Using this when not in object context in /var/www/engine/Shopware/Plugins/Community/Backend/OttschoPDFPositionOrder/Bootstrap.php on line 55 ich habe nun noch die Deklaration hinzugefüht: protected \_positions; Aber Fehler bleibt erhalten. Ich hoffe du hast eine Idee:shopware:

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [27. Juni 2011 um 17:48 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/9 "2011-06-27T17:48:25Z")

</div>

Ich konnte nun die ersten Fehler entfernen. In dem ich statt this-\\>\_position nur \_position verwende. Aber nun kommt: Fatal error: Call to a member function getArrayCopy() on a non-object in /var/www/engine/Shopware/Models/Document/Order.php on line 196 Der Plugin-Code sieht so aus: ` class Shopware\_Plugins\_Backend\_OttschoPDFPositionOrder\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { protected $\_positions; protected $\_id; public function install() { $event = $this-\>createHook( 'Shopware\_Models\_Document\_Order', 'getPositions', 'mygetPositions', Enlight\_Hook\_HookHandler::TypeReplace,0 ); $this-\>subscribeHook($event); $form = $this-\>Form(); $form-\>setElement('text', 'order\_by', array('label'=\>'Order By','value'=\>'od.articleordernumber DESC')); $form-\>save(); return true; } static function mygetPositions(Enlight\_Hook\_HookArgs $args) { $config = Shopware()-\>Plugins()-\>Backend()-\>OttschoPDFPositionOrder()-\>Config(); $\_positions = new ArrayObject(Shopware()-\>Db()-\>fetchAll(" SELECT od.\*, at.attr1, at.attr2, at.attr3, at.attr4, at.attr5, at.attr6, at.attr7, at.attr8, at.attr9, at.attr10, at.attr11, at.attr12, at.attr13, at.attr14, at.attr15, at.attr16, at.attr17, at.attr18, at.attr19, at.attr20 FROM s\_order\_details od LEFT JOIN s\_articles\_groups\_value g ON g.ordernumber=od.articleordernumber AND g.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_details d ON (g.articleID=d.articleID OR d.ordernumber=od.articleordernumber) AND d.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_attributes at ON at.articledetailsID=d.id WHERE od.orderID=? ORDER BY ".$config-\>order\_by,array(\_id)), ArrayObject::ARRAY\_AS\_PROPS); foreach ($\_positions as &$position){ $position["meta"] = Shopware()-\>Modules()-\>Articles()-\>sGetPromotionById('fix',0,$position["articleordernumber"]); } return true; } } ` Der Fehler kommt dann in der originalen Order.php Datei beim kopieren des Array. Muss ich das noch irgendwie von meinem Plugin in die Order.php übergeben? Hab nun dies noch hinzugefügt: $args-\>setReturn($position); ich verstehe es aber eig. nicht. Durch das Replace ersetze ich ja die komplette Funktion. Wenn ich doch dann die original Funktion kopiere und abändere, müsste es doch gehen?

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [28. Juni 2011 um 08:15 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/10 "2011-06-28T08:15:15Z")

</div>

Niemand eine Idee? :shopware:

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [28. Juni 2011 um 15:23 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/11 "2011-06-28T15:23:53Z")

</div>

Stefan, ich bin ein Stück weiter. Aber bringt mir nicht viel. Ersetze ich den Funktion komplett über TypeReplace so erhalte ich wenn $this-\>\_position und $this-\>\_id verwendet wird ein Fehler, dass $this nicht verwendert werden kann. Entferne ich $this, erhalte ich beim kopieren des Array einen Fehler, vermutlich weil es das Array dann nicht gibt bzw. in Order.php nicht verfügbar ist. Versuche ich es mit dem Type:After habe ich mit $this die gleichen Probleme. Entferne ich das $this, so sind die verwendeten Variablen \_id und \_position leer. Gebe ich statt \_id direkt die OrderID aus der DB an, so wird der Code bzw. Sql Statement korrekt ausgeführt und in das Array $position geschrieben. Leider ist nun in der Order.php die $position des Pluigns unbekannt und es wird die original $position verwendet. Ich drehe mich hier im Kreis ☹

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [29. Juni 2011 um 16:02 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/12 "2011-06-29T16:02:42Z")

</div>

Stefan, hast du hier bitte noch einen Tipp, wie ich das Plugin hinbekomme? (ich will es eig. ungern direkt in der Datei machen)

---

<div class="post-metadata">

### Author: ![radox1](https://avatars.discourse-cdn.com/v4/letter/r/e19b73/32.png) [@radox1](https://forum.shopware.com/u/radox1)
#### Post date: [29. Juni 2011 um 17:02 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/13 "2011-06-29T17:02:40Z")

</div>

Hallo ottscho, ich gehe mal von deinem Code-Beispiel aus. In einer statischen Klassenmethode gibt es kein $this. Hier ist ein Beispiel, wie es zu lösen ist: [http://www.professionelle-softwareentwi … tatic.html](http://www.professionelle-softwareentwicklung-mit-php5.de/oop.foundations.static.html) Oder du holst dir die Instanz der Klasse in deiner statischen Funktion und greifst dann darüber auf die Variablen zu: $instance = Enlight\_Class::Instance(\_\_CLASS\_\_); Vermute das war das Problem, oder?

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [29. Juni 2011 um 21:32 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/14 "2011-06-29T21:32:26Z")

</div>

Hey Ralf, danke für den Tipp. Das ist bestimmt das Problem, aber ich glaube ich raffe es noch nichts ganz. Habe den aufruf nun statt this-\\>\_id so klassenname::\_id Nun erhalte ich folgende Meldung: Fatal error: Cannot access protected property Shopware\_Models\_Document\_Order::$\_id Komplette Code: ` class Shopware\_Plugins\_Backend\_OttschoPDFPositionOrder\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $event = $this-\>createHook( 'Shopware\_Models\_Document\_Order', 'getPositions', 'mygetPositions', Enlight\_Hook\_HookHandler::TypeReplace,0 ); $this-\>subscribeHook($event); $form = $this-\>Form(); $form-\>setElement('text', 'order\_by', array('label'=\>'Order By','value'=\>'od.articleordernumber ASC')); $form-\>save(); return true; } static function mygetPositions(Enlight\_Hook\_HookArgs $args) { $config = Shopware()-\>Plugins()-\>Backend()-\>OttschoPDFPositionOrder()-\>Config(); Shopware\_Models\_Document\_Order::$\_positions = new ArrayObject(Shopware()-\>Db()-\>fetchAll(" SELECT od.\*, at.attr1, at.attr2, at.attr3, at.attr4, at.attr5, at.attr6, at.attr7, at.attr8, at.attr9, at.attr10, at.attr11, at.attr12, at.attr13, at.attr14, at.attr15, at.attr16, at.attr17, at.attr18, at.attr19, at.attr20 FROM s\_order\_details od LEFT JOIN s\_articles\_groups\_value g ON g.ordernumber=od.articleordernumber AND g.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_details d ON (g.articleID=d.articleID OR d.ordernumber=od.articleordernumber) AND d.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_attributes at ON at.articledetailsID=d.id WHERE od.orderID=? ORDER BY ".$config-\>order\_by,array(Shopware\_Models\_Document\_Order::$\_id)), ArrayObject::ARRAY\_AS\_PROPS); foreach ($\_positions as &$position){ Shopware\_Models\_Document\_Order::$position["meta"] = Shopware()-\>Modules()-\>Articles()-\>sGetPromotionById('fix',0,Shopware\_Models\_Document\_Order::$position["articleordernumber"]); } } } `

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [29. Juni 2011 um 21:36 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/15 "2011-06-29T21:36:34Z")

</div>

Wenn ich es mithilfe von $instance = Enlight\_Class::Instance(\_\_CLASS\_\_); mache. Wie komme ich zur \_id aus der original Class? Ich kann damit ja nur Methoden aufrufen. Oder?

---

<div class="post-metadata">

### Author: ![radox1](https://avatars.discourse-cdn.com/v4/letter/r/e19b73/32.png) [@radox1](https://forum.shopware.com/u/radox1)
#### Post date: [29. Juni 2011 um 22:09 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/16 "2011-06-29T22:09:45Z")

</div>

Nein, dass war nur dafür gedacht, wenn du auf Variablen in der Plugin-Klasse zugreifen willst - Code auf Seite 1 unten. Ich würde es mal so probieren (nicht getestet): $order = $args-\>getSubject(); $id = $order-\>\_id;

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [29. Juni 2011 um 22:25 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/17 "2011-06-29T22:25:44Z")

</div>

Oh man, so hatte ich es auch schon ohne Erfolg. Habe es nun ohne Unterstrich probiert $id = $args-\>getSubject()-\>id; So geht es. Komisch… Jetzt muss ich es nur noch hinbekommen, dass das Array $position an die original Klasse übergeben wird. Habe es einfach nur mit $position versucht, mit parent::$position und auch mit Shopware\_Models\_Document\_Order::$position leider ohne Erfolg. Es kommt die Fehlermeldung: Fatal error: Call to a member function getArrayCopy() on a non-object in /kunden/117539\_78141/webseiten/testshop/engine/Shopware/Models/Document/Order.php on line 196 An dieser Stelle wird normalerweise in der original Klasse das Array $position kopiert. ` static function mygetPositions(Enlight\_Hook\_HookArgs $args) { $config = Shopware()-\>Plugins()-\>Backend()-\>OttschoPDFPositionOrder()-\>Config(); $id = $args-\>getSubject()-\>id; $\_positions = new ArrayObject(Shopware()-\>Db()-\>fetchAll(" SELECT od.\*, at.attr1, at.attr2, at.attr3, at.attr4, at.attr5, at.attr6, at.attr7, at.attr8, at.attr9, at.attr10, at.attr11, at.attr12, at.attr13, at.attr14, at.attr15, at.attr16, at.attr17, at.attr18, at.attr19, at.attr20 FROM s\_order\_details od LEFT JOIN s\_articles\_groups\_value g ON g.ordernumber=od.articleordernumber AND g.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_details d ON (g.articleID=d.articleID OR d.ordernumber=od.articleordernumber) AND d.articleID=od.articleID AND od.modus=0 LEFT JOIN s\_articles\_attributes at ON at.articledetailsID=d.id WHERE od.orderID=? ORDER BY ".$config-\>order\_by,array($id)), ArrayObject::ARRAY\_AS\_PROPS); foreach ($\_positions as &$position){ $position["meta"] = Shopware()-\>Modules()-\>Articles()-\>sGetPromotionById('fix',0,$position["articleordernumber"]); } var\_dump($position); $args-\>set('position',$position); } ` Danke dir für deine Mühe.

---

<div class="post-metadata">

### Author: ![radox1](https://avatars.discourse-cdn.com/v4/letter/r/e19b73/32.png) [@radox1](https://forum.shopware.com/u/radox1)
#### Post date: [29. Juni 2011 um 22:32 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/18 "2011-06-29T22:32:53Z")

</div>

Sorry, ‚\_id‘ ist ja protected, da kann der Zugriff nicht funktionieren. Es geht mit ‚id‘, da am Ende der Klasse eine öffentliche (public) \_\_get-Funktion ist.

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [29. Juni 2011 um 22:36 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/19 "2011-06-29T22:36:53Z")

</div>

Hast du auch noch eine Idee, wie ich die das Array $\_positions von meinem Plugin dann rüber in die original Klasse bekomme? Habe nun alles mögliche versucht: args-\\>setReturn(\_positions); args-\\>set(\_positions,\_positions); parent:\_positions = \_positions; parent:positions = \_positions;

---

<div class="post-metadata">

### Author: ![radox1](https://avatars.discourse-cdn.com/v4/letter/r/e19b73/32.png) [@radox1](https://forum.shopware.com/u/radox1)
#### Post date: [29. Juni 2011 um 23:09 UTC](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298/20 "2011-06-29T23:09:29Z")

</div>

[quote=„ottscho“]Hast du auch noch eine Idee, wie ich die das Array $\_positions von meinem Plugin dann rüber in die original Klasse bekomme? Habe nun alles mögliche versucht: args-\\>setReturn(\_positions); args-\\>set(\_positions,\_positions); parent:\_positions = \_positions; parent:positions = \_positions;[/quote] Die Brute Force Methode. 😉 Nein, hab auf die Schnelle leider keine Idee. Evtl. mal bei Shopware fragen, ob die ein Enlight-\>Event reinbauen? 😉

[Nächste Seite](https://forum.shopware.com/t/hooks-auf-keine-core-class/3298.md?page=2)
