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.

Antworten:


19

Versuche dies:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);

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 ..


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) ;;

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.