У меня есть следующий класс, который я использую, чтобы проверить добавление в корзину нестандартным способом;
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();
}
}
Это прекрасно работает. Когда вы просматриваете корзину, она показывает мой товар, все отлично смотрится в базе данных и т. Д. Однако мини-карта все равно отображается так, как будто в корзине нет товаров.
Если я затем добавлю другой продукт в корзину, используя кнопку «Добавить в корзину» на страницах продуктов или списков, он добавит в корзину и обновит миникарту, чтобы показать оба товара.
Откуда он запускает обновление миникарты или откуда он узнает, что нужно обновить?
Это напрямую не связано с вопросом, но если вы обновляете корзину с помощью вызовов AJAX в обычных
require.js
файлах Magento , вы можете запроситьMagento_Customer/js/customer-data
объект и попросить мини-карту обновить также следующим образом:Источник: https://github.com/magento/magento2/issues/5621.
источник
customerData.invalidate(sections);
а потом Magento смог сделать все остальное.На витрине, если вы погрузитесь в источник в области мини-карт
Как вы можете видеть, magento2 выполняет компоненты внутри тега script и динамически связывает данные, чтобы заблокировать minicart, используя knockoutJs
Что-то интересное я узнаю
Из оформления заказа. Определите
component
для мини-карт-контента для получения данныхMagento_Checkout/js/view/minicart
.источник