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

27 апреля мы опубликовали в ветке dev в репозитории GitHub ознакомительный релиз Shop-Script 7 для разработчиков. Эта статья служит описанием, что поменялось и как это использовать.
Изменения REST API
В связи с разработкой мобильного приложения для управления магазином, мы расширили REST API магазина. Поведение существующих методов не изменилось (за исключением исправления очевидных багов, конечно), но в некоторых случаях дополнилось новыми параметрами.
Вот беглое описание изменений.
- order.search и product.search (обновление)
1) В параметре 'fields' теперь можно передать в коллекцию, какие поля надо вернуть в ответе.
2) Для product.search можно передать в параметре 'filters' фильтры для коллекции (см. метод filters в коллекции товаров). - product.massUpdate (новый)
Эффективный метод для массового обновления цен и остатков. Также см. класс shopProductMassUpdate. - dashboard.sales, dashboard.salesTotal и product.sales (новые)
Служат для получения статистики по аналогии с виджетами магазина и графиком продаж одного товара. - pushnotification.enable и pushnotification.disable (новые)
Включение и отключение push-уведомлений. Использует API onesignal.com
Также см. shopNotifications::sendPushNotifications() - order.log (новый)
История заказа. - 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” незначительные и на них можно не обращать внимания.
Новые хуки для плагинов
Описание появится со дня на день!
Ждём новые хуки.
Вот честно не понимаю зачем вам, кроме понтов, сдался github, вы игнорируете даже PR с багами и выкладываете код только "по факту". Заканчивали бы этот фарс и сделали просто бесплатную установку для разработчиков.
Так удобно же оттуда обновляться. И я еще diff смотрю, например. И историю изменений иногда.
Ну и кое-какие PR все-таки принимают. :)
Сергей, обновляться проще через composer, от diff тоже толку мало - код лапшой и не задокументирован.
Я уже приноровился diff читать :)
Насколько вижу из кода, размеры видео hardcoded для youtube и для vimeo. Это с чем связано?
Да и чего неубного-то? Долго только.
Вот появился во фреймворке новый хук backend_header. Можно свои js-библиотеки и css подключать. Правда, там кавардак может начаться, когда 3 плагина подряд, например, sugar.js разных версий и конфигураций подключат... :)
В трансферах хуков не увидел. Лично для меня хуки не были бы лишними и при сохранении настроек магазина. В частности, удаление валюты. Не хватает мне там хука.
Сергей, они и раньше подключались - waPlugin имеет методы addCss\addJs
Добрый день! Подскажите как сделать, чтобы
корректно работало и в Shop-Script 6? Иначе Call to undefined method
Есть какая-то либо переменная для проверки версии скрипта в smarty?
Не могу скачать diff для темы дефолт. Выдает 404. В гитхабе авторизовался. Запрос на доступ давал.
Выложите плз на любой файлообменник.
Жаль что все шаблоны которые из коробки идут - на Smarty