[msProductRemains] 1.0.3-beta Новые сниппеты и пр.

Продолжаю совершенствовать компонент msProductRemains и решил написать о нововведениях в новой версии 1.0.3-beta, а также о некоторых исправлениях.

+ Добавлен плейсхолдер [[+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 компонента.

Всё также жду предложений по данному компоненту на тему того, что необходимо ещё добавить. Из имеющихся задач уже отмечены:
  1. Добавить поддержку плагина AjaxManager.
  2. Добавить возможность указывать остатки по нескольким полям.
А вот что уже готово и ожидает вас в релизе 1.0.4-beta:
  1. Проверка количества оставшихся товаров перед изменением статуса заказа.
  2. Возвращать единицы товара при отмене или возврате заказа.
  3. Добавить единую страницу для просмотра остатков.
Сергей Фещуков
Сергей Фещуков
30 марта 2015, 05:15
modx.pro
2 041
Поблагодарить автора Отправить деньги

Комментарии: 4

Алексей
21 августа 2015, 15:43
Скачал — установил — работает. Похоже у разработчика есть свой магазин, где этот модуль в боевом режиме обкатывается. Хороший, законченный компонент!
    Сергей Самусев
    11 ноября 2015, 13:25
    Как можно загрузить остатки товаров массово, например из scv?
      Алексей
      24 января 2018, 15:08
      Как выгрузить остатки из 1с. Может есть у кого вариант?
        Алексей
        24 января 2018, 16:17
        Нашли в интернете такое решение, но оно почему-то не работает.
        <?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
        )
        ));
        }
        }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          4