Подтвердить что ты не робот

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

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

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

(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(); ?>

Ответ 4

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

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

Ответ 5

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

Изменить: 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']; }

Ответ 6

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

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

Ответ 7

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

Шаг 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; ?>

Ответ 8

После всех вкладов я взял 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();

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

Приветствия