Количество позиций в корзине minishop2
Если в корзину добавить Товар1 в количестве 2, и Товар2 в количестве 2, то общее количество товара показывает 4. Можно ли сделать, чтоб показывались именно позиции, в данном случае 2?
Комментарии: 11
Надо плагин сделать для минишопа как описано тут.
Работает это с версии минишоп 2.4 как я понимаю.
1. В папке /core/components/minishop2/custom/cart/ создаете файл mascarthandlerstatus.class.php который будет расширять класс корзины
2. В этом файле пишете
3. В плагине Console (если его нет, то надо поставить) выполняем следующий код
4. Далее идем в Системные настройки -> mimishop2 -> Класс обработчик корзины и указываем там msCartHandlerStatus
5. Теперь в плейсхолдере total_count_position будет отображаться количество позиций в корзине
6. Что бы все это и по аяксу обновлялось, в js в ваших скриптах или просто в конце страницы (главное что бы он был после подключения скрипта от минишопа) добавляем такой код
7. Теперь в миникорзине или корзине можно писать так
Работает это с версии минишоп 2.4 как я понимаю.
1. В папке /core/components/minishop2/custom/cart/ создаете файл mascarthandlerstatus.class.php который будет расширять класс корзины
2. В этом файле пишете
<?php
if(!class_exists('msCartInterface')) {
require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/mscarthandler.class.php';
}
class msCartHandlerStatus extends msCartHandler implements msCartInterface{
public function status($data = array())
{
$status = array(
'total_count' => 0,
'total_count_position' => 0,
'total_cost' => 0,
'total_weight' => 0
);
foreach ($this->cart as $item) {
if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
$status['total_count_position'] += 1;
$status['total_count'] += $item['count'];
$status['total_cost'] += $item['price'] * $item['count'];
$status['total_weight'] += $item['weight'] * $item['count'];
}
}
return array_merge($data, $status);
}
}
3. В плагине Console (если его нет, то надо поставить) выполняем следующий код
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addService('cart', 'msCartHandlerStatus',
'{core_path}components/minishop2/custom/cart/mascarthandlerstatus.class.php'
);
}
Таким образом мы добавляем новый обработчик корзины4. Далее идем в Системные настройки -> mimishop2 -> Класс обработчик корзины и указываем там msCartHandlerStatus
5. Теперь в плейсхолдере total_count_position будет отображаться количество позиций в корзине
6. Что бы все это и по аяксу обновлялось, в js в ваших скриптах или просто в конце страницы (главное что бы он был после подключения скрипта от минишопа) добавляем такой код
miniShop2.Cart.status = function (status) {
if (status['total_count'] < 1) {
location.reload();
}
else {
var $miniCart = $(miniShop2.Cart.miniCart);
if (status['total_count'] > 0 && !$miniCart.hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
$miniCart.addClass(miniShop2.Cart.miniCartNotEmptyClass);
}
$(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
$(miniShop2.Cart.totalCount).text(status['total_count']);
$(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
$('.ms2_total_count_position').text(status['total_count_position']);
if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
miniShop2.Order.getcost();
}
}
};
7. Теперь в миникорзине или корзине можно писать так
<span class="ms2_total_count_position">{$total_count_position}</span>
выполнение кода в Console даёт ошибку
Fatal error: Call to undefined method miniShop2::addService()
Посмотрите версию minishop2 — скорее всего, ниже 2.4. Указанный метод появился только в 2.4. Если так, выполнять код не требуется — достаточно сохранить файл по указанному адресу.
minishop2 версии 2.2
как в таком случае быть, можно ли получить кол-во позиций?
как в таком случае быть, можно ли получить кол-во позиций?
Просто, пропустите этот шаг
Плейсхолдер у вас тогда будет выглядеть так
Плейсхолдер у вас тогда будет выглядеть так
<span class="ms2_total_count_position">[[+total_count_position]]</span>
если я правильно понимаю, что происходит в 3ем пункте, то его пропустить не получится… на практике так и получается, не работает
Посмотрите, есть ли ошибки в логах модх и сервера.
Recoverable error: Argument 1 passed to pdoFetch::replaceTVCondition() must be of the type array, null given
вроде бы не связана с данной задачей
вроде бы не связана с данной задачей
если 6ой пункт не обязателен, а 3ий исключаем, тогда всё сделал, теперь пишет, что корзина пуста, даже после добавления товаров… это произошло после 4го пункта
Показать кол-во позиции и все, скриптом посчитать кол-во строк в заказе не судьба что ли?
дельный совет, «спасибо»… как я до этого сразу не додумался
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.