Magento 2-すべてのアイテムをカートに入れる方法


23

チェックアウトページ(chekout/cart)で、カートアイテム(link.phtml)に基づいてチェックアウトボタンのURLリンク先を編集します。

すべてのアイテムをカートに入れるにはどうすればよいですか?APIを使用せずにこれを行いたいです。ありがとう。

回答:


26

この質問には2つの部分で回答します。

I.チェックアウトURLはどこで変更する必要がありますか?

の宛先はlink.phtmlです$block->getCheckoutUrl()。機能を変更するためにテンプレートを変更するのではなく、Magento\Checkout\Block\Onepage\Link代わりにブロックを変更する必要があります。そのためには、戻り値を変更するメソッドを使用してプラグインを作成しafterGetCheckoutUrl()ます。

II。カート内のすべてのアイテムを取得する方法は?

時点では、Magento_CheckoutおよびMagento_Quoteのサービスコントラクトは必要なメソッドをまだ提供していないため、カートモデルを使用します。プラグインで次のように挿入します。

public function __construct(\Magento\Checkout\Model\Cart $cart)
{
    $this->cart = $cart;
}

カートにアクセスできるようになったので、いくつかの方法でアイテムを取得できます。これは基本的にMagento 1と同じです。

  • $this->cart->getQuote()->getItemsCollection()

    現在の見積に関連付けられているすべてのアイテムを含む見積アイテムのコレクションを返します。

  • $this->cart->getItems()

    これは上記のメソッドのショートカットですが、引用符がない場合は空の配列を返すため、コレクションインスタンスの取得に頼ることはできません。

  • $this->cart->getQuote()->getAllItems()

    アイテムコレクションをロードし、削除済みとしてマークされていない(つまり、現在のリクエストで削除された)すべてのアイテムの配列を返します。

  • $this->cart->getQuote()->getAllVisibleItems()

    アイテムコレクションをロードし、削除済みとしてマークされておらず、親を持たないすべてのアイテムの配列を返します(つまり、バンドルされた構成可能な製品のアイテムを取得しますが、関連する子は取得しません)。各配列項目は、カートページに表示される行に対応します。

ニーズに最適なものを選択してください。ほとんどの場合、最後の方法が必要です。


Cartモデルとメソッドを使用すると、すべてのアクティブな見積モデルから店舗を訪れた人のすべてのカート内のすべてのアイテムを取得AllItems()またはgetAllVisibleItems()返しますか?または、カートから1つだけ(チェックアウトセッションオブジェクトを使用して、そこからqutoeオブジェクトを取得する方がいいと思います)?ブロッククラスでチェックアウトセッションを使用したかったため、違いは重要ですが、実際にはブロック内に入るとqutoeは空になります。
バルトシュクビッキ

常に現在のセッションのカートのみです。
ファビアンシュメングラー

商品のカテゴリを取得する方法は?
РомаЛытарь

21

Magento \ Checkout \ Model \ Cartの使用は非推奨です。

セッションを使用して、見積もりとカートのアイテムを取得する必要があります。

use Magento\Checkout\Model\Session;

public function __construct(
        ...
        Session $session
        ...
    ) {
        ...
        $this->_session = $session;
        ...
    }

public function yourFunction()
{
    $items = $this->_session->getQuote()->getAllVisibleItems();
}

Magentoがセッション用のリポジトリをすぐに追加すると確信しています。

私が知る限り、Magento \ Quote \ Api \ CartRepositoryInterfaceまたはMagento \ Quote \ Api \ CartManagementInterfaceを使用して現在の見積もりを取得することはできませんが、顧客IDがある場合は、これら2つのいずれかを使用して見積もりを読み込み(Magentoの希望通り)、そこから見積もり/カートのアイテムを取得します。

CartManagementInterface getCartForCustomer($customerId)
CartRepositoryInterface getForCustomer($customerId)

4
適切な方法は今チェックアウトセッションを使用することだと思いますMagento\Checkout\Model\Session::getQuote()
ギールバーカーズ

10
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $cart = $objectManager->get('\Magento\Checkout\Model\Cart'); 

// retrieve quote items collection
$itemsCollection = $cart->getQuote()->getItemsCollection();

// get array of all items what can be display directly
$itemsVisible = $cart->getQuote()->getAllVisibleItems();

// retrieve quote items array
 $items = $cart->getQuote()->getAllItems();

foreach($items as $item) {
     echo 'ID: '.$item->getProductId().'<br />';
      echo 'Name: '.$item->getName().'<br />';
       echo 'Sku: '.$item->getSku().'<br />';
       echo 'Quantity: '.$item->getQty().'<br />';
      echo 'Price: '.$item->getPrice().'<br />';
    echo "<br />";            
  }

商品のカテゴリを取得する方法は?
РомаЛытарь

0

新しいバージョンでは、APIを使用できます。

public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
    $this->cart = $cart;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.