cancel
Showing results for 
Search instead for 
Did you mean: 

Как правильно получать атрибуты продукта?

Как правильно получать атрибуты продукта?

Создал свой атрибут для продукта и добавил его в группу. Группу добавил в свой сет. Продукту назначил свой сет.

В карточке товара атрибут нормально отображается.

В корзине (checkout/cart) невозможно получить значение атрибута.

 

var_dump($product->getData('si_qty')); // => NULL
var_dump($product->getResource()->getAttribute('si_qty')->getFrontend()->getValue($product)); // => NULL
var_dump($product->getCustomAttribute('si_qty')); // => NULL

Хотелось бы раз и навсегда понять почему так *** устроена система атрибутов.

Я просто хочу сделать $product->getData('my-attr'); и все, но в разных частях системы он может отдаваться, а может и нет.

 

Как гарантированно получить значение атрибута?

 

UPD:

Только что попробовал сделать повторную загрузку продукта:

$productNew = $product->load($product->getId());

Теперь возможно получить значение атрибута:

 echo $productNew->getData('si_qty');

 

Я не понимаю смысла загрузки загрузки кусочков данных продукта. Возможно, разработчики хотели сэкономить ресурсы и сделать быструю систему (у них это получилось. </sarcasm>), в итоге теперь нужно загружать продукт повторно.

6 REPLIES 6

Re: Как правильно получать атрибуты продукта?

@mykhailo7, информация присутствующая в продукте зависит от того каким образом он был загружен. EAV атрибуты не будут доступны если, например, продукт берется из коллекции перед загрузкой которой они не были добавлены вызовом "addAttributeToSelect('*')". Добавление к запросу загрузки коллекции только твоего аттрибута -"addAttributeToSelect('si_qty')".

 

Поскольку я не знаю в каком точно месте ты пытаешся получить атрибут то советую универсальное но ресурсоемкое решение:

$product->getSiQty(); // null
$product->load($product->getId());
$product->getSiQty(); // value

Для оптимальной производительности постарайся добавить свой атрибут перед загрузкой коллекции.

Re: Как правильно получать атрибуты продукта?

В корзине (checkout/cart) невозможно получить значение атрибута.


Конкретно в списке товаров, добавленных в корзину. На отдельной странице, не в mini-cart.

 

Я уже как-то задавал вопрос на SO, самое интересное, мне удалось пофиксить проблему. Но после переустановки мадженты с теми же модулями и настройками, опять атрибут не удается получить.

Re: Как правильно получать атрибуты продукта?

В товаре ваш атрибут доступен, потому что на этой странице грузится весь объект товара.

На других страницах грузится коллекция товаров. В коллекцию попадают не все атрибуты товаров, а часть. Это сделано для оптимизации использования памяти и скорости.

Чтобы атрибут товара был доступен в коллекции товаров нужно в редактировании атрибута указать, что он там должен быть доступен. Атрибут "Used in Product Listing (Использовать в списке товаров)".

 


ET Web Solutions
extensions, custom work, support

Re: Как правильно получать атрибуты продукта?

Я уже понял это, спасибо.

 

В админке все стоит в Yes, и Used in Product Listing тоже, но этого видимо было мало.

Re: Как правильно получать атрибуты продукта?

После этого ещё реиндекс надо сделать, особенно, если флат товары включены и кэш сбросить.


ET Web Solutions
extensions, custom work, support

Re: Как правильно получать атрибуты продукта?

Реиндекс запускал и кэш сбрасывал. Может я делал что-то не так, может очередной баг.