Moin Leute, Ich bin grade dabei, eine Extension zu schreiben und habe noch ein paar Anlaufschwierigkeiten, ich mache erst seit heute Shopware. Habe vorher mit Magento gearbeitet. Da mir die Antworten im Wiki und auch sonst bei Google nicht wirklich weitergeholfen haben, bzw. ich mir denke, dass es vielleicht noch einen anderen Lösungsansatz gibt / geben muss, hier mal meine Fragen (die letztendlich aber auch alle auf ein und dasselbe hinauslaufen). 1. Wie überschreibe ich einen Core-Backend-Controller? 2. Ich habe die Position der Order um 2 Felder erweitert. Funktioniert auch alles super. Speichere ich, wird auch alles übernommen. Allerdings wird in der Übersicht weiterhin der alte Wert gezeigt, nach dem die per ExtJs erstellten Felder wieder ihren Fokus verloren haben, nachdem auf Update geklickt wurde. 3. Ich habe in meiner Extension 10 Felder als Konfiguration, die Werte hieraus möchte ich gerne an eine Select-Liste (eins der beiden genannten) Felder als Options übergeben? Wie geht das? Sorry, dass es so viel auf einmal in einer Frage ist, aber ich steh ein wenig unter Zeitdruck, ich hoffe es ist ok VG Chris
Hi, Zu Frage 1: Kommt drauf an was du überschreiben willst: [list] [*] Wenn du eine “…Action” Funktion überschreiben willst, kannst du dies mit einem Event machen: $this->subscribeEvent(‘Enlight_Controller_Action_Frontend_Index_ACTIONNAME’, ‘onEvent’);[/*] [*] Wenn du eine protected oder public function überschreiben möchtest, die nicht als Controller Action definiert ist, muss du einen Hook benutzen[/*][/list] Zu Frage 2: Wie hast du die Felder denn erweitert? Sauber über das Doctrine Model? Wenn ja musst du eine renderer Funktion für die Spalte schreiben. Ein Beispiel hierzu findest du in templates/_default/backend/order/view/detail/posistion.js in den letzten paar Zeilen. Zu Frage 3: Mit Extension meinst du sicherlich Plugin. Um die Plugin-Konfiguration als Auswahlbox in einem Ext JS Grid / Form anzuzeigen, musst du zunächst einen Store erstellen. Ext.define('Shopware.apps....', { extend: 'Ext.data.Store', fields: ['key', 'value' [, proxy: { type: 'ajax', url: '{controller=DeinController action=getPluginConfig}' } })
In deinem Backend Controller erstellst du dann eine Action: public function getPluginConfigAction() { $rows = array(); foreach($this-\>Config()-\>toArray() as $key =\> $value) { $rows[] = array('key' =\> $key, 'value' =\> $value); } return array( 'success' =\> true, 'data' =\> $rows ); }
Hoffe das hilft dir weiter Gruß Oliver
Hi, Vielen Dank für die ausführliche Antwort. Inzwischen habe ich schon alles lösen können. Ich war etwas verwirrt wegen der Controller-Überschreibung, weil ich dachte, dass es auch ungefähr so geht, wie in Magento. Bei den Feldern habe ich jetzt das Event der Query-Erstellung abgefangen und die Liste so manipuliert, dass die Attribute nicht mehr unter „attribute“ stehen, sondern direkt im Detail-Objekt. Nur als Feedback: Ich finde, dass dieses „Schuhattribute beim Kunden erweitern“-Plugin (Extension sage ich immer noch wegen Magento) nicht wirklich viel gebracht hat beim Erweitern der Detail-Liste. Vielleicht täusch ich mich im Nachhinein auch, weil es ja komplett Neuland war, aber ansonsten sind die Tutorials top! Danke für die Hilfe Chris