К содержимому
Вывод в теме

Шаблоны и хелперы

Обновлено

Одно значение

В контексте шаблона, где доступен заказ с параметрами $order.params, используйте код поля с префиксом ewof_. Например, поле с кодом delivery_time:

{if !empty($order.params.ewof_delivery_time)}
    <p>Время доставки: {$order.params.ewof_delivery_time|escape}</p>
{/if}

Это пример для непустого текстового значения. Если допустимое значение равно 0, проверяйте наличие ключа через isset, поскольку empty считает ноль пустым.

{if isset($order.params.ewof_floor)}
    <p>Этаж: {$order.params.ewof_floor|escape}</p>
{/if}

В редакторе сохранённого поля есть «Переменная для уведомлений» и кнопка «Копировать». Прямое обращение возвращает сырое сохранённое значение: например, 1 для отмеченного флажка. Оно не проверяет переключатель «В кабинете и письмах».

HTML-таблица: orderFields()

{if !empty($wa->shop->ewshoporderfieldsPlugin->version())}
    {$wa->shop->ewshoporderfieldsPlugin->orderFields($order)}
{/if}

Метод orderFields($order, $customer_only = true) принимает числовой ID заказа или массив заказа с ключом id. Возвращает готовую HTML-таблицу с инлайн-стилями, подходящую для писем; если выводить нечего — пустую строку. Применять |escape ко всему результату не нужно.

По умолчанию включены только поля с разрешением «В кабинете и письмах». Для внутреннего шаблона, где нужны также служебные значения:

{if !empty($wa->shop->ewshoporderfieldsPlugin->version())}
    {$wa->shop->ewshoporderfieldsPlugin->orderFields($order, false)}
{/if}

Параметр false снимает фильтр покупательской видимости. Используйте его только там, где читателю можно показывать эти значения.

Своя разметка: orderValues()

Метод orderValues($order, $customer_only = true) принимает те же аргументы. Результат — массив, ключи которого равны кодам полей. У каждого элемента есть name и value — обычные строки для самостоятельного экранирования. Значения форматируются по типу поля, например флажок становится «Да».

{if !empty($wa->shop->ewshoporderfieldsPlugin->version())}
    {$fields = $wa->shop->ewshoporderfieldsPlugin->orderValues($order.id)}
    {foreach $fields as $code => $field}
        <p>{$field.name|escape}: {$field.value|escape|nl2br}</p>
    {/foreach}
{/if}

Для внутреннего документа со служебными полями:

{if !empty($wa->shop->ewshoporderfieldsPlugin->version())}
    {$fields = $wa->shop->ewshoporderfieldsPlugin->orderValues($order, false)}
    {foreach $fields as $field}
        <p>{$field.name|escape}: {$field.value|escape|nl2br}</p>
    {/foreach}
{/if}

Оба хелпера читают значения по ID из базы, поэтому полный массив $order.params им не нужен. Они учитывают текущий порядок и описания полей, пропускают пустые значения и поля без описания. Неактивные поля с сохранёнными значениями включаются в результат.

Уведомления и печатные формы

Добавьте нужный пример в Smarty-шаблон уведомления или печатной формы Shop-Script, в котором доступен $order. Переключатель «В кабинете и письмах» сам не вставляет блок в письмо: он задаёт фильтр для стандартного вызова хелпера.

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

Переопределение витринных шаблонов

Скопируйте нужный исходный шаблон плагина в каталог активной темы магазина с именем из правой колонки. При наличии такого файла плагин использует его вместо своего шаблона.

Исходный шаблон относительно каталога плагина Имя файла в теме
templates/hooks/checkout.fields.html ewshoporderfields_plugin.checkout.fields.html
templates/hooks/legacy.fields.html ewshoporderfields_plugin.legacy.fields.html
templates/hooks/order.account.html ewshoporderfields_plugin.order.account.html

Шаблоны бэкенда, печати и HTML-таблицы для писем этим механизмом не переопределяются.

Одностраничное оформление

checkout.fields.html получает:

  • $step — шаг, в котором напечатан блок; $spare_for — исходный шаг резервного блока или null.
  • $items — элементы с ключами code, control_html, label, required_html, is_checkbox, is_hidden, hint, error, error_class.
  • $block_id, $css_html, $locale_script, $lift_script — идентификатор блока, подключения ресурсов и служебные скрипты.

control_html и required_html — готовый HTML; label уже экранирован. hint, error и значения HTML-атрибутов нужно экранировать. Сохраните классы и атрибуты исходного шаблона, обработку is_hidden, резервных блоков и вывод служебных скриптов: на них опираются маски, восстановление ввода и показ ошибок.

Старое оформление

legacy.fields.html получает готовый $fields_html, а также $css_html и $locale_script. Эти значения выводятся как HTML. Поля остаются на последнем шаге подтверждения.

Личный кабинет

order.account.html получает $order_id и $items с ключами code, name, value_html, value_text. Пример содержимого файла ewshoporderfields_plugin.order.account.html:

<div class="ewof-my-order">
    {foreach $items as $item}
        <p>{$item.name|escape}: {$item.value_html}</p>
    {/foreach}
</div>

value_html уже подготовлен типом поля. При использовании текстового варианта value_text применяйте |escape.