Отримайте значення вибраного атрибута з декількома виборами


14

Візьміть такий «автомобільний» продукт: Volkswagen Golf .

Він має атрибут мультиселекції car_optionsз наступними можливими параметрами та їх ідентифікаторами:

  • Вибрано Airco (id = 123)
  • Вибрано радіо (id = 124)
  • Bluetooth (id = 125)
  • Навігація (id = 126)

Для цього продукту вибрано радіо та Airco. Як я можу отримати ці два значення (радіо, airco) та відобразити їх? $ _product наведено.

Відповіді:


19

Спробуйте це:

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

Я не отримую виводу! Це не спадне місце, а мультиселективний атрибут!
SPRBRN

Це все одно має працювати з мультиселектом, я просто спробував це сам. Спробуйте var_dump($_product->getData('car_options');перевірити вихід. Це повинен бути рядок, розділений комами, якщо це не так, я можу лише уявити, що заважає модуль сторонньої сторони.
Майєрс

Досі немає результату. Ми використовуємо кілька модулів, але я не знаю жодного, що бідується з атрибутами.
SPRBRN

Якщо $_product->getData('car_options')повертається NULL, це означає, що він не додається до вашої колекції товарів. Нам потрібно буде дізнатися більше про те, де ви намагаєтеся отримати доступ до цього атрибуту
Майерс

Я знайшов рішення - дивіться мою відповідь.
SPRBRN

2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Каталог \ Модель \ Продукт') -> завантаження ($ product_id);

$ attributevalues ​​= $ product-> getResource () -> getAttributeRawValue ($ product_id, 'my_custom_attribute_code', $ storeid);

це працює .. Сподіваюся, це допоможе вам ..


Дивовижно ... Це працює як шарм !!!!!
Снеха Панчал

Рада дізнатися :) @SnehaPanchal
Самер Бхаяні

0

Наступний код

  1. повертає ідентифікаційні значення вибраних параметрів цього продукту: 123,124
  2. перетворює це в масив: масив (123,124)
  3. то знаходить мітку цих параметрів: 123 => Airco і 124 => Radio
  4. і повертає значення в текстовому рядку: Airco, Radio
$ _attribute_code = 'car_options';
$ car_options_csv = Mage :: getResourceModel ('каталог / продукт') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // повертає: 123,124
$ car_options = explode (',', $ car_options_csv);
$ attributeId = Mage :: getResourceModel ('eav / object_attribute') -> getIdByCode ('каталог_продукт', $ _ атрибут_код);
$ attribute = Mage :: getModel ('каталог / ресурс_eav_attribute') -> завантаження ($ attributeId);
$ attributeOptions = $ attribute -> getSource () -> getAllOptions ();

$ res = '';
foreach ($ attributeOptions як $ a)
{
    $ l = $ a ['мітка'];
    $ m = $ a ['значення'];
    if (strlen (обробка ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = обрізка ($ l). ',';
    }
}
echo substr ($ res, 0, -2) ;;

Ну, ти зазвичай не хочеш спускатися цією дорогою. Тим більше, що відповідь Майєра вище працює добре. Я також не впевнений, якщо ви не оминаєте систему перекладу Magento таким чином - не перевіряли.
робочий процес

0

Дякуємо @Mayers, його рішення занадто добре, щоб не перекрити рідний getAttributeText:

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

і додати до моделі клієнта.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.