Minishop2 количество товаров в корзине
Доброго времени дня!
Необходимо вывести в мини корзине количество товаров (кол-во строк в корзине).
Как вывести на странице разобрался:
Плейсхолдер {$total_count} видел, не подходит. Он выводит общее количество товара. В моем случае товар продается метрами.
Например: кладем в корзину 5 метров одного товара и 3 метра другого. Плейсхолдер
{$total_count} выведет 8, а надо 2 (т.к. в корзине 2 товара)
Решение:
1) Расширил класс корзины:
2) Что бы при добавлении в корзину у нас мини корзина сразу обновлялась дописал колбеки:
Необходимо вывести в мини корзине количество товаров (кол-во строк в корзине).
Как вывести на странице разобрался:
count(($miniShop2->cart->get())); А как сделать что бы при добавлении нового товара автоматически обновлялось не знаю.Плейсхолдер {$total_count} видел, не подходит. Он выводит общее количество товара. В моем случае товар продается метрами.
Например: кладем в корзину 5 метров одного товара и 3 метра другого. Плейсхолдер
{$total_count} выведет 8, а надо 2 (т.к. в корзине 2 товара)
Решение:
1) Расширил класс корзины:
<?php
if(!class_exists('msCartHandler')) {
require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/mscarthandler.class.php';
}
class myCartHandler extends msCartHandler implements msCartInterface{
public function status($data = array())
{
$status = array(
'total_count' => 0,
'total_cost' => 0,
'total_weight' => 0,
'total_num' => 0,
);
foreach ($this->cart as $item) {
if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
$status['total_count'] += $item['count'];
$status['total_cost'] += $item['price'] * $item['count'];
$status['total_weight'] += $item['weight'] * $item['count'];
$status['total_num']++;
}
}
return array_merge($data, $status);
}
} — теперь у нас появился новый плейсхолдер — total_num2) Что бы при добавлении в корзину у нас мини корзина сразу обновлялась дописал колбеки:
/* Добавление твоаров в корзине */
miniShop2.Callbacks.Cart.add.response.success = function(response) {
//console.log(response.data['total_num']);
miniShop2.Cart.totalNum = '.ms2_total_num';
$(miniShop2.Cart.totalNum).text(response.data['total_num']);
};
/* Изменение твоаров в корзине */
miniShop2.Callbacks.Cart.change.response.success = function(response) {
miniShop2.Cart.totalNum = '.ms2_total_num';
$(miniShop2.Cart.totalNum).text(response.data['total_num']);
};3) Добавляем в чанк с мини корзиной плейсхолдер и класс.<span class="ms2_total_num">{$total_num}</span>П.с. за наводку спасибо пользователю — Алексей Комментарии: 31
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Например: кладем в корзину 5 метров одного товара и 3 метра другого. Плейсхолдер выведет 8, а надо 2 (т.к. в корзине 2 товара)
В корзине 2 наименования товара, но каждого наименования по несколько штук (в моем случае метров). Так вот в миникорзине мне надо вывести цифру 2, вместо 83(на скрине)
СергейНу и понимать еще одну вещь, что например как у меня — майка с разными размерами — лежит в корзине как разные наименования!
Можно так: расширить класс mscarthandler.class.php, добавив методу status ещё один элемент, например total_num, где указывать то, что нужно. Он будет в response и его можно использовать в сниппете миникорзины или в js-callback miniShop2.Callbacks.Cart.change.response.success.
Это универсально, т.к. можно добавлять любую информацию и, например, выводить красивое окошко с информацией о добавленном товаре, составе корзины, скидки и т.д.
Можно как-то иначе, через плагин например, или сделать свой сниппет миникорзины, куда добавить нужный параметр, просто count($_SESSION['minishop2']['cart']) :-).
В общем вариантов несколько…
2) Создаем пустой js файл, пишем туда колбеки и подключаем после файла default.js (стандартный файл минишопа) любый удобным для вас способом
При этом ядро не страдает, мы его не меняем. Минишоп можно спокойно обновлять
подключил свой js в настройках minishop2, где параметр «скрипты фронтенда». Получилась такая строка:
[[+jsUrl]]web/default.js, /assets/templates/vogelundnoot/js/customCart.js
в консоли браузера выводится сообщение: «Загрузка script по адресу «http://vogel-noot/assets/components/minishop2/js/web/default.js,%20/assets/templates/vogelundnoot/js/customCart.js?v=5784beb5e7» не удалась.»
В браузере нажимаешь на «купить» страница перезагружается, и в корзине общее количество товара (например, 3 штуки), а не количество позиций.
Я в сниппет msMiniCart дописал на скорую руку
1. Создал класс myCartHandler.php в /core/components/minishop2/custom/cart/myCartHandler.php
2. Написал регистрацию в консоли:
3. Написал callback в /assets/templates/vogelundnoot/js/customCart.js
4. Прописал его в /core/components/minishop2/elements/snippets/snippet.ms_minicart.php:
(я в середине файла прописал).
Кэш сайта сбрасывал. Но что-то не заработало. В миникорзине не отображается количество позиций в корзине.
3) Добавляем в чанк с мини корзиной плейсхолдер и класс.
{$total_num}
Но не работает.
Тоже дошел до такого «способа», но для странички заказа… Там такая же ерунда, при просчете итераций.
SlavaSlavaСам код как вверху готовый.
службу назвал так
Выполнил ее через консоль.