Ruft den Wert des ausgewählten Mehrfachauswahl-Attributs ab

14

Nehmen Sie das folgende "Auto" -Produkt: Volkswagen Golf .

Es verfügt über ein Multiselect-Attribut car_optionsmit den folgenden möglichen Optionen und deren IDs:

  • Airco (id = 123) ausgewählt
  • Radio (id = 124) ausgewählt
  • Bluetooth (ID = 125)
  • Navigation (id = 126)

Radio und Klimaanlage sind für dieses Produkt ausgewählt. Wie kann ich diese beiden Werte (Radio, Klimaanlage) abrufen und anzeigen? $ _product wird angegeben.

SPRBRN
quelle

Antworten:

19

Versuche dies:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
quelle
Ich bekomme keine Ausgabe! Dies ist keine Dropdown-Liste, sondern ein Mehrfachauswahl-Attribut!
SPRBRN
Es sollte immer noch mit einem Multiselect funktionieren, ich habe es einfach selbst ausprobiert. Versuchen Sie var_dump($_product->getData('car_options');und überprüfen Sie die Ausgabe. Es sollte eine durch Kommas getrennte Zeichenfolge sein. Wenn dies nicht der Fall ist, kann ich mir nur vorstellen, dass ein Modul eines Drittanbieters stört.
Mayers
Immer noch keine Ausgabe. Wir verwenden mehrere Module, aber ich kenne keine, die mit den Attributen in Konflikt geraten.
SPRBRN
Wenn $_product->getData('car_options')NULL zurückgegeben wird, bedeutet dies, dass es Ihrer Produktsammlung nicht hinzugefügt wurde. Wir werden mehr darüber wissen müssen, wo Sie versuchen, auf dieses Attribut zuzugreifen
Mayers
Ich habe eine Lösung gefunden - siehe meine Antwort.
SPRBRN
2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalog \ Model \ Product') -> load ($ product_id);

$ attributevalues ​​= $ product-> getResource () -> getAttributeRawValue ($ product_id, 'my_custom_attribute_code', $ storeid);

es funktioniert .. hoffe es hilft dir ..

Sameer Bhayani
quelle
Super ... Es funktioniert wie ein Zauber !!!!!
Sneha Panchal
froh zu wissen :) @ SnehaPanchal
Sameer Bhayani
0

Der folgende Code

  1. Gibt die Wert-IDs der ausgewählten Optionen für dieses Produkt zurück: 123,124
  2. verwandelt das in ein Array: array (123,124)
  3. Dann findet man die Bezeichnung dieser Optionen: 123 => Airco und 124 => Radio
  4. und gibt die Werte in einer Textzeichenfolge zurück: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('catalog / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // gibt zurück: 123,124
$ car_options = explode (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('catalog_product', $ _ attribute_code);
$ attribute = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ attributeId);
$ attributeOptions = $ attribute -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributeOptions als $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['Wert'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). ',';
    }
}
echo substr ($ res, 0, -2) ;;
SPRBRN
quelle
Autsch - normalerweise willst du nicht diesen Weg gehen. Zumal Mayers Antwort oben gut funktioniert. Ich bin mir auch nicht sicher, ob Sie das Magento-Übersetzungssystem nicht auf diese Weise umgehen - ich habe es jedoch nicht überprüft.
Workflow
0

Dank @Mayers ist seine Lösung zu gut, um den nativen getAttributeText nicht zu überschreiben:

 public function getAttributeText($attributeCode)  
 {
    return $this->getResource()
        ->getAttribute($attributeCode)
        ->getFrontend()
        ->getValue($this);
 }

und auch zum Kundenmodell hinzuzufügen.

kiatng
quelle