Hallo liebe Community, ich würde gerne weitere Attribute im Fenster des Hersteller hinzufügen. Als Beispiel habe ich mir das Tutorial Schuhgrößen Erweiterung als Hilfe genommen. Nun meine Frage an euch, gibt es die Möglichkeit auf Felder beim Hersteller hinzuzufügen. Ich habe bereits das Forum durchsucht und Tante-Google gefragt, bin jedoch zu keine passendem Ergebnis gekommen. Vielen Dank und ich bin gespannt auf eure Rückmeldungen Viele Grüße
Ähnlich wie im Schuhgrößen-Plugin, muss man: 1. Bootstrap.php - man muss diese Attribute zuerst hinzufügen (addAttribute()) - dann Event aufzeichnen: $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Backend\_Supplier', 'onBackendSupplierPostDispatch' );
- die Funktion onBackendSupplierPostDispatch() ähnlich wie bei den Schuhgrößen schreiben, z.B. so: public function onBackendSupplierPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $this-\>Application()-\>Snippets()-\>addConfigDir( $this-\>Path() . 'Snippets/' ); $args-\>getSubject()-\>View()-\>addTemplateDir( $this-\>Path() . 'Views/' ); if($args-\>getRequest()-\>getActionName() === 'load') { $view-\>extendsTemplate( 'backend/supplier/model/PLUGINNAME/attribute.js' ); $view-\>extendsTemplate( 'backend/supplier/view/main/PLUGINNAME/create.js' ); $view-\>extendsTemplate( 'backend/supplier/view/main/PLUGINNAME/edit.js' ); } if($args-\>getRequest()-\>getActionName() === 'index') { $view-\>extendsTemplate('backend/supplier/app.js'); } }
2. Und dann diese 4 o.g. js-Dateien und eine weitere mit den Felder (z.B. add_fields.js) gestalten: attribute.js //{block name="backend/supplier/model/attribute/fields" append} // Hier alle Atribute beschreiben in der Form { name:..., type:..., defaultValue:... }, //{/block}
add_fields.js Ext.define('Shopware.apps.Supplier.view.main.PLUGINNAME.AddFields', { extend: 'Ext.form.FieldSet', // Hier Layout-Eigenschaften beschreiben, z.B. layout: 'anchor', collapsible: true, etc... initComponent: function () { var me = this; me.title = 'My add fields'; me.items = me.createElements(); me.callParent(arguments); }, createElements: function () { // Hier Container und Felder beschreiben } });
create.js //{block name="backend/supplier/view/main/create" append} Ext.define('Shopware.apps.Supplier.view.main.PLUGINNAME.Create', { override: 'Shopware.apps.Supplier.view.main.Create', getFormPanel: function() { var me = this; var infoForm = me.callParent(arguments); var addFields = Ext.create('Shopware.apps.Supplier.view.main.PLUGINNAME.AddFields'); infoForm.insert(1, addFields); return infoForm; } }); //{/block}
Ähnlich auch edit.js //{block name="backend/supplier/view/main/edit" append} Ext.define('Shopware.apps.Supplier.view.main.PLUGINNAME.Edit', { override: 'Shopware.apps.Supplier.view.main.Edit', getInfoForm: function() { var me = this; var infoForm = me.callParent(arguments); var addFields = Ext.create('Shopware.apps.Supplier.view.main.PLUGINNAME.AddFields'); infoForm.insert(1, addFields); return infoForm; } }); //{/block}
Und zum Schluss das ganze in die Plugin-App einfügen app.js //{block name="backend/supplier/app" append} //{include file="backend/supplier/view/main/PLUGINNAME/create.js"} //{include file="backend/supplier/view/main/PLUGINNAME/edit.js"} //{include file="backend/supplier/view/main/PLUGINNAME/add\_fields.js" } //{/block}
So bekommen die Anlegen- und Bearbeiten-Formulare die zusätzlichen Attribut-Felder, die auch in der DB gespeichert werden. Wenn Du diese Attribute noch in der Hersteller-Liste zeigen willst, dann erstelle noch list.js (view und model) analog zum Schuhgrößen-Beispiel (und füge der Bootstrap.php und der app.js hinzu)
Hallo kube, vielen Dank für den ausführlichen Post. Ich werde mich gleich mal daran setzen und es mit den von dir gezeigten Beispielen versuchen. Sobald ich einen neuen Stand habe, werde ich mich noch einmal hier zurück melden. Viele Grüße Nachtrag #001 Vielen lieben Dank kube. Ich habe soeben weitere Attribute an einen Hersteller packen können. :thumbup:
Tut mir leid, diesen etwas älteren Post wieder auszugraben aber vielleicht kann mir jemand weiterhelfen, denn ich steh gerade mit beiden Beinen auf dem Schlauch. Ich versuche ebenfalls den Hersteller im Backend um Attribute zu erweitern. Edit und Create funktionieren einwandfrei und die Werte werden auch richtig in der DB hinterlegt. Allerdings werden mir die neuen Attribute nicht in der Hersteller Ansicht im Backend angezeigt. Die list.js: //{block name="backend/supplier/view/main/list" append} Ext.define('Shopware.apps.Supplier.view.main.supplier\_preferences.List', { override: 'Shopware.apps.Supplier.view.main.List', getColumns: function() { var me = this; var columns = me.callOverridden(arguments); var columnType= { header: '{s name=preferences/type}Type{/s}', dataIndex:'gbiSupplierPreferencesType', flex: 1 }; var columnLocation = { header: '{s name=preferences/location}Location{/s}', dataIndex:'gbiSupplierPreferencesLocation', flex: 1 }; return Ext.Array.insert(columns, 3, [columnType, columnLocation]); } }); //{/block}
Eine Idee was ich falsch mache?
Von welcher SW Version ist denn diese list.js ? Hab das mal mit unseren Daten verglichen, aber da gibt es keine Function getColumns().
Die list.js ist aus dem Schuhgrößen Beispiel, habe alle Files analog zu dem Beispiel erstellt. Ich bin nur irritiert, da der Rest im Backend und der Datenbank einwandfrei funktioniert, nur eben die Listenansicht die Attribute nicht übernimmt.
Zwar schon älter das Thema, aber vielleicht kann mir jemand helfen.
Ich habe das Herstellermodul um ein paar eigene Attributsfelder (Freitextfelder) erweitert.
Funktioniert soweit auch super, allerdings gibt es Probleme ab Shopware 5.2, da man sich hier selbst um das Speichern der Attribute kümmern muss.
Ich erweitere folgende Methode um meine Felder zu speichern:
onSupplierSave: function(btn) {
var me = this,
win = btn.up('window'),
form = win.down('form'),
formBasis = form.getForm(),
attrField1 = form .down('textfield[name=attrField1]'),
attrField2 = form .down('textfield[name=attrField2]'),
record = form.getRecord();
if (!(record instanceof Ext.data.Model)){
record = Ext.create('Shopware.apps.Supplier.model.Supplier');
}
formBasis.updateRecord(record);
if (formBasis.isValid()) {
Ext.Ajax.request({
method: 'POST',
url: '{url controller=AttributeData action=saveData}',
params: {
_foreignKey: record.getId(),
_table: 's_articles_supplier_attributes',
__attribute_attr_field_1: attrField1.getValue(),
__attribute_attr_field_2: attrField2.getValue()
}
});
}
me.callParent(arguments);
}
Problem ist hier, ich komme beim Anlegen eines Herstellers nicht an die record.id.
Und ich glaube, das ist auch nicht wirklich möglich, aber vielleicht weiß ja hier jemand was
Zwar schon älter das Thema, aber vielleicht kann mir jemand helfen.
Ich habe das Herstellermodul um ein paar eigene Attributsfelder (Freitextfelder) erweitert.
Funktioniert soweit auch super, allerdings gibt es Probleme ab Shopware 5.2, da man sich hier selbst um das Speichern der Attribute kümmern muss.Ich erweitere folgende Methode um meine Felder zu speichern:
onSupplierSave: function(btn) {
var me = this,
win = btn.up(‚window‘),
form = win.down(‚form‘),
formBasis = form.getForm(),
attrField1 = form .down(‚textfield[name=attrField1]‘),
attrField2 = form .down(‚textfield[name=attrField2]‘),
record = form.getRecord();if (!(record instanceof Ext.data.Model)){
record = Ext.create(‚Shopware.apps.Supplier.model.Supplier‘);
}formBasis.updateRecord(record);
if (formBasis.isValid()) {
Ext.Ajax.request({
method: ‚POST‘,
url: ‚{url controller=AttributeData action=saveData}‘,
params: {
_foreignKey: record.getId(),
_table: ‚s_articles_supplier_attributes‘,
__attribute_attr_field_1: attrField1.getValue(),
__attribute_attr_field_2: attrField2.getValue()
}
});
}me.callParent(arguments);
}Problem ist hier, ich komme beim Anlegen eines Herstellers nicht an die record.id.
Und ich glaube, das ist auch nicht wirklich möglich, aber vielleicht weiß ja hier jemand was
Hallo,
wie sah denn deine Lösung bis < 5.2 aus?
Warum nutzt du nicht einfach das Freitext - Fieldset von Shopware für deine zusätzlichen Felder?
Beste Grüße
Sebastian
Guten Morgen,
bis 5.1.x hat das Laden und Speichern Shopware übernommen.
Man brauchte seinem Feld nur folgenden Namen geben:
name: 'attribute[attrField1]'
Ich möchte meine Felder in einem extra Fieldset haben und nicht bei allen anderen Feldern im Freitext Fieldset.
Gruß
Marcel
Niemand eine Idee?
Ein Event durch Shopware wäre an dieser Stelle schön