Antworten:
Ich werde die Frage in zwei Teilen beantworten:
Das Ziel in link.phtml
ist $block->getCheckoutUrl()
. Sie sollten die Vorlage nicht ändern, um die Funktionalität zu ändern, sondern Magento\Checkout\Block\Onepage\Link
stattdessen den Block ändern . Erstellen Sie dazu ein Plugin mit einer Methode afterGetCheckoutUrl()
, um den Rückgabewert zu ändern.
Ab Magento-2.0 bieten die Serviceverträge in Magento_Checkout und Magento_Quote noch nicht die erforderlichen Methoden, daher verwenden wir das Warenkorbmodell. In deinem Plugin spritze es so ein:
public function __construct(\Magento\Checkout\Model\Cart $cart)
{
$this->cart = $cart;
}
Nachdem Sie nun Zugriff auf den Warenkorb haben, können Sie die Artikel auf verschiedene Arten abrufen. Dies ist im Grunde dasselbe wie in Magento 1 :
$this->cart->getQuote()->getItemsCollection()
Gibt eine Angebotseintragssammlung mit allen Einträgen zurück, die dem aktuellen Angebot zugeordnet sind.
$this->cart->getItems()
Dies ist eine Abkürzung für die obige Methode. Wenn jedoch kein Anführungszeichen vorhanden ist, wird ein leeres Array zurückgegeben, sodass Sie sich nicht darauf verlassen können, eine Auflistungsinstanz abzurufen.
$this->cart->getQuote()->getAllItems()
Lädt die Elementauflistung und gibt dann ein Array aller Elemente zurück, die nicht als gelöscht markiert sind (dh in der aktuellen Anforderung entfernt wurden).
$this->cart->getQuote()->getAllVisibleItems()
Lädt die Artikelsammlung und gibt dann ein Array aller Artikel zurück, die nicht als gelöscht markiert sind UND keine übergeordneten Artikel haben (dh Sie erhalten Artikel für gebündelte und konfigurierbare Produkte, aber nicht die zugehörigen untergeordneten Artikel). Jedes Array-Element entspricht einer angezeigten Zeile auf der Warenkorbseite.
Wählen Sie, was Ihren Bedürfnissen am besten entspricht. In den meisten Fällen ist die letzte Methode die, die Sie benötigen.
Die Verwendung von Magento \ Checkout \ Model \ Cart ist veraltet.
Sie sollten die Sitzung verwenden, um das Angebot und Ihre Einkaufswagenartikel zu erhalten.
use Magento\Checkout\Model\Session;
public function __construct(
...
Session $session
...
) {
...
$this->_session = $session;
...
}
public function yourFunction()
{
$items = $this->_session->getQuote()->getAllVisibleItems();
}
Ich bin mir sicher, dass Magento demnächst eine Art Repository für die Sitzung hinzufügen wird.
Soweit ich weiß, können Sie das aktuelle Angebot nicht einfach über Magento \ Quote \ Api \ CartRepositoryInterface oder Magento \ Quote \ Api \ CartManagementInterface abrufen. Wenn Sie jedoch die Kundennummer haben, können Sie eine dieser beiden Optionen verwenden Laden Sie das Angebot (was meiner Meinung nach so ist, wie es von Magento gewünscht wird) und erhalten Sie von dort Angebote / Warenkorb-Artikel.
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 />";
}
In neueren Versionen können Sie die API verwenden:
public function __construct(\Magento\Checkout\Model\Cart\CartInterface $cart)
{
$this->cart = $cart;
}
AllItems()
odergetAllVisibleItems()
alle Einzelteil in allen Wagen von jeder Rückkehr Shop von allen aktiven Zitaten Modell zu besuchen? Oder nur eines aus meinem Einkaufswagen (ich wette, ich verwende lieber ein Checkout-Sitzungsobjekt und hole mir ein QUTOE-Objekt daraus)? Der Unterschied ist wichtig, weil ich die Checkout-Sitzung in der Blockklasse verwenden wollte, aber tatsächlich ist qutoe leer, wenn ich in den Block komme.