Vou responder a pergunta em duas partes:
I. Onde você deve alterar o URL do checkout?
O destino em link.phtml
é $block->getCheckoutUrl()
. Você não deve alterar o modelo para alterar a funcionalidade, mas alterar o bloco Magento\Checkout\Block\Onepage\Link
. Para fazer isso, crie um plugin para ele com um método afterGetCheckoutUrl()
para alterar o valor de retorno.
II Como obter todos os itens no carrinho?
A partir do magento-2.0, os contratos de serviço no Magento_Checkout e Magento_Quote ainda não fornecem os métodos necessários; portanto, usamos o modelo de carrinho. No seu plugin, injete-o assim:
public function __construct(\Magento\Checkout\Model\Cart $cart)
{
$this->cart = $cart;
}
Agora que você tem acesso ao carrinho, pode recuperar os itens de várias maneiras, o que é basicamente o mesmo que no Magento 1 :
$this->cart->getQuote()->getItemsCollection()
Retorna uma coleção de itens de cotação com todos os itens associados à cotação atual.
$this->cart->getItems()
Este é um atalho para o método acima, mas se não houver aspas, ele retornará uma matriz vazia; portanto, você não pode confiar em obter uma instância de coleção.
$this->cart->getQuote()->getAllItems()
Carrega a coleção de itens e, em seguida, retorna uma matriz de todos os itens que não estão marcados como excluídos (ou seja, foram removidos na solicitação atual).
$this->cart->getQuote()->getAllVisibleItems()
Carrega a coleção de itens e, em seguida, retorna uma matriz de todos os itens que não estão marcados como excluídos E não têm um pai (ou seja, você obtém itens para produtos configuráveis e em pacote configurável, mas não seus filhos associados). Cada item da matriz corresponde a uma linha exibida na página do carrinho.
Escolha o que melhor se adapta às suas necessidades. Na maioria dos casos, o último método é o que você precisa.
AllItems()
ougetAllVisibleItems()
retornará todos os itens em todos os carros de qualquer pessoa que visite a loja a partir de todos os modelos de cotação ativos? Ou apenas um do meu carrinho (eu aposto que eu prefiro usar o objeto da sessão de checkout e obter o objeto qutoe dele)? A diferença é importante, porque eu queria usar a sessão de checkout na classe de bloco, mas na verdade o qutoe está vazio quando entra no bloco.O uso do Magento \ Checkout \ Model \ Cart foi descontinuado.
Você deve usar a sessão para obter a cotação e os itens do carrinho.
Tenho certeza de que o Magento em breve adicionará algum tipo de repositório para a sessão.
Até onde eu sei, você não pode apenas obter a cotação atual usando Magento \ Quote \ Api \ CartRepositoryInterface ou Magento \ Quote \ Api \ CartManagementInterface, no entanto, se você tiver o ID do cliente, poderá usar um desses dois para carregue a cotação (que eu imagino é a maneira que o Magento deseja que você faça) e a partir daí obtenha itens de cotação / carrinho.
fonte
Magento\Checkout\Model\Session::getQuote()
.fonte
Nas versões mais recentes, você pode usar a API:
fonte