Shop-Script 7.0.0: ознакомительный релиз для разработчиков

Леонид Вакуленко

27 апреля мы опубликовали в ветке dev в репозитории GitHub ознакомительный релиз Shop-Script 7 для разработчиков. Эта статья служит описанием, что поменялось и как это использовать.

Изменения REST API

В связи с разработкой мобильного приложения для управления магазином, мы расширили REST API магазина. Поведение существующих методов не изменилось (за исключением исправления очевидных багов, конечно), но в некоторых случаях дополнилось новыми параметрами.

Вот беглое описание изменений.

  1. order.search и product.search (обновление)
    1) В параметре 'fields' теперь можно передать в коллекцию, какие поля надо вернуть в ответе.
    2) Для product.search можно передать в параметре 'filters' фильтры для коллекции (см. метод filters в коллекции товаров).
  2. product.massUpdate (новый)
    Эффективный метод для массового обновления цен и остатков. Также см. класс shopProductMassUpdate.
  3. dashboard.sales, dashboard.salesTotal и product.sales (новые)
    Служат для получения статистики по аналогии с виджетами магазина и графиком продаж одного товара.
  4. pushnotification.enable и pushnotification.disable (новые)
    Включение и отключение push-уведомлений. Использует API onesignal.com
    Также см. shopNotifications::sendPushNotifications()
  5. order.log (новый)
    История заказа.
  6. rights
    Информация о правах тоступа пользователя, авторизованного в API.

Вероятнее всего, к релизу Shop-Script 7 появится ещё несколько методов REST API.

Каналы продаж

Хорошее описание каналов продаж без технических подробностей есть в блоге.

С технической точки зрения, каналы продаж - это инструмент для фильтрации заказов, интегрированный в отчёты. Он обобщает старую фильтрацию по витринам.

У всех заказов появляется запись 'sales_channel' в order_params. Она добавляется во время создания заказа. А для старых заказов вписывается одним из мета-обновлений. Заказ без такой записи - это ошибка, и так быть не должно. При построении отчётов заказы группируются по значениям этой записи. В селекторе в разделе отчётов справа сверху, где раньше были витрины, теперь вместо них перечисляются уникальные значения 'sales_channel'.

Есть три строенных типа каналов продаж - это витрины, бекенд и виджеты товаров. Они описаны в блоге. Плагины, которые создают новый или модифицируют имеющийся заказ, могут добавлять новые каналы продаж, изменив 'sales_channel' в order_params. Формат записи такой: 'plugin_:<любая строка>'. Пример можно посмотреть в плагине yandexmarket. Все заказы этого плагина идут в один канал продаж (<любая строка> всегда пустая), но это не обязательно. Например, для витрин используется что-то вроде 'storefront:example.com/shop'.

Виртуальные склады и распределение заказов по складам

В седьмой версии магазина усложняется механизм складов.

Во-первых, у "обычных" складов, которые были всегда и которые хранятся в shop_stock, появился параметр public. Не-публичные склады не показываются во фронтенде в карточке товара, а в остальном ведут себя так же. Дополнительно, в настройках каждого поселения можно выключить и часть публичных складов тоже. Все существующие старые склады остаются публичными, все сущесвтующие поселения продолжают показывать все публичные склады.

Во-вторых, появляется новая сущность: виртуальный склад. Для виртуальных складов есть своя отдельная таблица shop_virtualstock. По виртуальным складам не ведётся учёт товаров. С точки зрения управления остатками, виртуальных складов нет. Вместо этого, в настройках виртуального склада указывается несколько реальных складов, и остаток на виртуальном складе является суммой остатков на реальных. Нигде в БД это не отражено, а считается на лету в момент генерации страницы.

Виртуальные склады используются для двух вещей. Во-первых, они могут быть публичными и показываться во фронтэнде в карточке товаров. Это позволяет объединить несколько складов в один, видимый покупателю. Во-вторых, виртуальный склад можно настроить как склад для списания при оформлении заказа с витрины. Заказ, привязанный к виртуальному складу, для каждого товара выберет реальный склад для списания по принципу "первый на котором есть такой товар". Порядок реальных складов для списания задаётся в настройках виртуального склада.

Наконец, становится более гибким механизм привязки заказа к складу. Раньше для каждой витрины можно было указать склад для списания, и все заказы с этой витрины привязывались к этому одному складу. Этот механизм планируется расширить. На странице настройки складов появится управление списком правил вида "условие => склад". При создании заказа условия проверяются сверху вниз и первое сработавшее определяет склад, к которому привязывается заказ. Встроенные условия такие: 1) способ доставки такой-то; 2) регион в указанном адресе покупателя такой-то; 3) витрина такая-то. Плагины могут встроиться в этот редактор правил и добавить дополнительные условия.

Трансферы и сопроводительные накладные

Трансферы - это новый механизм для учёта поступлений и перемещения товаров со склада на склад. Управление трансферами находится в разделе Товары - Склад: над вкладками кнопка "Новый трансфер" и таблица со списком.

Трансфер - это набор товаров, не привязанный ни к одному из складов. Трансфер можно списать с существующего склада (уменьшив остатки) или создать новое поступление. Трансфер можно откатить или выполнить. Выполненный трансфер записывает свои товары на склад назначения. Откат вернёт всё как было - либо обратно на склад списания, если он был, либо в никуда.

Для трансферов можно печатать сопроводительные накладные. Шаблоны для них формируются плагинами, по аналогии с печатными формами для заказов. Пример такого плагина - новый transferconsignment.

Изменения в темах дизайна

Полный diff для темы “Дефолт 3.0” в Shop-Script 7.0.0: https://github.com/webasyst/shop-script/commit/2eb...

Разработчикам тем дизайна в этом diff стоит обратить внимание на две новые фичи, которые появились в Shop-Script 7.

1. Возможность прикрепить к товару видео с YouTube и Vimeo.

В бекенде Shop-Script 7 админ указывает адрес (URL) видео, и посетители сайта смогут посмотреть его на витрине в основной фотогалерее товара. Для отображения видео во фронтенде необходимо внести изменения в файл product.html

2. Для промо-карточек (Товары > Промо) теперь можно включить таймер обратного отсчета, что позволит владельцам магазинов удобнее запускать новые акции и спецпредложения. В “Дефолт 3.0” для обратного отсчета используется плагин countdownTimer http://plugins.jquery.com/countdownTimer/ (лицензии MIT, GPLv3) и добавлен код отображения таймера в шаблон home.html.

В вашей теме дизайна вы можете использовать собственную реализацию таймера обратного отсчета.

Остальные изменения в теме “Дефолт 3.0” незначительные и на них можно не обращать внимания.

Новые хуки для плагинов

Описание появится со дня на день!

28 апреля 2016
  • Алексей 28 апреля 2016 08:38

    Ждём новые хуки.

  • info@ravencode.ru 28 апреля 2016 16:49

    Вот честно не понимаю зачем вам, кроме понтов, сдался github, вы игнорируете даже PR с багами и выкладываете код только "по факту". Заканчивали бы этот фарс и сделали просто бесплатную установку для разработчиков.

  • Syrnik.com 28 апреля 2016 17:14

    Так удобно же оттуда обновляться. И я еще diff смотрю, например. И историю изменений иногда.

    Ну и кое-какие PR все-таки принимают. :)

  • info@ravencode.ru 28 апреля 2016 17:44

    Сергей, обновляться проще через composer, от diff тоже толку мало - код лапшой и не задокументирован.

  • Syrnik.com 29 апреля 2016 06:18

    Я уже приноровился diff читать :)

    Насколько вижу из кода, размеры видео hardcoded для youtube и для vimeo. Это с чем связано?

  • Syrnik.com 29 апреля 2016 10:55

    Да и чего неубного-то? Долго только.

    Вот появился во фреймворке новый хук backend_header. Можно свои js-библиотеки и css подключать. Правда, там кавардак может начаться, когда 3 плагина подряд, например, sugar.js разных версий и конфигураций подключат... :)

  • Shold 30 апреля 2016 02:48

    В трансферах хуков не увидел. Лично для меня хуки не были бы лишними и при сохранении настроек магазина. В частности, удаление валюты. Не хватает мне там хука.

  • info@ravencode.ru 1 мая 2016 06:24

    Сергей, они и раньше подключались - waPlugin имеет методы addCss\addJs

  • Евгений 11 мая 2016 03:25

    Добрый день! Подскажите как сделать, чтобы

    {$video = $product->getVideo(['96x96'])}

    корректно работало и в Shop-Script 6? Иначе Call to undefined method

    Есть какая-то либо переменная для проверки версии скрипта в smarty?

  • Александр 11 мая 2016 04:47


    Добрый день! Подскажите как сделать, чтобы
    {if method_exists($product, 'getVideo')}
        ...
    {/if}
  • focus15 18 мая 2016 17:22

    Не могу скачать diff для темы дефолт. Выдает 404. В гитхабе авторизовался. Запрос на доступ давал.

    Выложите плз на любой файлообменник.

  • Рик Ролл 16 ноября 2016 18:11

    Жаль что все шаблоны которые из коробки идут - на Smarty


Добавление новых комментариев к этой теме отключено.