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.