Yanıtlar:
Soruma iki bölümden cevap vereceğim:
Hedef bölgesi link.phtml
olduğunu $block->getCheckoutUrl()
. İşlevselliği değiştirmek için şablonu değiştirmemelisiniz, Magento\Checkout\Block\Onepage\Link
bunun yerine bloğu değiştirmelisiniz . Bunu yapmak için , dönüş değerini değiştirme yöntemiyle bir eklenti oluşturun afterGetCheckoutUrl()
.
İtibariyle magento-2.0 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.
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)
Magento\Checkout\Model\Session::getQuote()
.
$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 />";
}
Daha yeni sürümlerde API'yi kullanabilirsiniz:
public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
$this->cart = $cart;
}
AllItems()
veyagetAllVisibleItems()
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.