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.

Odpowiedzi:


19

Spróbuj tego:

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

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


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.