Mam następującą klasę, której używam do testowania dodawania do koszyka w niestandardowy sposób;
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();
}
}
To działa świetnie. Gdy przeglądasz koszyk, pokazuje mój przedmiot, wszystko wygląda fajnie w bazie danych itp. Jednak minikart nadal pokazuje, jakby w koszyku nie było żadnych przedmiotów.
Jeśli następnie dodam kolejny produkt do koszyka za pomocą przycisku „dodaj do koszyka” na stronach produktu lub list, dodaje on do koszyka i aktualizuje minikart, aby wyświetlał oba elementy.
Gdzie powoduje, że minikart sam się aktualizuje lub skąd minikart wie, że musi się odświeżyć?
Nie jest to bezpośrednio związane z pytaniem, ale jeśli aktualizujesz koszyk za pomocą wywołań AJAX w normalnych
require.js
plikach Magento , możesz wymagaćMagento_Customer/js/customer-data
obiektu i poprosić minicart o odświeżenie również w ten sposób:Źródło: https://github.com/magento/magento2/issues/5621
źródło
customerData.invalidate(sections);
a potem Magento mógł zrobić resztę.W sklepie, jeśli nurkujesz w źródle w obszarze minicart
Jak widać tutaj magento2 wykonuje komponenty wewnątrz znacznika skryptu i danych dynamicznego wiązania, aby zablokować minicart za pomocą knockoutJs
Odkryłem coś interesującego
Z układu kasy. Określa
component
zawartość dla minicart, aby uzyskać dane KontynuujMagento_Checkout/js/view/minicart
, zobaczyszźródło