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