Magento 2 - Sepetinizde tüm ürünler nasıl bulunur?


23

Ödeme sayfasında ( chekout/cart) Alışveriş sepetindeki url hedefini sepet öğelerine ( link.phtml) göre düzenlemek istiyorum .

Sepetteki bütün eşyaları nasıl alabilirim? API kullanmadan bunu yapmak istiyorum. Teşekkürler.

Yanıtlar:


26

Soruma iki bölümden cevap vereceğim:

I. Ödeme URL’sini nerede değiştirmelisiniz?

Hedef bölgesi link.phtmlolduğunu $block->getCheckoutUrl(). İşlevselliği değiştirmek için şablonu değiştirmemelisiniz, Magento\Checkout\Block\Onepage\Linkbunun yerine bloğu değiştirmelisiniz . Bunu yapmak için , dönüş değerini değiştirme yöntemiyle bir eklenti oluşturun afterGetCheckoutUrl().

II. Alışveriş sepetindeki tüm ürünler nasıl alınır?

İtibariyle sepete ekleme modeli kullanmak böylece Magento_Checkout ve Magento_Quote hizmet sözleşmeleri, gerekli yöntemlerin temin henüz yoktur. Eklentinizdeki gibi bu enjekte:

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

Artık alışveriş sepetine erişebildiğiniz için, öğeleri temelde Magento 1 ile aynı olan birkaç yolla alabilirsiniz :

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

    Geçerli teklifle ilişkili tüm öğelerin bulunduğu bir teklif öğesi koleksiyonunu döndürür .

  • $this->cart->getItems()

    Bu, yukarıdaki yöntem için bir kısayoldur, ancak alıntı yoksa boş bir dizi döndürür, bu nedenle bir koleksiyon örneği almaya güvenemezsiniz.

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

    Öğe koleksiyonunu yükler, daha sonra silinmiş olarak işaretlenmemiş olan tüm öğelerin bir dizisini döndürür (yani, geçerli istekte kaldırıldı).

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

    Öğe koleksiyonunu yükler, daha sonra silinmiş olarak işaretlenmemiş VE üst öğeye sahip olmayan tüm öğelerin bir dizisini döndürür (yani, paketlenmiş ve yapılandırılabilir ürünler için öğeleri alırsınız, ancak ilişkili çocukları değil). Her bir dizi öğesi, sepet sayfasında görüntülenen bir satıra karşılık gelir.

İhtiyaçlarınıza en uygun olanı seçin. Çoğu durumda ihtiyacınız olan son yöntemdir.


Sepet modeli ve yöntemi get kullanarak AllItems()veya getAllVisibleItems()tüm aktif tırnak modelinden mağazayı ziyaret kimseye tüm arabaları tüm öğeleri dönecektir? Veya sepetimden sadece bir tanesi (Bunun için bahse girerim satın alma oturumu nesnesi kullanıp qutoe nesnesi almayı tercih ederim). Fark önemlidir, çünkü checkout oturumunu blok sınıfında kullanmak istedim, ancak bloğun içine girdiğimde aslında qutoe boştu.
Bartosz Kubicki

Her zaman geçerli oturumun sadece arabası.
Fabian Schmengler

Ve malların kategorisi nasıl elde edilir?
Рома Лытарь

21

Magento \ Checkout \ Model \ Cart'in kullanımı onaylanmadı.

Teklifi ve alışveriş sepetindeki ürünleri almak için oturumu kullanmalısın.

use Magento\Checkout\Model\Session;

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

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

Magento'nun yakında oturum için bir çeşit depo ekleyeceğinden eminim.

Söyleyebileceğim kadarıyla, Magento \ Quote \ Api \ CartRepositoryInterface veya Magento \ Quote \ Api \ CartManagementInterface kullanarak geçerli teklifi gerçekten alamıyorsunuz, ancak müşteri kimliğiniz varsa, bu ikisinden birini kullanabilirsiniz. alıntıyı yükleyin (ki bu, Magento'nun yapmanı istediği yoldur) ve oradan fiyat teklifi / sepet öğeleri alır.

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

4
Doğru yolun şu anda ödeme oturumunu kullanmak olduğuna inanıyorum Magento\Checkout\Model\Session::getQuote().
Giel Berkers

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 />";            
  }

Ve malların kategorisi nasıl elde edilir?
Рома Лытарь

0

Daha yeni sürümlerde API'yi kullanabilirsiniz:

public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
    $this->cart = $cart;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.