Shopware Knowledgebase

Shopware Labs

Der Bereich Shopware Labs ist die Plattform für alle Entwickler. Hier findet man technische Dokumentationen und zahlreiche Tipps und Tricks rund um das Thema Programmieren. In dieser Rubrik stellen außerdem die Entwickler der shopware AG neue und experimentelle Lösungsansätze vor. Neue Funktionen, die in dieser Rubrik bereitgestellt werden, sind teilweise auch für zukünftige Releases geplant. Die Funktionen können dann ohne Programmierkenntnisse zukünftig direkt im Shopware Backend konfiguriert werden oder werden über Plugins bereitgestellt. Informationen über neue, geplante Funktionen finden Sie in unserer Roadmap.

Bitte beachten Sie, dass die hier bereitgestellten Lösungsansätze nicht offiziell supportet werden und nur eingebaut werden sollten, sofern Sie über das entsprechende, technische Wissen verfügen.

Plugin-Konfiguration mit eigenen Feldern / eigenem JS-Code

0 Kommentare

Allgemein

In diesem Beispiel erstellen wir eine individualisierte Plugin-Konfiguration.

Es soll ein zusätzlicher Button in der Konfigurationsmaske integriert werden, der die Eingaben des Benutzers via Ajax-Request überprüft und die Felder im Fehlerfall markiert.

Ausgabe im Fehlerfall:

Ausgabe bei Erfolg:

Shopware unterstützt derzeit noch keine eigenen Feld-Typen innerhalb der Plugin-Konfiguration. Das lässt sich aber umgehen, indem man das Attributes-Array verwendet, welches seit 3.5.4 zur Unterstützung weiterer Feldtypen hinzugekommen ist.

Sofern der Value-Wert eines Array-Elements die Begriffe "new" oder "store" enthält, wird der Inhalt des Elements nicht maskiert und zur Laufzeit ausgeführt (Hintergrund ist die dynamische Store-Konfiguration in den neuen Combobox - Elementen).

In diesem Beispiel fügen wir neben einem Textfeld, einen Button hinzu, der bei Bestätigung den Inhalt des Textfelds ausliest und via Ajax-Request an eine Controller-Action sendet - dort kann dann eine Feldprüfung stattfinden. Abhängig von der Rückgabe der Prüfung wird dann eine MessageBox ausgegeben und das Feld entweder grün (erfolgreich) oder rot (Fehler) eingefärbt!

Das Beispiel kann natürlich um beliebig viele weitere Eingabefelder ergänzt werden - damit man diese zur Laufzeit auslesen kann, muss ein zusätzliches Attribut gesetzt werden. In diesem Fall "uniqueId". Wir können hier keine festen Namen oder Ids verwenden, da die Felder ja je Subshop konfigurierbar sind und somit nicht eindeutig zu referenzieren wären!

Beispiel-Code zur Integration in die Plugin-Install-Methode:

 
$form = $this->Form();
$form->setElement('text', 'configkey', array('label'=>'Ihr Konfigurationsschlüssel', 'value'=>'xyz','attributes'=>array("uniqueId"=>'configkey')));
$form->setElement('button', 'test10', array('label'=>'Zugangsdaten prüfen','attributes'=>array(
'handler'=>'function (){
	// The plugin form details does not support the button element by default
	// We could use the support of custom attributes to fix this
	// In order to use custom attributes with embedded javascript, we have to
	// define one of the keywords (new or store) at this place. See plugin\detail.tpl for more details
 
	// Get reference to textfield by custom attribute uniqueId
	// Could not use elements id cause of multiple subshop configuration
	var configTextfieldObject = this.ownerCt.find(\'uniqueId\',\'configkey\')[0];
 
	// Get value from this field
	var configKey = configTextfieldObject.getValue();
 
	// Only proceed if input available
	if (!configKey){
		Ext.MessageBox.alert(\'Ups\',\'Bitte geben Sie einen Konfigurationsschlüssel ein!\');
		configTextfieldObject.getEl().setStyle(\'background\',\'red\');
		return;
	}
 
	// Doing ajax request to a custom controller
	// We cannot use shopware build in {url syntax - this part get not parsed by smarty
	// Instead we get host and path information via javascript and attached our custom controller
	Ext.Ajax.request({
	   scope:this,
	   url: window.location.protocol+\'//\'+window.location.host+window.location.pathname.replace(/plugin/,\'\')+\'?controller=widgets&action=getUsers\',
	   success: function(result,request) {
	   		// If request succeeded, decode json response (Sample code)
	   		/*var jsonData = Ext.util.JSON.decode(result.responseText);
            var resultMessage = jsonData.data.result;
            if (resultMessage == "success"){}
            */
 
			Ext.MessageBox.alert(\'Success\',\'Valid data!\');
			configTextfieldObject.getEl().setStyle(\'background\',\'green\');
	   },
	   failure: function() {
	   		configTextfieldObject.getEl().setStyle(\'background\',\'red\');
			Ext.MessageBox.alert(\'Ups\',\'Url not reachable\');
	   },
	   // Pass all needed parameters
	   params: { testVariable: configKey }
	});
 }',
'text' => 'Start',
'xtype' => 'button'
)));
$form->save();
 

Artikel-PDF erstellen

Artikel bewerten

Waren diese Informationen hilfreich? Ja Nein


Kommentare:

Artikel kommentieren


Die mit einem * markierten Felder sind Pflichtfelder.

Weitere interessante Artikel:

Bezeichnung:
Rating:
Klicks:
Datum:

Bestell-Nr.: SW1591

Lieferzeit ca. 5 Tage

€ 1,00

Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*

€ 1,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*

Kategorien: