
Полезные мелочи
Syrnik Топ-разработчик #6 с 2014 годаНабор небольших, но полезных доработок админки и витрины: подсказки менеджеру о товаре и заказе, хелпер для получения данных о купоне и инструмент, который аккуратно собирает JS и CSS разных плагинов в одном месте перед закрывающим тегом body .
Даты создания и изменения товара
В карточке товара в бэкенде, в правой колонке, показываются даты создания и последнего изменения товара. В настройках плагина показ можно отключить, а формат выбрать: только дата или дата со временем. Работает в классическом интерфейсе карточки товара (UI 1.3); в новом редакторе товара (UI 2.0) эта информация не выводится.
Срок доставки, который увидел клиент
При просмотре заказа в бэкенде менеджер видит расчётный срок доставки — тот же самый, что во время оформления заказа рассчитал и показал покупателю плагин расчёта стоимости доставки. Удобно, когда клиент спрашивает «а мне обещали доставку к пятнице» — не нужно поднимать переписку.
История правок товара
На карточке товара появляется вкладка с историей: кто и когда редактировал товар вручную. Импорт, синхронизация и другие автоматические изменения в эту историю не попадают — только действия менеджеров, выбранные из общей ленты событий магазина. Включается в настройках плагина. Как и даты выше, доступно только в классическом интерфейсе карточки товара (UI 1.3).
Информация о купоне по его ID
В заказе хранится только идентификатор использованного купона — получить его код, тип скидки или комментарий менеджера штатными средствами нельзя. Плагин добавляет хелпер, который по ID возвращает все данные о купоне.
Вызов хелпера в шаблоне:
{$coupon_info = $wa->shop->tipsPlugin->getCouponById(4)}
где 4 — ID купона. Например, в печатной форме заказа ID использованного купона можно взять из переменной $order.params.coupon_id (учтите: купона в заказе может не быть вовсе, а найденный купон — быть к этому моменту удалён).
Возвращаемое значение. Если купон найден — массив:
code — код купона
type — тип скидки: % (скидка в процентах), трёхбуквенный код валюты (скидка на сумму в этой валюте) или $FS (бесплатная доставка)
limit — ограничение на количество использований, или NULL , если ограничений нет
used — сколько раз купон уже использован (если used достиг limit — купон неактивен)
comment — комментарий к купону
extire_datetime — дата, до которой купон действует, или NULL , если срок не ограничен
Пример для печатной формы заказа:
{if !empty($order.params.coupon_id)}
{$coupon_info = $wa->shop->tipsPlugin->getCouponById($order.params.coupon_id)}
{if $coupon_info}
Использован купон {$coupon_info['code']}
Один порядок для JS и CSS перед </body>
Когда на сайте работает сразу несколько плагинов, каждый из которых подключает свой скрипт где придётся — в шапке, в середине страницы, где получится — это и тормозит рендеринг, и превращает вывод в кашу. Плагин добавляет одну точку сборки: событие-хук tips_plugin_footer_js , через которое любой плагин может отдать свои скрипты и стили, и хелпер темы дизайна, который собирает всё это в одном месте прямо перед закрывающим тегом body — там, где загрузка скриптов не блокирует отрисовку страницы.
Эффект появляется, только если хук поддерживают обе стороны : плагин, чей код вы хотите упорядочить, и тема дизайна, которая вызывает хелпер сборки. Поддержку легко добавить в любой плагин и в любую тему — но сделать это должны их авторы (или вы сами, если умеете править код). Требуется Shop-Script 8.18 или новее.
Как это устроено, если вам это интересно как разработчику. Плагин, который хочет отдать свои скрипты, регистрирует обработчик хука в своём plugin.php :
'handlers' => array(
'tips_plugin_footer_js' => 'footerScripts'
и возвращает из обработчика массив со ссылками на внешние скрипты ( links ) и/или инлайновым JS и CSS ( inline_js , inline_css ):
public function footerScripts() {
return array(
'links' => array('/wa-apps/shop/plugins/myplugin/js/myscript.js'),
'inline_js' => '$(function(){ console.log("it works!"); });',
'inline_css' => 'p.myplugin { font-size: 1rem; }'
Тема дизайна один раз вызывает хелпер плагина перед





