[msProductRemains] 1.0.3-beta Новые сниппеты и пр.
Продолжаю совершенствовать компонент msProductRemains и решил написать о нововведениях в новой версии 1.0.3-beta, а также о некоторых исправлениях.
Важный момент — значения этой переменной берутся из нового одноимённого столбца в таблице `modx_ms2_products` (добавляется при установке/обновлении компонента).
Также этот столбец можно выводить в админке в списке товаров категории, добавив в настройках системы в конец параметра ms2_category_grid_fields слово remains. Или увидеть при редактировании товара, если добавить то же слово в ms2_product_main_fields или ms2_product_extra_fields.
Пример использования:
Пример использования:
Пример использования:
Всё также жду предложений по данному компоненту на тему того, что необходимо ещё добавить. Из имеющихся задач уже отмечены:
+ Добавлен плейсхолдер [[+remains]], доступный в списках товаров и на странице товара.
Он содержит только одну информацию — есть ли товар в наличии или нет и может принимать значения 1 или 0 соответственно. Доступен плейсхолдер везде, где вызывается список товаров (например, в чанке tpl.msProducts.row) или конкретный товар (например, в чанке msProduct.content).Важный момент — значения этой переменной берутся из нового одноимённого столбца в таблице `modx_ms2_products` (добавляется при установке/обновлении компонента).
Также этот столбец можно выводить в админке в списке товаров категории, добавив в настройках системы в конец параметра ms2_category_grid_fields слово remains. Или увидеть при редактировании товара, если добавить то же слово в ms2_product_main_fields или ms2_product_extra_fields.
Пример использования:
[[+remains:gt=`0`:then=`[[%msproductremains_text_more]]`:else=`[[%msproductremains_text_zero]]`]]
В результате выведет текст «Товар есть в наличии», если [[+remains]] = 1, иначе — «Товара нет в наличии».+ Добавлен сниппет getRemainsCount для вывода общего количества оставшихся единиц товара.
Сниппет позволяет выводить общее количество оставшихся единиц товара. То есть, если у вас 5 единиц размера XL и 6 единиц XXL, сниппет выведет 11 единиц товара. Если включена опция скрытия остатков, сниппет будет повторять плейсхолдер [[+remains]], но только значение сниппета будет определяться всё также перебором остатков, а не опросом значения столбца.Пример использования:
[[getRemainsCount? &id=`55`]] [[-обычный вывод с параметром]]
[[getRemainsCount]] [[-в данном случае в качестве ID будет взят ID текущего документа]]
[[getRemainsCount:toPlaceholder=`remains.count` ?&id=`55`]] [[-запишет значение в плейсхолдер [[+remains.count]] ]]
+ Добавлен сниппет msOptionsWithRemains для вывода опций только с остатками.
Данный сниппет — копия сниппета msOptions только с учётом остатков. Выводятся только опции, у которых имеются остатки. Весь синтаксис и все параметры те же, что и у оригинального msOptions.Пример использования:
[[!msOptionsWithRemains?name=`size`]]
* Изменено поведение при попытке добавления блюда без свойств.
Ранее, если были указаны остатки для свойств, но при добавлении в корзину свойства не были выбраны, выводилась ошибка «Оставшегося товара недостаточно», что не было верным, потому как невозможно было верно определить количество остатков. Теперь же в данном случае будет выведено сообщение «Не выбрано свойство товара». Текст сообщения хранится в лексиконе msproductremains_choose_var.И остальные обновления/исправления
Не считаю нужным описывать подробно все изменения, внесённые в компонент за последние несколько версий, поэтому предлагаю просто прочитать changelog компонента.Всё также жду предложений по данному компоненту на тему того, что необходимо ещё добавить. Из имеющихся задач уже отмечены:
- Добавить поддержку плагина AjaxManager.
- Добавить возможность указывать остатки по нескольким полям.
- Проверка количества оставшихся товаров перед изменением статуса заказа.
- Возвращать единицы товара при отмене или возврате заказа.
- Добавить единую страницу для просмотра остатков.
Поблагодарить автора
Отправить деньги
Комментарии: 4
Скачал — установил — работает. Похоже у разработчика есть свой магазин, где этот модуль в боевом режиме обкатывается. Хороший, законченный компонент!
Как можно загрузить остатки товаров массово, например из scv?
Как выгрузить остатки из 1с. Может есть у кого вариант?
Нашли в интернете такое решение, но оно почему-то не работает.
<?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
)
));
}
}
<?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
)
));
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.