Шаблоны и хелперы
Обновлено
Одно значение
В контексте шаблона, где доступен заказ с параметрами $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.