- Создание копий чанков
- Редактирование базового чанка оформления писем
- Смена логотипа в письме
- Удаление ненужных полей
- Изменяем наследование чанков
- Настройка статусов заказов
- Добавление в письма новых полей (новой информации)
- Добавляем в письмо нового заказа для менеджера контактную информацию и информацию о доставке, оплате.
- Как добавить TV-поле в письмо
- Дополнительная информация
По умолчанию после заказа на почту менеджера и заказчика прилетает письмо с минимальным количеством информации: Логотип минишопа, простенькое оформление из таблички с данными: Изображение товара, Наименование (с ссылкой на товар), Количество, Вес, Стоимость (у пользователя еще ссылка на оплату).
Для пользователя зачастую достаточно информации на первом этапе, но далеко не всегда. Как минимум нужно сменить логотип minishop на свой.
А в случае с менеджерами, в 90% случаях данной информации недостаточно. Понятно что можно предоставить им доступ в админку, чтобы они смотрели информацию там.
Иногда некоторые из этих полей не нужны, например вес — его можно убрать или вместо него вывести какой-нибудь другой параметр, для этого необходимо отредактировать стандартные чанки отвечающие за вид писем.
Создание копий чанков
Дефолтные чанки лучше не трогать, т.к. при обновлении Minishop2, все ваши труды могут быть затерты, еще в них всегда можно подсмотреть код. Поэтому лучше создать их копии, всего чанков отвечающие за вид писем 7:
- tpl.msEmail — базовый чанк оформления писем miniShop2. В нем по факту находится оформление всего внешнего вида письма и он расширяется данными из других чанков перечисленных ниже.
- tpl.msEmail.new.user и tpl.msEmail.new.manager — чанки писем нового заказа пользователю и менеджеру.
- tpl.msEmail.paid.user и tpl.msEmail.paid.manager — чанки писем оплаченного заказа пользователю и менеджеру.
- tpl.msEmail.sent.user — чанк письма отправленного заказа пользователю.
- tpl.msEmail.cancelled.user — чанк письма отмененного заказа пользователю.
Сделать их копии быстро: щелкаете правой кнопкой мыши по нужному чанку, в контекстном меню выбираете пункт «Копировать чанк». В сплывающем окне, пишите «Название нового чанка и сохраняете».
Для быстроты и удобства, рекомендую копиям добавлять в имя new.
В конечном итоге у вас должно получиться следующее.
Теперь можно приступать к их модификации.
Редактирование базового чанка оформления писем
Базовый чанк у нас tpl.msEmail
— его соответственно не трогаем, открываем копию new.tpl.msEmail
. Как я говорил выше там все основное оформление письма, следовательно вы его целиком можете поменять. Например создать письмо в конструкторе или сверстать с нуля затем поместить его в базовый чанк и выводить в нем данные.
В рамках данного урока в верстку писем и тому подобное углубляться смысла не вижу, будем работать со стандартным оформлением. Начнем со смены логотипа.
Смена логотипа в письме
Найдите и измените в new.tpl.msEmail
строку:
<img style="{$style.logo}"
src="{$site_url}{$assets_url}components/minishop2/img/web/ms2_small@2x.png"
alt="{$site_url}"
width="120" height="90"/>
к примеру так:
<img style="{$style.logo}" src="{$site_url}images/logotype.png" alt="{$site_url}" width="180" height="95"/>
Удаление ненужных полей
Довольно часто в интернет-магазинах не заполняют вес, соответственно данное поле в письме становится ненужным и его можно удалить. Пример как это делается на скриншоте ниже.
Изменяем наследование чанков
Т.к. оставшиеся 6 копий чанков расширяют базовый чанк (в них всех есть вот такая строка {extends 'tpl.msEmail'}
). А нам нужно расширять новый чанк: new.tpl.msEmail
. Заменим ее на {extends 'new.tpl.msEmail'}
. Для этого открываем их по порядку, меняем строку, так же в поле описание впереди добавляем NEW и сохраняем.
Если кому интересно почитать о расширении шаблонов (extends), загляните в документацию по fenom.
Теперь, чтобы новые шаблоны (пока только с обновленным лого) начали работать, нужно указать их в настройках минишоп.
Настройка статусов заказов
Идем в «Пакеты» — «MiniShop2» — «Настройки». На открывшейся странице переходим во вкладку «Статусы заказа». В столбце «Действия» есть кнопка изменить (на против разных статусов), нажимаем на нее.
Во всплывающем окне указываем ново созданные чанки и сохраняем.
Так для всех статусов. После этого к нам и пользователям будут лететь обновленные письма (уже по крайней мере с нормальным логотипом (у некоторых, еще без веса к примеру).
Теперь усложним задачу, добавим в письма новых данных.
Добавление в письма новых полей (новой информации)
Сниппету msGetOrder (который обрабатывает чанки писем), по умолчанию доступны следующие 7 переменных:
- order — массив с данными заказа из объекта
msOrder
- products — массив заказанных товаров со всеми их свойствами
- user — массив данных из объектов
modUser
иmodUserProfile
со всеми свойствами покупателя - address — массив данных из объекта
msAddress
со указанными данными для доставки - delivery — массив со свойствами выбранной доставки из объекта
msDelivery
- payment — массив со свойствами выбранной оплаты из объекта
msPayment
- total — массив с итоговыми данными заказа:
- cost — общая стоимость заказа
- weight — общий вес заказа
- delivery_cost — отдельная стоимость доставки
- cart_cost — отдельная стоимость заказанных товаров
- cart_weight — общий вес заказанных товаров
- cart_count — количество заказанных товаров
Так же могут присутствовать и данные, переданные при вызове сниппета. Например, в чанке оформления новых писем может быть переменная payment_link
.
Увидеть все доступные плейсхолдеры заказа, можно вызвав на странице корзины msGetOrder, просто указав пустой чанк:
[[!msGetOrder?tpl=``]]
.
Как пользоваться этим массивом, на пальцах. Допустим нам нужно вывести название способа оплаты, которую выбрал пользователь при заказе, делается это так: {$payment.name}
.
Надеюсь понятно, если не понятно дальше думаю поймете, на примере ниже.
Добавляем в письмо нового заказа для менеджера контактную информацию и информацию о доставке, оплате.
Давайте добавим всю базовую информацию с корзины, которую пользователь может заполнить при оформлении заказа через корзину и добавим ее в чанк письма, отправляемого администратору (менеджеру) при заказе.
Открываем чанк new.tpl.msEmail.new.manager
, там сейчас следующее содержимое:
{extends 'new.tpl.msEmail'}
{block 'title'}
{'ms2_email_subject_new_manager' | lexicon : $order}
{/block}
Верхняя строка подключаем содержимое из блока title
в чанк new.tpl.msEmail
. Теперь добавим основную информацию к письму от заказа.
Шпаргалка по основным полям (поле: стандартный вызов / вызов при помощи fenom)
Покупатель: [[+address.receiver]] / {$address.receiver}
Телефон: [[+address.phone]] / {$address.phone}
Почта: [[+user.email]] / {$user.email}
Индекс: [[+address.index]] / {$address.index}
Область: [[+address.region]] / {$address.region}
Город: [[+address.city]] / {$address.city}
Улица: [[+address.street]] / {$address.street}
Дом: [[+address.building]] / {$address.building}
Квартира: [[+address.room]] / {$address.room}
Способ доставки: [[+delivery.name]] / {$delivery.name}
Тип оплаты: [[+payment.name]] / {$payment.name}
Комментарий: [[+address.comment]] / {$address.comment}
Универсальный способ вывода полей относящихся к адресу доставки:
{foreach $address as $key => $value}
{if $value? && $key not in ['id','user_id','createdon','updatedon']}
<tr>
<td>{('ms2_frontend_'~$key) | lexicon}:</td>
<td>{$value}</td>
</tr>
{/if}
{/foreach}
Пример 1. Добавление полей в блок title. После добавления выше перечисленных полей в чанк new.tpl.msEmail.new.manager
он должен получится примерно следующего содержимого:
{extends 'new.tpl.msEmail'}
{block 'title'}
{'ms2_email_subject_new_manager' | lexicon : $order}
<h3 style="padding-left:30px">Информация о заказчике и доставке</h3>
<table style="width:90%;margin:auto;">
<thead></thead>
<tbody>
<tr>
<td><strong>Способ доставки:</strong></td>
<td>{$delivery.name}</td>
</tr>
<tr>
<td><strong>Способ оплаты:</strong></td>
<td>{$payment.name}</td>
</tr>
<tr>
<td><strong>Email:</strong></td>
<td>{$user.email}</td>
</tr>
{foreach $address as $key => $value}
{if $value? && $key not in ['id','user_id','createdon','updatedon']}
<tr>
<td><strong>{('ms2_frontend_'~$key) | lexicon}:</strong></td>
<td>{$value}</td>
</tr>
{/if}
{/foreach}
</tbody>
</table>
<hr>
{/block}
Если заполнить все поля и сделать заказ:
то получим вот такое письмо на почту:
Все есть, но выглядит немного печально (как минимум поменял бы местами информацию о заказе и прочую инфу)), давайте перепишем вышеприведенный код, немного оформим его и запихнем в новый блок.
Пример 2. Добавление полей в новый блок, пусть будет «zakazinfo» + небольшое оформлениe + мелкие доработки. На выходе получается чанк new.tpl.msEmail.new.manager
примерно с таким кодом:
{extends 'new.tpl.msEmail'}
{block 'title'}
{'ms2_email_subject_new_manager' | lexicon : $order}
{/block}
{block 'zakazinfo'}
<table class="body-wrap" style="padding:0 20px 20px 20px;width: 100%;background:#f6f6f6;margin-top:10px;">
<tr>
<td></td>
<td class="container" style="border:1px solid #f0f0f0;background:#ffffff;width:800px;margin:auto;">
<div class="content">
<h3 style="{$style.h}{$style.h3}">Информация о клиенте:</h3>
<table style="width:80%;margin:auto;">
{if $delivery.name}<tr>
<td style="{$style.th};width: 200px; font-weight: 600;">
Способ доставки:
</td>
<td style="{$style.th}">
{$delivery.name}
</td>
</tr>{/if}
{if $payment.name}<tr>
<td style="{$style.th};width: 200px; font-weight: 600;">
Способ оплаты:
</td>
<td style="{$style.th}">
{$payment.name}
</td>
</tr>{/if}
{if $user.email}<tr>
<td style="{$style.th};width: 200px; font-weight: 600;">
E-mail:
</td>
<td style="{$style.th}">
{$user.email}
</td>
</tr>{/if}
{foreach ['receiver', 'phone', 'index', 'region', 'city', 'street', 'building', 'room', 'comment', 'customfield'] as $field}
{if $address[$field]?}
<tr>
<td style="{$style.th};width: 200px; font-weight: 600;">{('ms2_frontend_' ~ $field) | lexicon}: </td>
<td style="{$style.th}">{$address[$field]}</td>
</tr>
{/if}
{/foreach}
</table>
</div>
<!-- /content -->
</td>
<td></td>
</tr>
</table>
{/block}
Остается подключить данный блок в базовом чанке (new.tpl.msEmail), обычно я подключаю его промеж:
<!-- /body -->
<!-- footer -->
вот так:
{block 'zakazinfo'}
{/block}
Как добавить TV-поле в письмо
Т.к. письмо формируется сниппетом msGetOrder
, в его вызов нужно добавить параметр includeTVs
и перечислить в нем названия нужных TV полей (через запятую). В шаблоне письма они доступны в цикле $products, и вызываются так: $product.my_tv_name
или так {$product.id | resource: 'my_tv_name'
}
Дополнительная информация
Какие плейсхолдеры доступны в письме по умолчанию?