Guten Tag Ich bin neu im Shopware-Business. Ich habe bereits ein Plugin erstellt, das auf die Datenbank s_articles und s_articles_attribute zugreift und Daten ändern kann. Dazu habe ich ein neues Fenster kreiert, welches meine Daten auslest und speichert. Nun aber möchte ich ein eigenes Tab in der Artikeldetails-Seite. Ich habe mich bereits von diesem Forumbeitrag inspirieren lassen. In diesem Beitrag wird auch dieser Link erwähnt. Da ich noch nicht viel mit Shopware gemacht habe, fehlt mir die Information damit ich die erwähnten Code-schnipsel an den korrekten Stellen einbinden kann. Meine Bitte an Sie: Können Sie mir bitte eine kurze Anleitung geben welches mir weiterhelfen kann? EDIT: Dies betrifft das Backend Danke vielmals
Eine noch ausführlichere Anleitung als das bebilderte wiki Tutorial wird es wohl kaum geben… Wenn du das noch nicht verstehst, dann solltest du weiter vorne anfangen: http://community.shopware.com/Grundlagen_cat_866.html Viele Grüße
[quote=“Tanny”]https://blog.hostianer.de/shopware5-eigene-tabs-in-der-detail-ansicht/[/quote] [quote=“Aquatuning GmbH”]Eine noch ausführlichere Anleitung als das bebilderte wiki Tutorial wird es wohl kaum geben… Wenn du das noch nicht verstehst, dann solltest du weiter vorne anfangen: http://community.shopware.com/Grundlagen_cat_866.html Viele Grüße[/quote] Danke für die schnellen Antworten Ich sehe gerade, dass ich nicht ausführlich genug war. Ich möchte gerne im BACKEND ein eigenes Tab anbringen.
Hallo Ich bin nun schon viel weiter gekommen. Ich habe nun folgende Schritte gemacht: Bootstrap.php //Event subscriben $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article', 'onEnlightControllerActionPostDispatchBackendArticle' ); //Meine Views registrieren public function onEnlightControllerActionPostDispatchBackendArticle(Enlight\_Event\_EventArgs $arguments) { $arguments-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); //Hier lädst du alle Javascript Dateien die ein Override enthalten. if ($arguments-\>getRequest()-\>getActionName() === 'load') { $arguments-\>getSubject()-\>View()-\>extendsTemplate( 'backend/article/view/detail/my\_window.js' ); } //Hier erweiterst du die APP.JS um eigene Komponenten (Models, Views, Stores, Controllers) hinzuzufügen if ($arguments-\>getRequest()-\>getActionName() === 'index') { $arguments-\>getSubject()-\>View()-\>extendsTemplate( 'backend/article/my\_app.js' ); } }
my_window.js //{block name="backend/article/view/detail/window" append} Ext.define('Shopware.apps.Article.view.detail.Window', { override:'Shopware.apps.Article.view.detail.Window', /\*\* \* Creates the main tab panel which displays the different tabs for the article sections. \* To extend the tab panel this function can be override. \* \* @return Ext.tab.Panel \*/ createMainTabPanel: function() { var me = this; var formTab = me.callParent(arguments); //Der Container für das Tab =\> Der Tab selber me.testTab = Ext.create('Ext.container.Container', { title: 'Test Tab', disabled: true, name: 'test-tab', layout: 'border' }); me.mainTab.insert(me.testTab); return formTab; }, //Der Inhalt des Tabs createTestContent: function() { var me = this; me.testContent = Ext.create('Shopware.apps.Article.view.test.Test', { height: '100%', width: '100%', autoScroll:true, margin: 10 }); return me.testContent; }, onStoresLoaded: function(article, stores) { var me = this; me.callParent(arguments); me.testTab.add(me.createKmudoContent()); me.testTab.setDisabled(false); }, }); //{/block}
test.js //{namespace name=backend/article/view/main} //{block name="backend/article/view/test/test"} Ext.define('Shopware.apps.Article.view.test.Test', { /\*\* \* Define that the category drop zone is an extension of the Ext.panel.Panel \* @string \*/ extend:'Ext.form.FieldSet', /\*\* \* List of short aliases for class names. Most useful for defining xtypes for widgets. \* @string \*/ alias:'widget.article-test-test', /\*\* \* Set css class for this component \* @string \*/ cls: Ext.baseCSSPrefix + 'article-test-test', /\*\* \* Layout for the component \*/ layout: 'anchor', /\*\* \* Defaults for the panel items \* @object \*/ defaults: { anchor: '100%' }, /\*\* \* The initComponent template method is an important initialization step for a Component. \* It is intended to be implemented by each subclass of Ext.Component to provide any needed constructor logic. \* The initComponent method of the class being created is called first, \* with each initComponent method up the hierarchy to Ext.Component being called thereafter. \* This makes it easy to implement and, if needed, override the constructor logic of the Component at any step in the hierarchy. \* The initComponent method must contain a call to callParent in order to ensure that the parent class' initComponent method is also called. \* \* @return void \*/ initComponent:function () { var me = this; me.items = me.createContent(); me.callParent(arguments); }, /\*\* \* Creates the content \* @return Ext.container.Container \*/ createContent: function() { var me = this; return Ext.create('Ext.container.Container', { anchor: '100%', focusable: false, margin: 10, items: [{ xtype: 'checkbox', name: 'mein\_erstes\_feld', fieldLabel: 'Sehenswert', boxLabel: 'Ob Artikel sehenswert ist', inputValue: true, uncheckedValue:false }, { xtype: 'textfield', name: 'mein\_zweites\_feld', allowBlank: false, fieldLabel: 'Begründung', supportText: 'Warum denn?' }] }); } }); //{/block}
Mit diesen Anpassungen hier hat man ein neues Tab und Inhalt. Nun jedoch meine Frage: Ich habe in der Datenbank die Felder ‚mein_erstes_feld‘ und ‚mein_zweites_feld‘ und möchte diese in meinem Tab auslesen und speichern können. Ich weiss, dass ich im File my_app.js die Views, Controller, Store und Model einbinden muss, aber diese Version hier funktioniert nicht… (Alle gefundenen Beispiele Shopware Version 4) //{block name="backend/article/application" append} //{include file="backend/article/controller/test.js"} //{include file="backend/article/model/test.js"} //{include file="backend/article/store/test.js"} //{include file="backend/article/view/test/test.js"} //{/block}
Was ist der korrekte Weg im Shopware 5? Und wie muss der Controller, Model und Store aussehen, dass ich die Felder von s_articles_attributes auslesen kann? Vielen Dank
Hallo Ich bin wieder einen Schritt weiter gekommen, benötige aber immer noch Hilfe. Wenn ich im my_app.js wie oben die Files “einfüge” werden sie geladen, aber an der falschen Stelle. Wenn ich das original app.js nehme und dies gänzlich überschreibe und mein View, Store und Controller in die gegebenen Felder hinzufüge werden sie an den korrekten Stellen geladen. Das aber kann ja nicht der Weg sein, wenn man Plugins entwickelt… Beim Model habe ich nun attribute.js folgendermassen appended: //{block name="backend/article/model/attribute/fields" append} { name : 'mein\_erstes\_feld', type: 'boolean' }, { name : 'mein\_zweites\_feld', type: 'string' }, //{/block}
Wie muss ich nun den Controller, View und Store einrichten damit mein Tab die Daten erhält?