Remote-Combo in der Plugin-Konfiguration

Hallo,

ich versuche gerade, in meine Plugin-Konfigurationsseite eine Remote-Selectbox einzubauen.

Beispiel: Man wählt eine Firma aus und erhält zu dieser beispielsweise verschiedene Telefonnummern. Diese sollen von dem Server anhand der vorherigen “Firmenauswahl” nachgeladen werden.

 

Ich habe in dem Form folgendes Element hinzugefügt:

$form = $this->Form();
$form->setElement('comboremote', 'phonenumber', array(
    'label' => 'Telefonnummer',
    'store' => 'base.Phonenumber',
    'value' => '-',
    'required' => true,
));

Die app.js hat den Store und das Model:

    stores: [
        'Phonenumber'
    ],

    models: [
        'Phonenumber'
    ],

“bindStoreListeners” meldet jedoch: TypeError: undefined is not an object (evaluating ‘a.on’)

Vermutlich wird die app.js auf der Plugin-Konfigurationsseite nicht geladen, wie kann ich diese an der Stelle einbinden?

 

VG 

 

Hi,

guck dir mal die Remotecombo an: http://community.shopware.com/Shopware-4-plugin-configuration_detail_1287.html#Selection_field_.2F_remote_combo
Die ist im Prinzip dafür gemacht für async. Abfragen.

Schöne Grüße,
Niklas

Hi Niklas,

danke für deine Antwort. Im Prinzip geht es in die richtige Richtung. Weißt du, wie ich die Texteingaben eines anderen Elements mit an den Server senden kann? Aktuell sendet er nur die Eingabe in die Remotecombo als “query=…” mit.

 

Beste Grüße,

Max

Hallo Max,

verstehe die Frage nicht, was ist denn eine “Texteingaben eines anderen Elements”?

Bezogen auf die Remotecombo wird eben ein Aufruf auf deinen angegebenen Backend Controller gesendet, der die gewünschten Parameter per GET überträgt, und die Antwort als JSON erwartet.

Schöne Grüße,
Niklas

Hi Niklas,

sorry für das Missverständnis :slight_smile:

In dem 1. Element (Normale Combo) wird ja die Firma ausgewählt.

In dem 2. Element (Remote Combo) wird die Telefonnummer ausgewählt - abhängig von der Auswahl des 1. Elements „Firma“. Somit müsste die Auswahl (der Firma) an den Server gesendet werden, damit dieser die entsprechenden Telefonnummern für diese Auswahl liefern kann.

 

Beste Grüße,

Max

Ah, gute Frage - ich habe keine Ahnung - würde mich auch interessieren.
Alle Ideen die ich dazu hätte würden trotzdem nicht den aktuellen Wert der 1. Remotecombo beziehen …

Mh - würde mich sehr interessieren.

Schöne Grüße,
Niklas

Eventuell unterstützt diese Combo auch einen listeners. Schau dir das Plugin vom Paypal an (Bootstrap.php, Funktion createMyForm > Element “Jetzt Api Signatur erhalten”).

Sofern dies  bei der remotecombo funktioniert, könntest du den Wert dann den selektierten Wert/ID der ersten Remotecombo zugreifen unf der zweiten Combo als extraparams mitliefern

Simples Beispiel (nicht ausgetestet )
 

$remoteUrl = Shopware()->Front()->Router()->assemble(array("controller"=>"UserManager","action"=>"getUsers"));
    $form->setElement('combo', 'TEST', array('label'=>'Backend-User','value'=>'Please select',
        'valueField'=>'id','displayField'=>'username',
        'triggerAction' => 'all',
        'store' => 'new Ext.data.Store({
	    fields: [
		   "id",
		   "username"
            ],
           proxy : {
			 type : "ajax",
             extraParams: {cid : DEINZUSÄTZLCIHERPARAMETER},
			 autoLoad : true,
			 api : {
				 read : "'.$remoteUrl.'",
			 },
			 reader : {
			 type : "json",
			 root : "data"
			 }
		}
	})'
	, 'scope' => \Shopware\Models\Config\Element::SCOPE_SHOP));

 

Huhu!

Noch ein Hinweis (leider finde ich meinen alten Beitrag nicht mehr zu dem Thema).

Ich hatte mal in der Plugin-Auslieferung Probleme mit der API Url der Remotecombo.
Und zwar wird die gecached, wenn diese über den Router()->assemble … gebildet wird.
Das kann zu Problemen führen, wenn das Plugin/der Shop zunächst z.B. in einem Unterordner installiert wird, und später in ein anderes umzieht (z.B. root).
Dann kracht es, weil per GET eine falsche (alte URL) gebaut wird - konnte ich so nachvollziehen unter mehreren Systemen.
Die Angaben hat man auch nicht aus dem Cache bekommen, wurde damals in dem Beitrag auch thematisiert …

Shopware hat mir damals in dem Beitrag empfohlen NICHT die Backend-URL mit dem oben genannten Beispiel mit dem Router zu bauen, sondern direkt per Js (Ausschnitt)

api : {
    read: document.location.pathname + \'Base/getCustomerGroups\',
}

Hier wird der Backend Controller Base mit der action getCustomerGroups aufgerufen.

Viel Erfolg,
Niklas

Hi,

danke euch beiden für die Tipps, “extraParams” hat mich schonmal einen Schritt weiter gebracht. Allerdings wird die Server-Antwort wohl auf der Client-Seite gecached. Die Daten werden nicht bei jedem “aufklappen” der Combobox geladen, somit würde eine Änderung des abhängigen Feldes “Firma” die Remote-Combo nicht mehr beeinflussen.

Ist es eigentlich auch möglich jQuery zu verwenden? Das würde das Problem in 5 Minuten lösen :S