Как отобразить пользовательский атрибут в корзине (Magento) - PullRequest
15 голосов
/ 06 марта 2011

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

Ответы [ 9 ]

47 голосов
/ 25 марта 2014

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

25 голосов
/ 07 марта 2011

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

Простой атрибут (текст):
(В вашем 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); ?>
7 голосов
/ 19 декабря 2012

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

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

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

<?php 
$_item = $this->getItem();
$_product = $_item->getProduct()->load();
?>
<?php echo $_product->getCustomAttribute(); ?>
1 голос
/ 01 июля 2014

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

Изменить в: 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']; }
1 голос
/ 24 июня 2014

Это не лучший способ, в вашем Атрибуте (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" } 

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

0 голосов
/ 21 июля 2018
<?php $_product= Mage::getSingleton('catalog/product')->load($_item->getProductId()) ?>
                <?php echo $_product->getResource()->getAttribute('attribute_code')->getFrontend()->getValue($_product); ?>
0 голосов
/ 31 марта 2017

После всех вкладов я взял 1-й ответ и удивился arround 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 голосов
/ 01 августа 2016

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

Шаг 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; ?>
0 голосов
/ 08 января 2013

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

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