Ich möchte gerne in ein selbst erstelltes Plugin Formular einen File Upload integrieren. Das entsprechende Upload Feld (xtype: ‘filefield’) wird auch angezeigt - allerdings bleibt das $_FILE Array beim Absenden immer leer und es werden nur die POST Parameter des Formulars übermittelt. Wäre für Hinweise u. Lösungsvorschläge dankbar.
Wenn du den fehlerhaften Code nicht postest, kann man dir leider auch nicht weiterhelfen …
hier mal mein aktueller Code Model: Ext.define('Shopware.apps.RtrauTest.model.Test', { extend: 'Shopware.data.Model', configure: function () { return { controller: 'RtrauTest', detail: 'Shopware.apps.RtrauTest.view.detail.Test' }; }, fields: [{ name: 'id', type: 'int', useNull: true }, { name: 'active', type: 'boolean' }, { name: 'fileupload', type: 'string' }, { name: 'sort', type: 'int' },], });
Controller (main.js) Ext.define('Shopware.apps.RtrauTest.controller.Main', { extend: 'Enlight.app.Controller', init: function () { var me = this; me.mainWindow = me.getView('list.Window').create({ }).show(); me.callParent(arguments); } });
Detail View Ext.define('Shopware.apps.RtrauTest.view.detail.Test', { extend: 'Shopware.model.Container', padding: 20, initComponent: function() { var me = this; me.callParent(arguments); }, configure: function () { return { controller: 'RtrauTest', fieldSets: [{ title: 'TestDetails', fileUpload: true, layout: 'fit', fields: { active: {}, fileupload: { xtype: 'filefield', emptyText: 'Upload', buttonText: 'Upload', name: 'test', fieldLabel: 'File', allowBlank: false, buttonConfig: { cls: 'small secondary' } }, sort: { fieldLabel: 'Sortiernummer' }, } }] }; } });
Hat hier jemand eine Idee warum das File nicht übermittelt wird bzw. das $_FILES Array nicht befüllt ist? Danke schonmal im Voraus!
Hört sich für mich so an, als wäre enctype=„multipart/form-data“ im Formular nicht gesetzt.
Ja das dürfte der Grund sein. Im Anfrage Header wird der falsche Content Type gesendet: Content-Type application/json Die Frage ist nur wie kann ich das konfigurieren??? fileUpload: true ist bereits gesetzt u. explizit den enctype angeben hat auch nicht funktioniert.
Niemand eine Idee??
Da ich noch immer keine Lösung für dieses Problem gefunden habe möchte ich das Thema abermals aufwärmen. Gibt es hier niemanden der im Shopware.model.Container ein fileupload Field eingebaut hat bzw. ist das überhaupt möglich?
Gibt es hier inzwischen eine Lösung? Ich stehe vor dem selben Problem
Ich hab leider noch keine Lösung gefunden u. es vorerst über die Media Selection umgesetzt (xtype : 'mediafield). Vielleicht fällt ja noch wem etwas ein dazu?
Danke für die Info. Damit kann ich auch gut Leben. Den xtype:‚mediaField‘ kannte ich noch nicht. Wie kann ich hier noch eingrenzen, dass ich z.B. nur eine bestimmte Gruppe angezeigt bekomme? Also z.B. nur die Bilder unter der Gruppe Artikel?
Hallo, ich bin auch gerade mit diesem mediafield am verzweifeln. Wie hast du das zum laufen bekommen? Welche typen muss ich dafür in der Datenbank anlegen? bzw wie in den Models konfigurieren?
Hallo liebe Shopware Community, ich entwickle gerade ein Backend Plugin und habe ebenfalls ein Problem beim Fileupload mittel der ExtJS Komponente fileuploadfield. Wenn ich die Request POST Daten im Firebug analysiere finde ich folgendes: Content-Type: multipart/form-data; boundary=---------------------------2082051351907 Content-Length: 347 -----------------------------2082051351907 Content-Disposition: form-data; name="decorcolors-inputEl"; filename="testfile.csv" Content-Type: application/csv
Die Daten werden also als Content-Type: multibyte/form-data übertragen, hier sollte das Problem also nicht liegen. Vielleicht kann mir ja jemand noch die ein oder andere Fehlerquelle, die beim Arbeiten mit ExtJS gerne gemacht wird, noch sagen. Danke
Ich verwende folgenden code ohne Probleme: ExtJS: // getImportForm: function() { // var me = this; // me.importType = Ext.create( "Ext.form.field.ComboBox", { name: "importType", valueField: "key", displayField: "name", mode: "local", emptyText: "Daten wählen...", fieldLabel: "Daten", allowBlank: false, triggerAction: "all", editable: true, anchor: '100%', labelWidth: 150, store: Ext.create( "Ext.data.Store", { fields: ["key", "name"], data: [{ key: "categories", name: "Kategorien" }, { key: "snippets", name: "Textbausteine" }, { key: "propertiesGroups", name: "Artikel Eigenschaften Gruppen" }, { key: "propertiesValues", name: "Artikel Eigenschaften Werte" },] } ), } ); // me.importFile = Ext.create( "Ext.form.field.File", { emptyText: "Datei wählen...", buttonText: "Wählen", name: 'importFile', fieldLabel: 'Datei', allowBlank: false, anchor: '100%', labelWidth: 150 } ); // var toolbar = Ext.create( "Ext.toolbar.Toolbar", { dock: 'bottom', cls: 'shopware-toolbar', items: ["-\>", { text: "Start", cls: 'primary', formBind: true, handler: function () { // get the form var form = this.up( "form" ).getForm(); // valid form? if ( !form.isValid() ) // nope return; // let smarty parse the url var url = "{url module='backend' controller='AtsdTranslations' action='import' }"; // and submit the form form.submit( { url: url, waitMsg: "Bitte warten...", success: function ( fp, o ) { Ext.Msg.alert( "Import erfolgreich", o.result.message ); }, failure: function ( fp, o ) { Ext.Msg.alert( "Import abgebrochen", o.result.message ); } } ); } }] } ); // return a form panel return Ext.create( "Ext.form.Panel", { title: "Import", bodyPadding: 5, layout: "anchor", dockedItems: toolbar, items: [me.importType, me.importFile] } ); }
Backend controller: /\*\* \* ... \* \* @return void \*/ public function importAction() { // disable json renderer $this-\>Front()-\>Plugins()-\>Json()-\>setRenderer( false ); // if ( $\_FILES['importFile']['error'] !== UPLOAD\_ERR\_OK ) { // echo json\_encode( array( 'success' =\> false, 'message' =\> "Could not upload file", )); // done return; } // und so weiter }
Viele Grüße