[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
1
1 693
+6
Поблагодарить автора Отправить деньги

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

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