neuen Tab im Backend unter Bestelldetails hinzufügen

Wo finde ich den Bereich wo die Detailübersicht einer Bestellung abgearbeitet wird? Wo kann ich einen weitern Tab hinzufügen und wo finde ich den Bereich wo Rechnung, Versand, Zahlungsarten in den Bestelldetails erzeugt wird. In der 3er war das die main.php. In der 4er finde ich irgendwie nichts.

was willst du denn machen? prinzipiell findest du alles unter engine/Shopware/Controllers/Backend/Order.php und templates/_default/backend/order/*

Ich wollte neben Zahlungsarten noch eine weitere Box haben, wo ich einen Link angezeigt bekomme. Im 3e Shop hab ich das mit [code]

<?php echo DHL ?>
		" target="_blank" title="DHL Tracking"&gt; 
	<img src="http://www.discountramps.com/images/DHL_tracking.jpg" alt="DHL Retoure" style="border:0px;"> </a>
</fieldset>[/code] in der main.php gelöst. Irgendwie finde ich hier keinen Ansatz so richtig. Ideal wäre natürlich ein weiterer TAB, unter dem man dann z.B. Link zum Retoure oder Tracking findet. Aber TAb zufügen überschreitet irgendwie meinen Kenntnisse, da man an Beispielen nicht wirklich was findet.

das shopware4 backend hat gott sei dank überhaupt nichts mehr mit dem 3er gefrickel gemeinsam. das hilft dir natürlich nicht weiter… starte mal hier: http://wiki.shopware.de/Backend_cat_871.html ein aktueller intel+ssd hilft extrem gegen (entwickler)-frust bei der entwicklung von - extjs4 - backendmodulen… [quote] c ist not a constructor. [/quote] F5, backend-cache leeren, F5 … [quote] c ist not a constructor. [/quote] F5 … try & error @ its best. viel erfolg!

Na das war ja die Antwort des Tages mit Verweis aufs wiki. Hätte ja glatt von Shopware kommen können. :sunglasses: Danke für Deine Hilfe… :thumbup:

die schmerzen, die dich beim einarbeiten in die sw4-backend-entwicklung erwarten, kann dir keiner abnehmen :sunglasses:

Du meinst wohl ehr die grauen Haare… :happy: Sitz da nun schon 2 Tage dran, aber bekomm das nicht hin. Auch das benannte Bespiel bringt es nicht wirklich…

Wo hängst Du genau? Es ist tatsächlich sehr mühsam, hier den Einstieg zu finden und das ständige Cache-leeren und neu laden nervt gewaltig. Aber wenn man das Beispiel aus dem Wiki nachvollziehen kann, ist es ein guter Start. Hier mal ein paar Tips: Du musst Dich in Deinem Plugin (bootstrap.php) in den Order-Controller einklinken: public function addEvents() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Order', 'postDispatchOrderDetails' ); } Dann wird beim Laden des Bestellfensters Deine Funktion aufgerufen: public function postDispatchOrderDetails(Enlight\_Event\_EventArgs $args) { $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); if ($args-\>getRequest()-\>getActionName() === 'load') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/MeinPlugin/order/view/detail/overview.js' ); } } Hier setzt Du dann das Template Verzeichnis und erweiterst das Template Default/backend/order/view/detail/overview.js In dieser Datei geht es dann weiter… Wie beim Beispiel aus dem Wiki musst Du die passende Javascript-Funktion überschreiben, um z.B. Dein eigenes Feld in das Form zu bekommen. Wie gesagt eine ziemlich mühsame Geschichte, aber immerhin muss man dann nicht bei jedem Shopupdate wieder seine Änderungen einpflegen.

Hallo kapeha Ich hab erst einmal die Bootstrap fertig in Anlehnung an das Beispiel. Es soll ein weiterer TAb hinzugefügt werde. Aber weder mit diesem, noch mit Deinem Code geht es. Wenn ich das Plugin damit installiere, kann ich über das Menü nicht mal mehr die Bestellungen aufrufen. Kommt einfach kein Fenster mehr. Glaub jetzt nicht, dass es daran liegt, dass noch keine windows.js und meinOrderTab.php angelegt ist. public function install() { // extend article extjs module $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Order', 'onPostDispatchBackendOrderDetail' ); // Add path to backend-controller $this-\>subscribeEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Backend\_StrshaDhlOrderTab', 'onGetBackendController' ); return true; } public function onPostDispatchBackendOrderDetail(Enlight\_Event\_EventArgs $args) { $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); // if the controller action name equals "load" we have to load all application components. if ($args-\>getRequest()-\>getActionName() === 'load') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/order/StrshaDhlOrderTab/view/detail/window.js' ); } // if the controller action name equals "index" we have to extend the backend article application if ($args-\>getRequest()-\>getActionName() === 'index') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/order/StrshaDhlOrderTab/app.js' ); } } public function onGetBackendController() { $this-\>Application()-\>Snippets()-\>addConfigDir( $this-\>Path() . 'Snippets/' ); $this-\>Application()-\>Template()-\>addTemplateDir( $this-\>Path() . 'Views/' ); return $this-\>Path(). 'Controllers/Backend/StrshaDhlOrderTab.php'; } Mühsam ist echt kein Ausdruck. Wenn man da kein Vollprofi ist, legtst Dir da echt die Karten. Ich hatte das erst als Versuch direkt in den Dateien ändern wollen, um zu sehen was wo wie geht. Aber hab nicht mal den Tab angezeigt bekommen. Lag vielleicht auch daran, dass mir erst später aufgefallen ist, dass ich ja im Backend Template rummache und den Cache leeren muss.

Hi, der PHP Teil deines Plugins sieht gut aus. Hier ist kein Fehler zu erkennen. Interessant wird es im Javascript Teil. Wenn du einen neuen Tab im Bestellungsmodule hinzufügen möchtest kannst du wie folgt vorgehen: Im Post Dispatch musst du einen Override für das Detailfenster laden: if ($args-\>getRequest()-\>getActionName() === 'load') { $args-\>getSubject()-\>View()-\>extendsTemplate( 'backend/MeinPlugin/order/view/detail/window\_my\_plugin\_name.js' ); } => Hinweis: Hier ist das Nameing zu beachten. Der Klassen Name wird in CamelCase geschrieben: ‘WindowMyPluginName’, und der Dateiname wir mit unterstrich separiert: ‘window_my_plugin_name.js’ Die Datei wird dann geladen, wenn sich das Bestellungsmodule öffnet. Hier kannst du dann einen Override implementieren der in etwa so aussehen sollte: //{block name="backend/order/view/detail/window" append} Ext.define('Shopware.apps.Order.view.detail.WindowMyPluginName', { override: 'Shopware.apps.Order.view.detail.Window', createTabPanel: function() { var me = this; var tabPanel = me.callParent(arguments); tabPanel.insert(position, me.createMyTabPanel()); return tabPanel; }, createMyTabPanel: function() { return Ext.create('Ext.container.Container', { title: 'Mein Tab Panel', html: 'Dies ist ein Plain Text damit das Tab einen Inhalt besitzt und angezeigt wird' //items: [hier kannst du weitere Elemente hinzufügen (wie Grids, etc)] }); } }); //{/block} Das Backend-Caching kannst du ausserdem über einen weiteren Parameter deaktivieren: http://www.myshopware.de/backend?no-cache=1 Alternativ kannst du auch das gesamte Caching deaktivieren. Dies funktioniert über die config.php oder deine Custom.php Config unter engine/Shopware/Config. Hier kannst du folgenden Inhalt ergänzen: 'front' =\> array( 'noErrorHandler' =\> true, 'throwExceptions' =\> true, ), // Template-Cache 'template' =\> array( 'forceCompile' =\> true, ), // Backend-Cache 'cache' =\> array( 'backend' =\> 'Black-Hole', 'backendOptions' =\> array(), 'frontendOptions' =\> array( 'write\_control' =\> false ), ), // Model-Cache 'model' =\> array( 'cacheProvider' =\> 'Array' // supports Apc, Array, Wincache and Xcache ), Mit freundlichen Grüßen Oliver Denter

2 Likes

Soooo… Hat ne weile gedauert, aber den TAB bekomme ich jetzt angezeigt. tabPanel.insert(position, me.createMyTabPanel()); Musste position, raus nehmen, sonst ging gar nichts. Womit kann ich die Position bestimmen? Das mit dem Cache ging leider auch nicht. Hab den Cache geleert und den Shop mit http://www.myshopware.de/backend?no-cache=1 aufgerufen, aber bei aufrufen des Cache war da trotztem was drinnen. Ebenso wenn ich das andere in die config.php eingetragen habe. <?php return array ( 'front' => array( 'noErrorHandler' =\> true, 'throwExceptions' =\> true, ), // Template-Cache 'template' =\> array( 'forceCompile' =\> true, ), // Backend-Cache 'cache' =\> array( 'backend' =\> 'Black-Hole', 'backendOptions' =\> array(), 'frontendOptions' =\> array( 'write\_control' =\> false ), ), // Model-Cache 'model' =\> array( 'cacheProvider' =\> 'Array' // supports Apc, Array, Wincache and Xcache ), 'db' =\> array ( 'username' =\> 'xxxxxx', 'password' =\> 'xxxxxx', 'dbname' =\> 'xxxxxx', 'host' =\> 'localhost', ), ); Hab ich was falsch verstanden mit den Cache?

Das mit der Position hat sich erledigt. einfach 0,1,2 usw. nehmen. Übersicht hat die Position 0. Das Problem mit dem Cache hab ich immer noch. :cry: Nun häng ich noch bei Inhalt der Tabs. createDhlTabPanel: function() { return Ext.create('Ext.container.Container', { title: 'DHL', html: 'Dies ist ein Plain Text damit das Tab einen Inhalt besitzt und angezeigt wird', //items: [hier kannst du weitere Elemente hinzufügen (wie Grids, etc)] }); } Damit geb ich ja nur den HTML Text aus. Ich möcht eine aber eine separate Datei aufrufen, in der ich meinen Inhalt habe. Dort soll z.B. die Trackingnummer aufgerufen werden und in einen Link gepackt werden der dann ein separates Fenster öffnet. Hat mal jemand ne richting für mich, ist mein erstes Backen Plugin.

Hi, also ich bin nun kein Programmierer…aber kann es sein, dass in diesem Tutorial genau das gemacht wird, was du möchtest? http://wiki.shopware.de/Fortgeschritten … 1_871.html Kurzbeschreibung: Dieses Tutorial veranschaulicht die Erweiterung des Artikelmodules um einen Zusätzlichen Tabreiter Vielleicht hilft dir das weiter… Gruß Patrick

Das TUT ist mir bekannt, macht aber nicht das was ich brauche. Leider kann man halt nicht alle dinge ableiten. Jedenfalls ich nicht…