Делаем дробное количество товаров в MiniShop2
Всем привет! Было дело, меня попросили помочь сделать на сайте дробное количество товаров…
Само собой погуглил, нашёл от силы 3-4 вопроса на эту тему и 1 статью от @Артур Шевченко за которую ему большое спасибо. Которая однако, к сожалению не помогла полностью решить вопрос, т.к. возможно способ уже устарел.
Итак, погнали:
1. Открываем через phpMyAdmin таблицу modx_ms2_order_products, переходим во вкладку «Структура», нажимаем «Изменить» у поля count.
Выставляем значения:
2. Скачиваем файл и загружаем его по следующему пути:
3. Открываем консоль и выполняем код:
Переходим в Системные настройки -> MiniShop2 -> Корзина, или ищем по ключу ms2_cart_handler_class и меняем его значение с msCartHandler на наш новый customCartHandler.
4. Создаём плагин changeCountOnFloat со следующим содержимым:
5. Теперь дело за малым, меняем везде в коде товара (карточки/страница) input name=«count», на какой именно писать не буду, у всех свои классы стилизации и условия, главное отмечу, что надо изменить/добавить min=«0.**», max="" и step=«0.**»
P.S. Если на Вашем сайте предполагается добавление товаров в корзину от 0.1 или от 0.01, то необходимо поправить скрипт:
Вот и всё, если что то упустил, или можно сделать какой то шаг проще, пишите, буду очень благодарен!
Поблагодарить автора, а также немного порадовать других активных участников сообщества можно,
отправив донат одним из следующих способов:
Само собой погуглил, нашёл от силы 3-4 вопроса на эту тему и 1 статью от @Артур Шевченко за которую ему большое спасибо. Которая однако, к сожалению не помогла полностью решить вопрос, т.к. возможно способ уже устарел.
Итак, погнали:
1. Открываем через phpMyAdmin таблицу modx_ms2_order_products, переходим во вкладку «Структура», нажимаем «Изменить» у поля count.
Выставляем значения:
- Тип — DECIMAL
- Длина/Значения — 13,3
- По умолчанию — NULL
2. Скачиваем файл и загружаем его по следующему пути:
core/components/minishop2/custom/cart/
Переименовываем его в customCartHandler.class.php (т.е. меняем название вместе с форматом файла с .txt на .php)3. Открываем консоль и выполняем код:
<?php
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addService('cart', 'customCartHandler',
'{core_path}components/minishop2/custom/cart/customCartHandler.class.php'
);
}
Переходим в Системные настройки -> MiniShop2 -> Корзина, или ищем по ключу ms2_cart_handler_class и меняем его значение с msCartHandler на наш новый customCartHandler.
4. Создаём плагин changeCountOnFloat со следующим содержимым:
<?php
switch ($modx->event->name) {
case 'OnMODXInit':
$modx->loadClass('msOrder');
$modx->map['msOrder']['fields']['count'] = null;
$modx->map['msOrder']['fieldMeta']['count'] = array(
'dbtype' => 'decimal',
'precision' => '13,3',
'phptype' => 'float',
'attributes' => 'unsigned',
'null' => true,
'default' => 1.0,
);
break;
}
Во вкладке Системные события ставим галочку у OnMODXInit.5. Теперь дело за малым, меняем везде в коде товара (карточки/страница) input name=«count», на какой именно писать не буду, у всех свои классы стилизации и условия, главное отмечу, что надо изменить/добавить min=«0.**», max="" и step=«0.**»
P.S. Если на Вашем сайте предполагается добавление товаров в корзину от 0.1 или от 0.01, то необходимо поправить скрипт:
assets/components/minishop2/js/web/default.js
Здесь находим if (status['total_count'] < 1) {
и вместо 1 ставим 0.1 или 0.01Вот и всё, если что то упустил, или можно сделать какой то шаг проще, пишите, буду очень благодарен!
Поблагодарить автора, а также немного порадовать других активных участников сообщества можно,
отправив донат одним из следующих способов:
- На карту Тинькофф https://tinkoff.ru/sl/2V9U9RrcJZP
- На YooMoney https://yoomoney.ru/fundraise/RPkkYwNcL7A.230131
- На Qiwi кошелек https://qiwi.com/p/77012827737
- Казахстан Каспи по номеру +7(701)282-77-37
- А еще у нас теперь есть крипта. Кому удобнее донатить с ней — пишите
Комментарии: 2
Не понял зачем плагин, я делал без него меняя класс корзины и JS. Вообще ничего вроде больше не трогал. Отлично работает. Только обычно когда реализовывается добавление дробного кол-ва товаров нужно отображать в миникорзине(если такая есть) не кол-во товаров всего, а кол-во позиций в корзине.
UPD: Понял зачем плагин. Закинул клиенту где делал такой функционал :)
UPD: Понял зачем плагин. Закинул клиенту где делал такой функционал :)
Всё равно тут поясню зачем) Затем, что бы Minishop2 воспринимал поле count как DECIMAL а не INT.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.