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.