Как отобразить пользовательский атрибут в корзине (Magento)

Я пробовал много stuf, но никто из них не работает. Я думаю, что могу получить пользовательские атрибуты на странице продукта, но мне было интересно: как их получить на странице корзины покупок? (атрибут – просто простой письменный текст)

Спасибо.

$_item->getProduct()->load() перезагрузит все данные продукта из базы данных. Хотя это будет работать, помните, что каждый раз, когда вы вызываете load() Magento будет выполнять запрос базы данных.

То же самое можно сделать с гораздо большей производительностью, загрузив атрибут вместе с элементом котировки. Просто создайте настраиваемый модуль и добавьте его в файл config.xml

 <global> <sales> <quote> <item> <product_attributes> <one_custom_attribute_code /> <another_custom_attribute_code /> </product_attributes> </item> </quote> </sales> </global> 

Сделав это, вы можете получить доступ к своему настраиваемому атрибуту без дополнительных запросов к базе данных.

 $_item->getProduct()->getAnotherCustomAttributeCode(); 

Вот статья об этом: https://www.atwix.com/magento/accessing-custom-attribute-at-checkout-or-cart/

Вы говорите о пользовательской опции или простом атрибуте?

Простой атрибут (текст):
(В вашем файле default.phtml)

 <?php $_item = $this->getItem()?> <?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?> <?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?> 

Я использовал это

app/design/frontend/default/your_theme/template/checkout/cart/item/default.phtml )

для моего (текстового поля) атрибута:

 <?php $_item = $this->getItem(); $_product = $_item->getProduct()->load(); ?> <?php echo $_product->getCustomAttribute(); ?> 

Это не лучший способ, в вашем атрибуте (magento / admin) вы можете установить этот параметр:

Видимый в Checkout

Таким образом, атрибут переходит к

 $_options Array ($_options = $this->getOptionList()) (in checkout/cart/item/default.phtml) 

Вы можете использовать атрибут (массив $_option ), например:

 array(4) { ["label"]=> string(10) "Lieferzeit" ["value"]=> string(8) "2-3 Tage" ["print_value"]=> string(8) "2-3 Tage" ["code"]=> string(13) "delivery_time" } 

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

Показать выбранный атрибут из списка опций :

Изменение в: app / design / frontend / base / default / template / checkout / cart / item / default.phtml

 $_customOptions = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct()); foreach($_customOptions['attributes_info'] as $_option){ echo option['label']; } 

Одним из возможных методов является использование шаблона проектирования singleton . Вот как получить атрибут.

 $_item = $this->getItem(); $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()); echo $attrValue=$_product->getAttributeText('attrCode'); 

Вы можете сделать следующее, чтобы отобразить пользовательский атрибут продукта, в данном случае атрибут продукта гарантии на странице просмотра продукта.

Шаг 1. Создайте новый атрибут «гарантия» в задней части Magento в разделе STORES->Attributes->Product . Задайте значения «ДА» в разделе «Видимые на странице продукта на лицевой стороне» и «Используется в списке продуктов» в свойствах «Свойства магазина», создав атрибут для отображения его в списке продуктов и просмотренных страниц.

Шаг 2. Назначьте новый атрибут «гарантия» атрибуту по умолчанию, установленному в STORES->Attributes->Attribute set.

Шаг 3. Теперь вы увидите атрибут при создании продуктов. Вы можете дать любое значение, которое вы хотите.

Шаг 4: отредактируйте файл catalog_product_view.xml и обновите следующий контент. Вы можете добавить этот раздел внутри контейнера product.info.main . Вы можете добавить свой блок рядом с блоком product.info.overview . Поэтому он будет отображаться рядом с кратким описанием.

 <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.demo" template="product/view/demo.phtml" after="-"> <arguments> <argument name="at_call" xsi:type="string">getWarranty</argument> <argument name="at_code" xsi:type="string">warranty</argument> <argument name="css_class" xsi:type="string">warranty </argument> <argument name="at_label" xsi:type="string">warranty </argument> <argument name="add_attribute" xsi:type="string">itemprop="warranty "</argument> </arguments> </block> 

Шаг 5. Создайте новый файл warranty.phtml файле mageno2root / vendor / magento / module-catalog / view / frontend / templates / product / view с приведенным ниже содержимым.

 <?php $_helper = $this->helper('Magento\Catalog\Helper\Output'); $_product = $block->getProduct(); $_code = $block->getAtCode(); $_className = $block->getCssClass(); $_attributeLabel = $block->getAtLabel(); $_attributeType = $block->getAtType(); $_attributeAddAttribute = $block->getAddAttribute(); if ($_attributeLabel && $_attributeLabel == 'default') { $_attributeLabel = $_product->getResource()->getAttribute($_code)->getFrontendLabel(); } $_attributeValue =$_product->getResource()->getAttribute($_code)->getFrontend()->getValue($_product); ?> <?php if ($_attributeValue): ?> <div class="product attibute <?php echo $_className?>"> <?php if ($_attributeLabel != 'none'): ?><strong class="type"><?php echo $_attributeLabel?></strong><?php endif; ?> <div class="value" <?php echo $_attributeAddAttribute;?>><?php echo $_attributeValue; ?></div> </div> <?php endif; ?> 

После всех вкладов я взял 1-й ответ и задался вопросом, что это ардно-пурпурный.

Я нашел решение, которое мне не нужно было снова загружать (). Я редактировал файл config.xml по следующему пути,

 app/code/core/Mage/Sales/etc/config.xml 

и по атрибутам item / product я добавил пользовательский атрибут

 <item> <product attributes> <sku/> <type_id/> <my_custom_attribute_id/> 

то в моем файле cart.phtml мне удалось получить атрибут, просто используя:

 $_item->getProduct()->getmy_custom_attribute_id(); 

Я не знаю, является ли это лучшей или правильной вещью, но она решила проблему.

ура