Tengo la siguiente clase que estoy usando para probar agregar al carrito de forma 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();
}
}
Esto funciona muy bien. Cuando ve el carrito, muestra mi artículo, todo se ve bien en la base de datos, etc. Sin embargo, el minicart todavía se muestra como si no hubiera artículos en la cesta.
Si luego agrego otro producto al carrito usando el botón "agregar al carrito" en el producto o en las páginas de listado, se agrega al carrito y actualiza el minicart para mostrar ambos artículos.
¿Dónde activa el minicart para actualizarse o cómo sabe el minicart que necesita actualizarse?
Esto no está directamente relacionado con la pregunta, pero si está actualizando el carrito a través de llamadas AJAX en
require.js
archivos Magento normales , puedeMagento_Customer/js/customer-data
solicitar el objeto y pedirle al minicart que también se actualice de esta manera:Fuente: https://github.com/magento/magento2/issues/5621
fuente
customerData.invalidate(sections);
y luego Magento pudo hacer el resto.En el escaparate si bucea en la fuente en el área de minicart
Como puede ver aquí, magento2 ejecuta componentes dentro de la etiqueta de script y datos de enlace dinámico para bloquear el uso de minicart knockoutJs
Algo interesante que descubro
Desde el diseño de pago. Define un
component
contenido de minicart para obtener datos Continuar verMagento_Checkout/js/view/minicart
veráfuente