Блог

Новая версия плагина Параметры для Метрики

Сегодня опубликована новая версия плагина «Параметры заказов для Яндекс.Метрики». Несмотря на то, что обновление заключается всего в одной фразе «Добавлена раздельная настройка счетчиков для разных витрин», внутри плагин поменялся почти на половину. Пришлось переделать систему хранения настроек, так как штатная не позволяет хранить в подходящем виде раздельные настройки профилей и все такое.

Надеемся, всем понравится.

Хэширование паролей

Для совместимости с предыдущими версиями скриптов Webasyst во фреймворке по умолчанию используется очень простой и нестойкий алгоритм хеширования пользовательских паролей, позволяющий довольно быстро восстанавливать пароль методом перебора. Для хеширования по-умолчнию используется функция PHP md5().

В качестве рекомендации, в глубине документации сказано, что с версии фреймворка 1.0.8 можно задать собственную функцию для хэширования. Но есть одна неочевидная тонкость: для хранения хэша Webasyst Framework использует поле БД длиной 32 знака. То есть сохранить хеш SHA256 (64 знака) не получится. Поэтому как ни соли, какие методы хэширования ни применяй, функция wa_password_hash() должна возвращать строку не более 32 символов, то есть md5() от результата.

Дополнительное поле адреса в печатных формах

Во всех печатных формах можно вывести дополнительные поля, которые вы определили для адресов доставки (или оплаты). Правда, для этого придется приложить немного усилий. Даже странно, что разработчики Shopscript 5 не позаботились о том, чтобы показывать идентификаторы дополнительных полей. Проглядели?

В качестве примера добавим поле «Номер склада» в печатную форму «Простая накладная».

В настройках магазина, в разделе «Оформление заказа», на закладке «Контактная информация» найдите группу полей «Поля адреса» и добавьте к ним еще одно с названием «Номер склада».

Дополнительное поле в адресе доставки

Теперь создайте новый заказ или отредактируйте существующий так, чтобы у нового поля было какое-нибудь значение.

Дополнительное поле в заказе

Теперь нужно выяснить идентификатор дополнительного поля, который Shopscript 5 присвоил самостоятельно. Возможно, этот идентификатор где-то показывается, но нам увидеть его не удалось. А он есть.

Чтобы посмотреть идентификатор придется в самом шаблоне печатной формы вывести отладочную информацию, а именно список всех полей адреса.

Внимание! Если вы уже вносили изменения в шаблон печатной формы, выделите весь код скопируйте и сохраните его где-нибудь.

В шаблоне печатной формы удалите все (Ctrl-A потом Del) и напишите вместо всего три строчки:

<pre>
{print_r($order.shipping_address)}
</pre>

Откройте заказ и в нем откройте исправленную печатную форму — необходимо отметить соответствую опцию в верхнем правом углу и нажать кнопку «Печать». На экране откроется примерно такой документ, со списками идентификаторов полей адреса и их значениями. Возможно список будет выглядить немного по-другому, но надеюсь, необходимый идентификатор найти сможете. У меня получился nomer-sklada. Запомните название идентификатора.

Дополнительное поле в адресе доставки

Теперь нужно вернуть печатную форму в исходное состояние. Нужно вернуться в настройки магазина, к печатным формам и снова открыть шаблон на редактирование. Если до правок использовали встроенный шаблон, нажмите в верхнем правом углу, чуть выше окна с редактором шаблона, ссылку «Восстановить оригинал». Если использовали свой вариант шаблона, скопируйте его обратно оттуда, куда сохранили резервную копию.

В подходящее место шаблона давьте вывод нового поля. Примерно вот так:

{if !empty($order.shipping_address['nomer-sklada'])}
    <p>
        Номер склада:
        <b>{$order.shipping_address['nomer-sklada']}</b>
    </p>
{/if}

Я добавил в раздел с адресом доставки, получилось вот такое:

Дополнительное поле в заказе

Сохраните отчет. Все.

Новая версия плагина с отчетами

Долгожданная версия, в которой можно фильтровать заказы по статусам отправилась на проверку и публикацию в магазине приложений Webasyst. Наберитесь еще немного терпения.

Также поправили баг с выпадением из обработки заказов в последнем дне выбранного периода.

Теперь настройки графика, а заодно и выбранные статусы, надо сохранить самостоятельно — при изменении чекбокса больше ничего не сохраняется. А то нашлись люди, которые в задумчивости настолько часто переключали режимы отображения, что браузер не успевал отсылать запросы на сохранение новой конфигурации. :)

Автоматическое добавление наклеек

Либо я чего-то не нашел, либо в Shopscript 5 действительно нет возможности автоматически добавлять "бейджи" типа "Новинка" или "Скидка". Только вручную. Ну, вручную там можно какие хочешь делать, это понятно. Но самостоятельно следить, чтобы у товара появилась соответствующая наклейка очень грустно. Пришлось добавить пару строк в шаблоне.

Смысл в том, что если товару не назначен никакой бейдж, то назначим его автоматически. Поскольку по задумке авторов скрипта бейдж может быть только один, то и не будем ничего нового придумывать. Если товар создан менее 30 дней назад, то добавим ему бейдж "Новинка", если "зачеркнутая цена" отлична от нуля и меньше чем цена и минимальная цена товара, то добавим бейдж "Скидка".

{if !$product.badge}
    {if (((time() - strtotime($product.create_datetime)) / (60*60*24)) < 30)}
        {$product.badge = 'new'}
    {/if}
    {if $product.compare_price && ($product.compare_price > $product.price)}
        {$product.badge = 'lowprice'}
    {/if}
{/if}
 

Включение-выключение автоматического добавлений бейджей, а также срок, в течение которого товар считается новинкой, можно сделать переменными темы (см. по ссылке пункт 6).