Получить значение выбранного атрибута множественного выбора


14

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

Он имеет атрибут multiselect 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);

Я не получаю выходной! Это не выпадающий список, а атрибут множественного выбора!
СПРБР

Это все еще должно работать с множественным выбором, я только попробовал это непосредственно. Попробуйте var_dump($_product->getData('car_options');и проверьте вывод. Это должна быть строка, разделенная запятыми, в противном случае я могу только представить, что сторонний модуль вмешивается.
Майерс

По-прежнему нет выхода. Мы используем несколько модулей, но я не знаю ни одного, который мешает с атрибутами.
СПРБРН

Если $_product->getData('car_options')возвращается NULL, это означает, что он не добавлен в вашу коллекцию продуктов. Нам нужно узнать больше о том, где вы пытаетесь получить доступ к этому атрибуту
Mayers

Я нашел решение - см. Мой ответ.
SPRBRN

2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ product = $ objectManager-> get ('Magento \ Catalogue \ Model \ Product') -> load ($ 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 ('catalog / product') -> getAttributeRawValue ($ productId, $ _attribute_code, $ storeId); // возвращает: 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 как $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['value'];
    if (strlen (trim ($ l))> 0 && in_array ($ m, $ car_options))
    {
        $ res. = trim ($ 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.