Я пытаюсь получить атрибут товара в шаблоне корзины. Но у меня просто не работает! Атрибут имеет значение Видимый на страницах каталога в Магазине = да и Используется в списке товаров = да
Я использую пользовательский модуль для переопределения следующего шаблона:
/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml
У меня есть продукт:
$_item = $block->getItem();
$product = $_item->getProduct();
Обычно я ожидаю, что пользовательский атрибут (в данном случае типа text-area) с кодом атрибута «sample_attr» будет доступен с одним из них:
$product->getData('sample_attr');
или
$product->getSampleAttr();
Некоторые атрибуты доступны с использованием этого (sku, weight, price ..), но для пользовательского атрибута ни один не работает. Включенный помощник (\ Magento \ Msrp \ Helper \ Data) также не имеет метода атрибутов.
Я могу получить все коды атрибутов, используя:
$attributes = $product->getAttributes();
foreach($attributes as $a)
{
var_dump($a->getName());
}
Я также попробовал:
$attribute = $product->getResource()->getAttribute('sample_attr');
var_dump($attribute->getFrontend()->getValue($product));
но это возвращает ноль.
Итак, как мне получить значение атрибута?
Я пробовал это: получить конкретный атрибут для каждого продукта на странице каталога
Вывести пользовательский текстовый атрибут в каталог list.phtml (Magento 2)
источник
magento setup:di:compile
чтобы заставить это работать, но это имеет смысл. Вы меняете дерево зависимостей здесь.Таким образом, я нашел способ получить информацию, которая была мне нужна. Я должен загрузить весь продукт из репозитория Product! Обратите внимание, что если вы попытаетесь загрузить его из
\Magento\Catalog\Model\Product
него, он будет вести себя как одиночка, всегда предоставляя вам один и тот же продукт для каждого цикла.Я использовал свой вспомогательный класс модулей, так как он определяет следующий метод для загрузки продукта из productId:
Я включил помощника в шаблон:
Я загружаю полный продукт:
И теперь я могу использовать:
и
чтобы получить данные.
источник
Для тех, кто приземлился здесь, ищет простое решение, вот как это сработало для меня
Я добавил к своему
default.phtml
(вmodule-checkout/view/frontend/templates/cart/item
) это:тогда можешь звонить
$customProduct->getData('your_attribute');
как всегдаисточник
При правильных настройках администратора пользовательские атрибуты загружаются в объект продукта на странице оформления заказа, если для исходной модели в
eav_attribute
таблице sql установлено значениеNULL
. Таким образом, вы можете получить доступ непосредственно$product->getSampleAttr()
на странице оформления заказа.Но если атрибут имеет исходную модель как
Magento\Eav\Model\Entity\Attribute\Source\Table
, вы должны загрузить продукт из хранилища.Создайте новый помощник и добавьте репозиторий продукта в конструктор, все еще работающий на 2.2.6 (как решение tecjam)
Обратите внимание, что проблема остается той же, если вы пытаетесь переопределить средство визуализации элементов (называемое на странице оформления заказа) и добавляете сюда репозиторий продуктов.
источник
Пользовательские атрибуты не включены в объект продукта, который находится в Quote / Cart, поэтому вы не можете получить его через функцию getData ('custom_attribute'). что вам нужно сделать, это получить идентификатор продукта, возвращенного из объекта продукта Quote, и загрузить продукт с помощью репозитория продукта; как только вы загрузите продукт через репозиторий, вы сможете получить все данные, включая назначенные ему пользовательские атрибуты, позже вы можете использовать функцию getData ('custom_attribute'), чтобы получить ее.
Надеюсь, это имеет смысл.
источник