Multiselect in Plugin Combobox

Nabend zusammen,

ich habe da mal eine Frage bezüglich der Plugin Optionen Komponenten: In einem Plugin habe ich gesehen, dass man innerhalb einer combobox mehrere Einträge auswählen kann.
Welchen Wert muss man der Komponente mitgeben bei der initialisierung? Oder gibt es noch eine weitere Komponente die nicht in der Doku steht?

Vielen Dank für jegliche Tips im voraus!

Daniel

multiSelect=> true :slight_smile:

1 Like

Oh mann!

Besten Dank Shyim! Grin
 

Hallo,

jetzt habe ich dazu leider nochmal eine Frage: Wie kann denn nun auf das Array zugegriffen werden?!?
Die Variablen sind ja im Config Objekt allerdings kann auf das _data Array nicht zugegriffen werden, da es protected ist?

Ich habe leider keine Funktion in der Enlight_Config Klasse gefunden um die Daten abzugreifen.

Man könnte das ganze zwar über die DB abgreifen, aber es muss doch einen schickeren Weg dafür geben?

Daniel

So, nochmal ein kurzes Update.
Ich hole mir jetzt die Werte der Combobox umständlich über die Datenbank. Funktioniert zwar einwandfrei, aber irgendwie glaub ich noch nicht so recht das bei Shopware “vergessen” wurde, auf Mutliselections zuzugreifen?!?

Daniel

Du kannst doch über $this->Config()->get(‚mein_config_name‘); direkt auf das Konfigurationselement zugreifen oder verstehe ich dir hier falsch?

Ja, das geht auch Problemlos. Nur nicht bei einer Combobox mit multiselect auf true gesetzt. Da ist das Feld dann leer. Das _data Objekt hat aber bei Ausgabe ein Array mit den gesetzten Werten. Man kann da nur nicht drauf zugreifen.

Daniel

@DannyDan schrieb:

Ja, das geht auch Problemlos. Nur nicht bei einer Combobox mit multiselect auf true gesetzt. Da ist das Feld dann leer. Das _data Objekt hat aber bei Ausgabe ein Array mit den gesetzten Werten. Man kann da nur nicht drauf zugreifen.

Daniel

Hallo,

bist du bei dem Punkt schon weiter gekommen? Ich hänge auch bei dem _data - Problem, hab aber auch noch keine Vorlage von Shopware gefunden, die das Thema bespricht. Das data-Feld ist auf jeden Fall mit den entsprechenden Werten befüllt: [_data:protected] => Array ( [0] => 5 [1] => 4 ) . @DannyDan‍ , wie holst du dir die Werte denn über die Datenbank? Über die Plugin-ID und dann über s_core_config_forms, s_core_config_elements und dann in s_core_config_values?

 

In den Grundeinstellungen unter “System” -> “Backend” und bei “Auswählbare Sprachen” wird es ja auch eingesetzt - nur finde ich dort (logischerweise) keine Frontendausgabe dazu. [@Daniel Nögel](http://forum.shopware.com/profile/4010/Daniel Nögel “Daniel Nögel”)‍ oder [@Stephan Pohl](http://forum.shopware.com/profile/2/Stephan Pohl “Stephan Pohl”)‍, habt ihr eventuell eine Idee dazu?

Beste Grüße

Sebastian

Guten Morgen!

Funktioniert es so?

$this->Config()->get('meinElement')->toArray()

Alternativ gibt es auf dem Config-Objekt so Iterator-Methoden wie bspw. “next” und “current”.
Als Beispiel:

$config = $this->Config()->get('test');

for ($i=0; $i < $config->count(); $i++) {
   echo $config->current();
   $config->next();
}

Hilft das?

Lieben Gruß,
Patrick Shopware

2 Likes

@Patrick Stahl schrieb:

Guten Morgen!

Funktioniert es so?

$this->Config()->get(‚meinElement‘)->toArray()

Alternativ gibt es auf dem Config-Objekt so Iterator-Methoden wie bspw. „next“ und „current“.
Als Beispiel:

$config = $this->Config()->get(‚test‘);

for ($i=0; $i < $config->count(); $i++) {
echo $config->current();
$config->next();
}

Hilft das?

Lieben Gruß,
Patrick Shopware

Hallo Patrick,

$this->Config()->get(‚meinElement‘)->toArray() ist des Rätsels Lösung. Ich danke dir Smile.

Beste Grüße

Sebastian

Ach Mensch. Super!

Zwar ein wenig spät, aber ich bedanke mich trotzdem vielmals für diesen Tipp.
Das spart schön zwei DB Abfragen. :wink:

Gruß

Daniel

Hallo,

wir verwenden ebenfalls toArray() um verschachtelte Arrays im Frontend zur Verfügung zu stellen. Das sieht dann ungefähr so aus:

$view->assign('arrayName', array( 				
      'input1Feld' => $this->Config()->get('input1FeldConfig'),
      'selectbox1Inhalt' => $this->Config()->get('selectbox1InhaltConfig')->toArray(),
      'selectbox2Inhalt' => $this->Config()->get('selectbox2InhaltConfig')->toArray(),
      'input2Feld' => $this->Config()->get('input2FeldConfig')
      ) 		
   );
}

In der Config legen wir im Standard-Value fest, dass es sich um ein Array handelt - sonst knallts ( 503 Error ) Undecided

$form->setElement('select','selectbox1InhaltConfig',
      [
            'scope' => Shopware\Models\Config\Element::SCOPE_SHOP,
            'label' => 'Label',    
            'store' => array(
                  array('value-1', 'Wert 1'),
                  array('value-2', 'Wert 2'),
                  array('value-2', 'Wert 3')
            ),
            'value' => array(),
            'multiSelect' => true
      ]
);

 

Jetzt kann es aber passieren, dass in der Config bei der Auswahl Werte nicht korrekt gewählt werden, weil der Nutzer eventuell den Wert eintippt, statt mit der Maus darauf zu klicken. Shopware erkennt hierbei dann keine Zuordnung. Auch dann kann es im Frontend zu einem 503 Fehler kommen.

 

Verbesserungsvorschlag?

Die Fehlermeldung lautet: 

Fatal error: Uncaught Error: Call to a member function toArray() on string in /home/vagrant/www/sw-plugins/engine/Shopware/Plugins/Local/Frontend/pluginname/Bootstrap.php on line 750

Genauer tritt diese Meldung auf, wenn in einem Multiselect-Feld eine Eingabe gemacht wurde und nicht aus dem Dropdown ausgewählt. Eben einfach immer dann, wenn durch die manuelle Eingabe (per Tastatur) ein String entsteht und kein Array…

Hi zusammen,

gibt’s multiselect eigentlich auch im neuen Plugin-System mit der config.xml? In der config.xsd ist das ja nicht vorgesehen. Weiß das jemand?

Danke!
Geert