Magento 2-カートページでカスタム属性値を設定する


7

Magento 1.xの場合

私は次の関数を作成しました Namespace/Modulename/Model/Observer.php

public function salesQuoteItemSetCustomAttribute($observer){

        $quoteItem = $observer->getQuoteItem();
        $product = $observer->getProduct();
        $quoteItem->setCustomerProductPoints($product->getCustomerProductPoints());
    }

この関数を Namespace/Modulename/etc/config.xml

    <sales_quote_item_set_product>
                <observers>
                    <product_point_quote>
                        <class>productpoint/observer</class>
                        <method>salesQuoteItemSetCustomAttribute</method>
                    </product_point_quote>
                </observers>
    </sales_quote_item_set_product>

また、持っているが、私のカスタム属性の変換順序に見積もりをからと順番引用するには、次のコードを使用することにより、config.xml

    <sales_convert_quote_item>
        <customer_product_points>
            <to_order_item>*</to_order_item>
            <to_invoice_item>*</to_invoice_item>
            <to_shipment_item>*</to_shipment_item>
            <to_cm_item>*</to_cm_item>
        </customer_product_points>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <customer_product_points>
            <to_quote_item>*</to_quote_item>
            <to_invoice_item>*</to_invoice_item>
            <to_shipment_item>*</to_shipment_item>
            <to_cm_item>*</to_cm_item>
        </customer_product_points>
    </sales_convert_order_item>

Magento 2の場合

Magento 2で同じことを試しましたが、製品の詳細を取得できませんでした。

私は次のコードで試しました:

Namespace/Modulename/Observer/salesQuoteItemSetCustomAttribute.php

<?php
namespace Namespace\Modulename\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Catalog\Model\Product;
use Magento\Checkout\Model\Cart;


class salesQuoteItemSetCustomAttribute implements ObserverInterface
{
    public function __construct(
        \Magento\Checkout\Model\Cart $cart,
        \Magento\Catalog\Model\Product $product
    ) {
        $this->cart = $cart;
        $this->product = $product;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $cartQuote= $this->cart->getItems()->getData();
        $prod= $this->product->getData();
        echo '<pre>';print_r($prod); exit;
    }
}

etc/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="sales_quote_save_after">
        <observer name="set_checkout_quote_id" instance="Magento\Checkout\Observer\SalesQuoteSaveAfterObserver" />
    </event>
</config>

etc/fieldset.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../../../../../../lib/internal/Magento/Framework/Object/etc/fieldset.xsd">
    <scope id="global">
        <fieldset id="sales_convert_quote_item">
            <field name="product_point">
                <aspect name="to_order_item" />
                <aspect name="to_invoice_item" />
                <aspect name="to_shipment_item" />
                <aspect name="to_cm_item" />
            </field>
        </fieldset>
        <fieldset id="sales_convert_order_item">
            <field name="product_point">
                <aspect name="to_quote_item" />
                <aspect name="to_invoice_item" />
                <aspect name="to_shipment_item" />
                <aspect name="to_cm_item" />
            </field>
        </fieldset>
    </scope>
</config>

上記のコードを使用して、カート内の属性の値を取得していますが、カスタム属性値を取得していません。商品データを印刷しようとすると、nullが返されます。

コードはMagento 1.9で正常に動作します。Magento 2.0.2で使用するにはどうすればよいですか?

custom attributeMagento 2でカートページを設定および表示する方法

回答:


10

Observeを作成する必要はありません。以下の簡単なコードで取得できます。

{MODULE_NAME}/etc/catalog_attributes.xml以下の内容で作成する必要があります:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/catalog_attributes.xsd">
    <group name="quote_item">
        <attribute name="custom_attribute"/>
    </group>
</config>

/templates/cart/item/default.phtml以下のコードでカスタム属性を取得できます。

echo $_item->getProduct()->getData('custom_attribute');

いい答えだ。魅力のように機能しました
ジャイミンスタリヤ2017

Thx、それは私の日を救った:)
K. Maliszewski

おかげで、
うまくいき

5

Magento 2の場合

次のコードを変更します。

Namespace/Modulename/Observer/salesQuoteItemSetCustomAttribute.php

<?php
namespace Namespace\Modulename\Observer;

use Magento\Framework\Event\ObserverInterface;

use Magento\Catalog\Model\Product;
use Magento\Checkout\Model\Cart;


class salesQuoteItemSetCustomAttribute implements ObserverInterface
{
   protected $_objectManager;

    public function __construct(
        \Magento\Framework\ObjectManagerInterface $objectManager,
        \Magento\Checkout\Model\Cart $cart,
        \Magento\Catalog\Model\Product $product,
        \Magento\Framework\ObjectManagerInterface $interface,
        \Magento\Quote\Model\Quote\Item $quote,
        \CollectionFactory $productCollectionFactory
    ) {
        $this->_objectManager = $objectManager;
        $this->cart = $cart;
        $this->product = $product;
        $this->objectManager = $interface;
        $this->quote = $quote;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $product = $observer->getProduct();
        $quoteItem = $observer->getQuoteItem();
        $quoteItem->setCustomAttribute($product->getCustomAttribute());
    }
}

etc/events.xml

<?xml version="1.0" encoding="UTF-8"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">

            <event name="sales_quote_item_set_product">
                <observer
         name="product_point_quote"
         instance="Namespace\Modulename\Observer\salesQuoteItemSetCustomAttribute"/>
            </event>
</config>

属性を次のように変換するために作成catalog_attributes.xmletcますquote

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/catalog_attributes.xsd">
    <group name="quote_item">
        <attribute name="custom_attribute"/>
    </group>
</config>

これにより、カートページに属性が表示されます


1
また、以下を使用して、QuoteItemオブジェクトに必要なほとんどすべてのカスタムデータを追加することもできます。- $quoteItem->setData('categoryData', $categoryData);オブザーバーexecute()メソッド。このため、何も追加する必要はありませんcatalog_attributes.xml
Bartosz Kubicki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.