Eu tenho a seguinte classe que estou usando para testar a adição ao carrinho de maneira personalizada;
use Magento\Framework\App\Action;
use Magento\Checkout\Model\Cart;
class Add extends Action\Action
{
protected $cart;
public function __construct(
Action\Context $context,
Cart $cart
){
$this->cart = $cart;
parent::__construct($context);
}
public function execute()
{
$this->cart->addProductsByIds([1])
->save();
}
}
Isso funciona muito bem. Quando você visualiza o carrinho, ele mostra meu item, tudo parece legal no banco de dados, etc. No entanto, o minicart ainda mostra como se não houvesse itens na cesta.
Se eu adicionar outro produto ao carrinho usando o botão "adicionar ao carrinho" no produto ou nas páginas de listagem, ele adiciona ao carrinho e atualiza o minicart para mostrar os dois itens.
Onde ele aciona o minicart para se atualizar ou como o minicart sabe que precisa atualizar?
Isso não está diretamente relacionado à pergunta, mas se você estiver atualizando o carrinho por meio de chamadas AJAX em
require.js
arquivos Magento normais , poderá exigir oMagento_Customer/js/customer-data
objeto e solicitar ao minicart que atualize dessa maneira:Fonte: https://github.com/magento/magento2/issues/5621
fonte
customerData.invalidate(sections);
e o Magento foi capaz de fazer o resto.Na loja, se você mergulhar na fonte na área de minicart
Como você pode ver aqui, o magento2 executa componentes dentro da tag de script e dos dados de ligação dinâmica para bloquear o uso do minicart por knockoutJs
Algo interessante que eu descubro
No layout do Google Checkout. Ele define um
component
para o minicart-content para getdata Continue vejaMagento_Checkout/js/view/minicart
você veráfonte