Backend-Komponente mit Combobox erstellen

Hallo, 

ich versuche seit einem Tag verzweifelt eine simple bescheuerte Combobox zu erstellen in einem Einkaufswelt-Element… aber wie zur Hölle krieg ich einen “Store” ?

Ich mache das in meiner Basisklasse des Plugins im install()

 $component-\>createComboBoxField(['name' =\> 'target', 'fieldLabel' =\> 'Link-Ziel', 'allowBlank' =\> true, 'store' =\> '???']);

hab dort anfangs einfach ein Array mit meinen Daten angegeben, aber das führt zu keiner sichtbaren Anzeige…

array(

    [“test” => “Testwert”],

    [test2" => “Anderer Wert”]

);

 

Das Internet ist leider spährlich gesäht mit hilfreichen Infos…

Die Doku sagt:

Define the class name of a store you want to use for the combobox. It can either be one of the Shopware base stores in the Shopware.apps.Base.store namespace, or a custom store you will provide in your own ExtJS component for the element.

Aber was soll mir das sagen? Wo definiere ich sowas? Und warum in ExtJS wenn ich mein Element in PHP erzeuge?

 

viele Grüße

Eine Combobox stellt immer eine Verknüpfung zu einem bestehenden Model her. Du willst eigtl eine Selectbox. Aber die gibt es scheinbar nicht in den EKWs?!? Dann musst du dir für deine Werte wohl ein eigenes Model samt Store anlegen. Wie man einen Store anglegt weis ich allerdings leider auch nicht. Ich meine dieses ganze ExtJS Zeug :wink:

Ich hätte gern so eine Auswahl wie im Banner-Element der Einkaufswelt.

Link-Ziel (_parent oder _blank) - Das is doch kein Model… das sind simple Auswahlwerte oder?

Ja, das ist ne simple Auswahl und kein Model. Aber Software unterstützt sowas scheinbar nicht. Ich hab in der Doku jedenfalls nichts gefunden das kann.

Sopware macht das selber in einem ihrer Plugins. In SwagEmotionAdvanced. Sie benutzen auch eine Combobox und erstellen dann per JS einen Store. Kannst du dir ja mal anschauen falls du Zugriff auf den Quellcode hast. Ich bin mir nicht sicher ob ich den hier posten darf. Ich versuchs trotzdem mal :wink:

engine/Shopware/Plugins/Community/Frontend/SwagEmotionAdvanced/Views/emotion_components/backend/sideview-element.js 

//{namespace name="backend/swag_emotion_advanced/view/main"}
//{block name=backend/swag_emotion_advanced/view/components/side_view}
Ext.define('Shopware.apps.Emotion.view.components.SideView', {
    extend: 'Shopware.apps.Emotion.view.components.Base',
    alias: 'widget.emotion-sideview-widget',

[...]

    bindStores: function() {
        var me = this,
            fields = me.customFields;

[...]
        fields.size.bindStore(me.getSizeStore());
[...]
        return true;
    },

[...]

    getSizeStore: function() {
        return Ext.create('Ext.data.Store', {
            fields: ['value', 'display'],
            data: [
                { value: 'fullsize', display: '{s name="store/display/size/fullsize"}{/s}' },
                { value: 'halfsize', display: '{s name="store/display/size/halfsize"}{/s}' }
            ]
        });
    },

[...]

 

Hallo,

eine Liste aller möglichen Typen gibt es hier: Custom shopping world elements . Das Auswahlfeld, aber auch das Combofeld, gibt es nur über einen eigenen Store. In deinem Fall reicht aber wahrscheinlich auch ein normales Checkboxfeld aus.

Beste Grüße

Sebastian

@arnebecker‍

das mit dem bindStores funktioniert bei mir nicht irgendwie… bindStores wird nie aufgerufen…

aber man kann im der Function createFormElements für das entsprechende Item .store aufrufen…

 

Hallo,

hier hast du ein funktionierendes Beispiel: https://gist.github.com/shyim/9067b1405087c6246516b98aa9a40c5c .

Beste Grüße

Sebastian

1 Like