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


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

Спасибо.

Author: pomaaa, 2011-03-06

9 answers

$_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/

 45
Author: Andreas Riedmüller, 2014-03-25 14:48:39

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

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

<?php $_item = $this->getItem()?>
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
<?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
 25
Author: Antonino Bonumore, 2011-03-06 23:36:07

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

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

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

<?php 
$_item = $this->getItem();
$_product = $_item->getProduct()->load();
?>
<?php echo $_product->getCustomAttribute(); ?>
 7
Author: Sander Looijenga, 2016-08-02 06:41:37

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

Отображается при оформлении заказа

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

$_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" } 

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

 1
Author: Marco, 2014-06-24 09:42:57

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

Изменение в: приложение/дизайн/интерфейс/база/по умолчанию/шаблон/оформление заказа/корзина/товар/по умолчанию.phtml

$_customOptions = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());

foreach($_customOptions['attributes_info'] as $_option){ echo option['label']; }
 1
Author: kileMANjaro, 2014-07-01 13:24:50

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

$_item = $this->getItem();
$_product= Mage::getSingleton('catalog/product')->load($_item->getProductId());
echo $attrValue=$_product->getAttributeText('attrCode');
 0
Author: user1668260, 2013-01-08 07:31:50

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

Шаг 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/поставщик/magento/модуль-каталог/просмотр/интерфейс/шаблоны/продукт/просмотр с нижеприведенным содержимым.

<?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; ?>
 0
Author: Henry Roger, 2016-08-01 10:26:21

После всех вкладов я взял 1-й ответ и задался вопросом о magento.

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

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

И в атрибутах товара/продукта я добавил пользовательский атрибут

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

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

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

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

Приветствия

 0
Author: Tiago H Moreira, 2017-03-31 17:17:31
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
                <?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
 0
Author: arvinda kumar, 2018-07-21 06:00:38