Uzyskaj wartość wybranego atrybutu wielokrotnego wyboru

14

Weź następujący produkt „samochodowy”: Volkswagen Golf .

Ma atrybut wielokrotnego wyboru car_optionsz następującymi możliwymi opcjami i ich identyfikatorami:

  • Wybrano Airco (id = 123)
  • Wybrano radio (id = 124)
  • Bluetooth (identyfikator = 125)
  • Nawigacja (id = 126)

Radio i Airco są wybrane dla tego produktu. Jak mogę uzyskać te dwie wartości (radio, klimatyzacja) i wyświetlić je? $ _product jest podany.

SPRBRN
źródło

Odpowiedzi:

19

Spróbuj tego:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);
Mayers
źródło
Nie mam wyjścia! To nie jest lista rozwijana, ale atrybut wielokrotnego wyboru!
SPRBRN
Powinien nadal działać z wyborem wielokrotnym, po prostu sam go wypróbowałem. Spróbuj var_dump($_product->getData('car_options');i sprawdź wynik. Powinien to być ciąg oddzielony przecinkami, jeśli nie, to mogę sobie tylko wyobrazić, że moduł innej firmy zakłóca.
Mayers
Nadal brak danych wyjściowych. Używamy kilku modułów, ale nie znam żadnego, który zadziałałby z atrybutami.
SPRBRN
Jeśli $_product->getData('car_options')zwraca NULL, oznacza to, że nie jest dodawany do Twojej kolekcji produktów. Będziemy musieli dowiedzieć się więcej o tym, gdzie próbujesz uzyskać dostęp do tego atrybutu
Mayers
Znalazłem rozwiązanie - zobacz moją odpowiedź.
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);

to działa .. Mam nadzieję, że ci to pomoże ...

Sameer Bhayani
źródło
Niesamowite ... Działa jak urok !!!!!
Sneha Panchal
miło wiedzieć :) @SnehaPanchal
Sameer Bhayani
0

Poniższy kod

  1. zwraca identyfikatory wartości wybranych opcji dla tego produktu: 123,124
  2. zamienia to w tablicę: tablica (123,124)
  3. następnie znajduje etykietę tych opcji: 123 => Airco i 124 => Radio
  4. i zwraca wartości w ciągu tekstowym: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mag :: getResourceModel („katalog / produkt”) -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // zwraca: 123,124
$ car_options = explode (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / entity_attribute') -> getIdByCode ('katalog_produktu', $ _ kod_ atrybutu);
$ attribute = Mage :: getModel ('catalog / resource_eav_attribute') -> load ($ attributeId);
$ attributeOptions = $ atrybut -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributeOptions as $ a)
{
    $ l = $ a [„etykieta”];
    $ m = $ a [„wartość”];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ l). „,”;
    }
}
echo substr ($ res, 0, -2) ;;
SPRBRN
źródło
Ojej - zwykle nie chcesz iść tą drogą. Zwłaszcza, że ​​powyższa odpowiedź Mayera działa dobrze. Nie jestem również pewien, czy nie omijasz systemu tłumaczeń Magento w ten sposób - chociaż tego nie sprawdziłem.
workflow
0

Dzięki @Mayers, jego rozwiązanie jest zbyt dobre, aby nie zastąpić natywnego getAttributeText:

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

a także dodać do modelu klienta.

kiatng
źródło