msProductRemains. Учёт по нескольким опциям!
Наконец-то дописана вторая версия компонента msProductRemains для учёта складских остатков товаров, которая несёт в себе одно из самых востребованных нововведений — учёт остатков по нескольким опциям! То есть теперь можно вести учёт остатков по комбинациям опций, например, цветов и размеров.

На самом деле, компонент не потому получил версию 2 и снова получил статус beta. Дело в том, что он был полностью переписан, логика работы изменилась, но функции остались те же. Хотя от части фишек пришлось отказаться и, надеюсь, это временно.
Самый печальный момент в этом обновлении — оно несовместимо с предыдущими версиями. По факту, произвести обновление компонента через панель управления сайтом можно, но, грубо говоря, это приведёт к установке компонента с нуля. А всё потому, что:
Но плюсы перехода на новую версию перекрывают минусы, которые решаются за минимальное время. Добавляется множество отличных фишек и решаются старые проблемы. А именно:
Обновление уже добавлено в наш любимый магазин. Скачать обновление или купить компонент можно через панель управления сайтом, если магазин подключен к вашему сайту.

На самом деле, компонент не потому получил версию 2 и снова получил статус beta. Дело в том, что он был полностью переписан, логика работы изменилась, но функции остались те же. Хотя от части фишек пришлось отказаться и, надеюсь, это временно.
Самый печальный момент в этом обновлении — оно несовместимо с предыдущими версиями. По факту, произвести обновление компонента через панель управления сайтом можно, но, грубо говоря, это приведёт к установке компонента с нуля. А всё потому, что:
- Остатки теперь хранятся в отдельной таблице и при обновлении не переносятся в новую таблицу.
- Удален сниппет `msOptionsWithRemains`, а сниппет `getRemainsCount` переименован в `getRemains`.
Вместо `msOptionsWithRemains` используйте стандартный `msOptions` - Все настройки компонента и записи словаря получили укороченные ключи.
- Удалён плейсхолдер [[+remains]] и соответствующий столбец таблицы.
Вернуть можно путём добавления вызова сниппета
[[!getRemains:toPlaceholder=`remains`]] Вся логика с фронта сайта временно удалена.Появилась снова в 2.0.4-beta.
Но плюсы перехода на новую версию перекрывают минусы, которые решаются за минимальное время. Добавляется множество отличных фишек и решаются старые проблемы. А именно:
- Одной из самых серьёзных проблем компонента была проблема с кэшем MODx. После обновления остатков, на фронте сайта висела старая информация и при определённых условиях посетителю удавалось успешно обходить ограничения компонента. И всё это из-за того, что кэш страницы обновлялся через раз. Теперь проблема с кэшем неактуальна, потому как информация об остатках хранится в отдельной таблице.
- Хранение остатков в отдельной таблице увеличивает скорость работы компонента, потому как исключается огромное количество лишних запросов к таблице контента сайта, где ранее хранилась информация об остатках.
- Редактирование остатков стало более удобно, оформлено красиво и работает быстро. Теперь при редактировании товара обновлять страницу после изменения свойств товаров необязательно, достаточно обновить таблицу остатков на соответствующей вкладке страницы.
- При проверке остатков товаров всей корзины теперь выводится каких именно товаров недостаточно.
Обновление уже добавлено в наш любимый магазин. Скачать обновление или купить компонент можно через панель управления сайтом, если магазин подключен к вашему сайту.
Комментарии: 34
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
То ли автор, то ли тот, кто загружал, переименовал сам файл как версию 2.0.2-beta, в внутри 2.0.0-beta, отсюда и ошибка.
Поправил, теперь всё работает.
Не удается компонент установить. Посмотри тикет, пожалуйста: modstore.pro/cabinet/tickets/4610/1900/
Необходимо распаковать архив в корень сайта, запустить его по ссылке www.ваш_сайт.ru/mspr_convert.php. После появления записи «Done!» необходимо обновить кэш сайта и удалить файл скрипта. Готово!
Ещё один момент: обязательно обновите компонент до версии 2.0.1-beta, там небольшие поправки для формирования остатков по одной опции. Поправки важные, если не обновится, в дальнейшем понадобится снова поправлять вид остатков в базе данных.
выдает ошибку:
и ничего не копирует.
А на страничке товара — все ок, как надо по кол-ву остатков.
Ссылка: s3036.h4.modhost.pro/manager/
Решением проблемы станет удаление поля remains в таблице modx_ms2_products. Желательно ещё удалить папки
если заменить её на
то все работает,
а сверху дописать
при чем сниппет getRemains хорошо выдает остатки
Вместо сниппета msOptionsWithRemains лучше использовать msOptions.
это как-то можно поправить?
<?php
if ($modx->event->name == 'mSyncOnProductImport') {
$msProductRemains = $modx->getService('msproductremains','msProductRemains',$modx->getOption('mspr_core_path',null,$modx->getOption('core_path').'components/msproductremains/').'model/msproductremains/',$scriptProperties);
if (!($msProductRemains instanceof msProductRemains) || !$msProductRemains->active) return '';
if(isset($properties['Количество'])){
$product_id = $resource->get('id');
$remains = $properties['Количество'];
$msProductRemains->saveRemains(array_merge($product->get('options')?:array(), array(
'product_id' => $product_id,
'count' => $remains
)
));
}
}
так не работает
Если 0 = нет в наличии, иначе n шт.
наверное условия можно переписать короче, но во первых так нагляднее, а во вторых — я ненавижу тернарный оператор)
Например в чанке у меня вывод такой
И чанк tpl-msOptions
Это я ставлю в чанк tpl-msOptions?
и в {if $getR > 0} оборачиваю, то что внутри {foreach $values as $value index=$index}
Если просто ставлю отдельно, то выводит нули, хотя опции значения опций имеют остатки, кроме одной
и посмотри выведи {$getR} что туда приходит, а потом проверяй
если убираю 'size' => $value, то начинает выводится общий остаток.
1. Как сделать В случае запаса <= 0 чтобы [[!getremains?]] вернул «0»
2. Есть ли способ добавить более одного идентификатора стауса в «mspr_orderback_status»?
20 апреля 2022, 13:15 комментарий.
остается второй вопрос