Freitextfeld - Auswahlfeld - Wert im Frontend auslesen?

Hallo,

ich habe ein Attribut “Verpackungsart” in der Freitextverwaltung für Artikel angelegt. Diese Attribute haben die Kombination und sind als Auswahlfeld definiert.

[“key” => “180”, “value” => “Bag in Box”],
[“key” => “557”, “value” => “Brotpapier”],
[“key” => “300”, “value” => “Glasflasche”]

Wenn dieses Attribut nun ausgewählt und abgespeichert wird, steht 180 in der Datenbank. Im Frontend kann ich mit $sArticle.attr_verpackungsart auf den Wert zugreifen - dort steht dann 180 im Frontend.

Wie bekomme ich es hin, dass ich im Frontend nicht nur den Wert 180 auslese, sondern die Bezeichnung, die hinter 180 liegt? Im Frontend soll ja “Bag in Box” stehen.

Danke!

@elbsurfer schrieb:

Hallo,

ich habe ein Attribut „Verpackungsart“ in der Freitextverwaltung für Artikel angelegt. Diese Attribute haben die Kombination und sind als Auswahlfeld definiert.

[„key“ => „180“, „value“ => „Bag in Box“],
[„key“ => „557“, „value“ => „Brotpapier“],
[„key“ => „300“, „value“ => „Glasflasche“]

Wenn dieses Attribut nun ausgewählt und abgespeichert wird, steht 180 in der Datenbank. Im Frontend kann ich mit $sArticle.attr_verpackungsart auf den Wert zugreifen - dort steht dann 180 im Frontend.

Wie bekomme ich es hin, dass ich im Frontend nicht nur den Wert 180 auslese, sondern die Bezeichnung, die hinter 180 liegt? Im Frontend soll ja „Bag in Box“ stehen.

Danke!

 

Hallo,

hast du einmal mit {$sArticle|@var_dump} nachgesehen, ob im Artikel - Array der Wert bei einer Variable verfügbar ist? Prinzipiell ist der value - Wert für das Backend gedacht und wird (nur) dort angezeigt.

Alternativ könntest du auch in einem Event die ID - Value - Zuweisung implementieren, sodass er dir den Value - Wert in einer eigenen Variable ausgibt.

Beste Grüße

Sebastian

Danke Dir für das schnelle Feedback.

Nein, der $sArticle hat leider nicht das Value des Keys abgespeichert. Ich würde es nun über ein Plugin lösen, aber derzeit weiß ich noch nicht wie ich auf den Wert komme.

Den Key kann ich leicht auslesen, aber dann habe ich eine Zahl wie 157 - wie komme ich dann auf den Wert? Mit einer DSQL? Da muss Shopware doch etwas anderes anbieten, oder?

Auf den Wert am Artikel komme ich mit:

$id = (int) $request->sArticle;
$attributes = $this->container->get(‘shopware_attribute.data_loader’)->load(‘s_articles_attributes’, $id);

$wert = $attributes[‘verpackungsart’];

Hallo elbsurfer,

diese ist gut Frage.Ich brauchte Zeit, um die Antwort zu finden.

$sArticle = $view->getAssign('sArticle');

$ConfigurationStruct = $this->container->get('shopware_attribute.crud_service')->get('s_articles_attributes', 'attr_verpackungsart');

$arrayStore = $ConfigurationStruct->getArrayStore();

$arrayStor = json_decode( $arrayStor );

$sArticle['attr_verpackungsart'] = $arrayStor[$sArticle['attr_verpackungsart']];

$view->assign("sArticle", $sArticle);

aber Sein Sie sicher dass ‘attr_verpackungsart’ ist die Korrekt column Name in der Datenbank.

Viele Grüße

Ahmad

Danke Ahmad,

das hat mir sehr geholfen. $arrayStor[$sArticle[‘attr_verpackungsart’]]; funktioniert bei mir nur nicht, weil ich mehrere Objekte zurückbekomme und kein eindimensionales Array:

 array(22) { [0]=\> object(stdClass)#3540 (2) { ["key"]=\> string(3) "180" ["value"]=\> string(10) "Bag in Box" } [1]=\> object(stdClass)#4342 (2) { ["key"]=\> string(3) "557" ["value"]=\> string(10) "Brotpapier" }

Ich mache darauf eine foreach und schaue ob der Wert von sArticle == $obj->key ist und setze eine Variable, die ich dann ans Frontend zurückgebe.

Danke!

Hallo elbsurfer,

Sie brauchen keine foreach.

nur änderen diese Line:

$arrayStor = json_decode( $arrayStor, true );

 

Hallo Ahmad,

doch - denn ich erhalte dies: Also noch eine eben zu viel. 

 array(22) { [0]=\> array(2) { ["key"]=\> string(3) "180" ["value"]=\> string(10) "Bag in Box" } [1]=\> array(2) { ["key"]=\> string(3) "557" ["value"]=\> string(10) "Brotpapier" }

also, ja Sie haben Richt.

Diese ist ein multidimensional array.

Sie dürfen “foreach” bebauzen oder mit PHP (>= 5.5.0) :
 

$arrayStor = json_decode( $arrayStor, true );
$key = array_search( $sArticle['attr_verpackungsart'], array_column($arrayStor , 'key') );
$sArticle['attr_verpackungsart'] = $arrayStor[$key]['value'];

Viele Grüße,

Ahmad