J'ai la classe suivante que j'utilise pour tester l'ajout au panier d'une manière personnalisée;
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();
}
}
Cela fonctionne très bien. Lorsque vous affichez le panier, il montre mon article, tout a l'air cool dans la base de données, etc. Cependant, le mini-chariot s'affiche toujours comme s'il n'y avait aucun article dans le panier.
Si j'ajoute ensuite un autre produit au panier en utilisant le bouton "ajouter au panier" sur les pages produit ou liste, il ajoute au panier et met à jour le mini-chariot pour afficher les deux articles.
Où déclenche-t-il le mini-chariot pour se mettre à jour ou comment le mini-chariot sait-il qu'il doit se rafraîchir?
Ce n'est pas directement lié à la question, mais si vous mettez à jour le panier via des appels AJAX dans des
require.js
fichiers Magento normaux , vous pouvez exiger l'Magento_Customer/js/customer-data
objet et demander au minicart de se rafraîchir de cette manière également:Source: https://github.com/magento/magento2/issues/5621
la source
customerData.invalidate(sections);
et Magento a pu faire le reste.En devanture si vous plongez dans la source dans la zone de minicart
Comme vous pouvez le voir ici, magento2 exécute des composants à l'intérieur de la balise de script et des données de liaison dynamique pour bloquer l'utilisation des knockoutJs par minicart
Quelque chose d'intéressant que je découvre
À partir de la disposition de la caisse. Il définit un
component
contenu minicart pour obtenir des données Continuez de voir,Magento_Checkout/js/view/minicart
vous verrezla source