Minishop2 как отредактировать письмо заказа (оформление писем)

Minishop2 как отредактировать письмо заказа MODX Revo
В данном уроке разберем как отредактировать письмо Minishop2 о новом заказе: удалить из него стандартные поля которые не нужны, добавить информацию о способе оплаты, доставке, свои 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'}

Дополнительная информация

Где находится чанк письма, отправляемого покупателю
Как поменять почтовый ящик админа?
Как поменять почтовый ящик отправителя?
Не приходят письма, что делать?
Как поменять заголовок письма?
Где формируется письмо? В каком сниппете?
Какие плейсхолдеры доступны в письме по умолчанию?
Где отредактировать шаблоны писем покупателя и менеджера?
Как добить свои поля в форму заказа
Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( 2 оценки, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий