Wie eigene store & model für Plugin config.xml laden?

Tagchen,

ich bin ein wenig mit meinen ersten kleinen ExtJS-Versuchen am hadern.
Ich möchte für eine Plugin-Konfiguration eine Combo für die Auswahl von Einkaufswelten verwenden, einen fertigen Store gibt es in base leider nicht.
(Bisher Kommata getrennte IDs im Textfeld).
Dazu habe ich mir einen kleines Model und einen kleinen Store gebastelt, was an sich auch funktioniert, ja wenn…

…ich denn wüsste, wie ich meine Model- und den Store-JS dem Backend, bwz Plugin-Manager (?)  bekannt machen soll  Wink

Versuch: Enlight_Controller_Action_PostDispatchSecure_Backend_Index subscriben und darin im Theme eine Javascript ins Theme extenden, in der wiederum extende ich {block name=“backend/index/application”} mit zwei include für die JS-Dateien (im Forum über den Weg gestolpert)

Hat beim Rumtesten vor zwei Wochen noch gut funktioniert. Nun wollte ich das vom Test-Plugin ins Richtige übernehmen. Geht wieder nicht - und im Test-Plugin geht es auch nicht mehr.

Also Frage vom „Blondie”: Wie melde ich für die Verwendung in der config.xml den Store und das Model im Backend an?

Glaube das ist ein Henne/Ei Problem, wenn ich mich richtig erinnere. Wenn du das Plugin installierst, ist es noch nicht aktiv, daher wird deine Logik nicht ausgeführt und auch dein Store nicht geladen. Aber gebe das mal den Kollegen, vielleicht können die das etwas ausführlicher beschreiben.

1 „Gefällt mir“

Knallen mit einen 404 auf Autoload tuts immer beim Aktivieren, passt mit der Henne-Ei  Wink
Dennoch hat es irgendwann mal irgendwie funktioniert - und einmal war dann wohl das Ei gelegt.
Wäre toll, wenn da einer helfen könnte, hat aber keine Eile.

Wahlweise würde es auch helfen, wenn es einen basis-store für Einkaufswelten im Core gäbe - ggf. mal über ein Ticket nachdenken.

Edit:
Ggf. über ein zusätzliches “Service-Plugin”, welches nur die JS erweitert aber selber nicht verwendet. Damit stünde es einem später zugefügtem Plugin zur Verfügung *Kanonen auf Spatzen schiessen*

kannst du mit einem kleinen Trick machen. 

 

           ...

 

Du erstellst und lädst den Store on the fly… So hast du das problem nicht das der store irgendo hinterlegt werden muss

2 „Gefällt mir“

Werde ich morgen gleich mal ausprobieren. Danke erst mal.

Mich hauts weg. Es funktioniert  Wink
Als Controller/Action nehme ich übrigens den SW backend/emotion/list
Ist zwar erstmal mehrfach redundant, da ich gleich mehrere Combo-Felder benötige, aber darüber mache ich mir später Gedanken.
Auf CDATA und Inline wäre ich echt nie gekommen.

DANKE  Wink

Edit: Im ersten Combo wie oben definieren und in den weiteren Combos einfach den Store aus CDATA namentlich einbinden, SCHEINT auch zu funktionieren.

 

So, jetzt muss ich das doch noch einmal ausgraben.

Baue ich es wie oben ein, wird nicht die ID, sondern der Name der Auswahl in der Config abgelegt.
Verwende ich den einmal definierten Store ein weiteres Mal in der Config, werden für diese Combo dann die IDs und nicht die Namen abgelegt, so wie es sein soll.
Ich bräuchte aber generell die ID  Wink
Definiere ich aber auch im zweiten Element den Store (neuer Name) inline neu, habe ich auch hier den Namen und nicht die ID
*Konfus das Ganze*

Edit: Selbst wenn ich in der Datenbank den Wert vom zweiten Element 1:1 in das erste Element übertrage, liefert der ConfigReader für Element 1 (CDATA) die Namen der Auswahl.
Offensichtlich scheitert der Configreader später, weil er kein Store zum CDATA-Element hat ?!?

hmm… Ich habe den hack bisher nur für Kundengruppen benötigt… Da is “EK” name und key, also das gleiche… Werde ich jetzt mal gegentesten und berichten

 

Edit:

So… ich habe mal ein Ticket angelegt: SW-22520 und einen PR erstellt. Ich hoffe das kommt noch ins nächste Release. Es ist tatsächlich so das das " valueField" hart auf das " displayField" gesetzt wird wenn der store so erstellt wird… Ich habe nun ein flag eingebaut " isCustomStore" um das zu umgehen. Das hilft dir also leider nicht sofort… Du könntest den fix ggf. schon bei dir einbauen

in der Datei: /themes/Backend/ExtJs/backend/base/component/element/select.js nach dem if 

if (typeof(me.store) == 'string' && me.store.indexOf('new ') !== -1) {

suchen.

in diesem if wird das valueField überschrieben… Das könntest du schon durch folgendes ersetzen:

if(!me.isCustomStore) {
    me.valueField = me.displayField;
}

Das ganze kann dann wie folgt in der config.xml genutzt werden.

So sollte es dann zukünftig gehen

        id
        name
        true

 

2 „Gefällt mir“

Danke,

ich bin jetzt aber erstmal zurück auf Textfeld mit “IDs durch Kommatas getrennt und explode im event” … weil:
Der Optionssatz wird nur aus der DB geladen, wenn die xml gelesen wird, als Install oder Reinstall.
Die Plugin-Config ist dafür einfach nicht geeignet.
Das Problem bei Einkaufswelten sind halt die “IDs” - die bekommt man ja leider nicht (mehr) angezeigt, muss man sich also adhoc mit der Console im Browser bei den Requests erfschnüffeln  Wink