Hallo erstmal, also meine frage ist wie kann ich in artikeldetails einen weiteren Tab hinzufügen, ich habe über das Buch(Shopware Das Handbuch für Entwickler) herrausgefunden das man mit der funktion getTabs einen weiteren Tab im Kunden modul erzeugen kann, aber diese funktion ist für die Artikeldetails nicht vorhanden nun meine frage wie wäre es dann möglich?
//{block name="backend/customer/view/detail/window" append}
Ext.define('Shopware.apps.CustomerExtension.view.detail.Window', {
override: 'Shopware.apps.Customer.view.detail.Window',
getTabs: function () {
var me = this,
tabs = me.callParent(arguments);
tabs.push({
xtype: 'my-customer-tab'
});
return tabs;
}
});
//{/block}
Das ist laut dem buch die zweite möglichkeit einen Tab hinzuzufügen aber ich verstehe nicht auf welchen blocknamen die zurückgreifen.
//{block name="backend/customer_extension/view/detail/window"}
Ext.define('Shopware.apps.CustomerExtension.view.detail.Container', {
extend: 'Ext.panel.Panel',
alias: 'widget.my-customer-tab',
title: 'My new tab',
cls: 'shopware-form',
initComponent: function () {
var me = this;
me.items = me.createContainer();
me.callParent(arguments);
},
createContainer: function () {
var me = this;
return [{
xtype: 'fieldset',
margin: 10,
title: 'My fieldset',
items: [{
xtype: 'textfield',
fieldLabel: 'Some text'
}, {
xtype: 'datefield',
fieldLabel: 'Some date'
}]
}];
}
});
//{/block}
Schau dir mal die Datei shopware/themes/Backend/Extjs/backend/article/view/detail/window.js an. Da gibt es folgende Methode:
/**
* 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() {
.....
}
Diese müsstest du dann überschreiben wie in deinen Buch beschrieben:
//{block name="backend/article/view/detail/window"}
Ext.override(Ext.container.DockingContainer, {
dockedItems: []
});
Ext.define('Shopware.apps.Article.view.detail.Window', {
// Möglichkeit 1
initComponent:function () {
var me = this;
me.registerAdditionalTab({ // siehe Methode original js Datei
title: 'Test-Tab',
tabConfig: { disabled: false },
contentFn: me.contentFn });
},
contentFn: function(article, stores, eOpts) {
// Do stuff
eOpts.tab.add({ xtype: 'panel', html: 'Tab-Content' });
},
/**
* Möglichkeit 2
* Override creatMainTabPanel method and add your custom tab here.
* To extend the tab panel this function can be override.
*
* @return Ext.tab.Panel
*/
createMainTabPanel: function() {
var me = this;
// Call parent
me.callParent(arguments);
// füge hier deinen eigenen Tab hinzu Siehe auch hier für andere Varianten an Tabs in
// original Methode
me.additionalTab = Ext.create('Ext.container.Container', {
title: "Zusätzlicher Tab",
name: 'additional-tab',
cls: Ext.baseCSSPrefix + 'additional-tab-container'
});
}
});
//{/block}
Danke erstmal, ich habe das meiner window.js hinzugefügt und mir das nochmal angesehen, da kommt mir aber die Frage auf überschreibe ich mit diesem Code das modul oder Erweiter ich es dann um den zuzätlichen Tab, weil bei mir kommt immer der Selbe Fehler…
Was mache ich falsch, also ich lade den subscriber mittels der servcis.xml
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatchSecure_Backend_Article' => 'onArticlePostDispatch'
];
}
public function onArticlePostDispatch(Enlight_Event_EventArgs $args)
{
$args->getSubject()->View()->addTemplateDir(
$this->Path() . 'views/'
);
//Hier lädst du alle Javascript Dateien die ein Override enthalten.
if ($args->getRequest()->getActionName() == 'load') {
$args->getSubject()->View()->extendsTemplate(
'backend/tjl_artikel_ausleihe/view/detail/window.js'
);
}
//Hier erweiterst du die APP.JS um eigene Komponenten (Models, Views, Stores, Controllers) hinzuzufügen
if ($args->getRequest()->getActionName() == 'index') {
$args->getSubject()->View()->extendsTemplate(
'backend/tjl_artikel_ausleihe/app.js'
);
}
}
}
Dann wird die Window.js geladen
//{block name="backend/article/view/detail/window" append}
//{$smarty.block.parent}
Ext.define('Shopware.apps.Article.view.detail.Window', {
override: 'Shopware.apps.Article.view.detail.Window',
// Möglichkeit 1
initComponent: function () {
var me = this;
me.registerAdditionalTab({ // siehe Methode original js Datei
title: 'Test-Tab',
tabConfig: {disabled: false},
contentFn: function (article, stores, eOpts) {
// Do stuff
eOpts.tab.add({xtype: 'panel', html: 'Tab-Content'});
}
});
}
});
//{/block}
Den subscriber per service.xml zu laden ist schon mal sehr gut. Wie schaut denn deine Plugin ordernerstruktur aus.
$args->getSubject()->View()->addTemplateDir(
$this->Path() . 'Resources/views'
);
//Hier lädst du alle Javascript Dateien die ein Override enthalten.
if ($args->getRequest()->getActionName() == 'load') {
$args->getSubject()->View()->extendsTemplate(
'backend/tjl_artikel_ausleihe/view/detail/window.js'
);
}
//Hier erweiterst du die APP.JS um eigene Komponenten (Models, Views, Stores, Controllers) hinzuzufügen
if ($args->getRequest()->getActionName() == 'index') {
$args->getSubject()->View()->extendsTemplate(
'backend/tjl_artikel_ausleihe/app.js'
);
}
Ändere die Pluginordernstuktur für die Views mal zu der folgenden
- Resources
- views
1. backend
- tj1_artikel_ausleihe
Schau dir auch mal die Dokumentation https://developers.shopware.com/developers-guide/backend-extension/ Da kannst du dir ganz unten auch das Beispiel Plugin (downloaded here) herunterladen. Dort kannst du dir abschauen wie die Struktur aufgebaut ist.
Wenn alle Stricke reißen gibts da zur Not auch Plugins zu im Store.