Делаем дробное количество товаров в 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('msOrderProduct');
		$modx->map['msOrderProduct']['fields']['count'] = null;
		$modx->map['msOrderProduct']['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.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.