Я пробовал много stuf, но никто из них не работает. Я думаю, что могу получить пользовательские атрибуты на странице продукта, но мне было интересно: как их получить на странице корзины покупок? (атрибут - просто простой письменный текст)
Спасибо.
Я пробовал много 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); ?>
Я использовал этот
(in app/design/frontend/default/your_theme/template/checkout/cart/item/default.phtml
)
для атрибута my (textfield):
<?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
.
Шаг 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();
Я не знаю, является ли это лучшей или правильной вещью, но она решила проблему.
Приветствия