Как стать автором
Обновить

Magento — Отправка писем

Время на прочтение4 мин
Количество просмотров3K
Довольно часто возникает необходимость выслать пользователю магазина оповещение или письмо с какой-либо дополнительной информацией. Думаю, что многие осознают необходимость/полезность отправки писем с сайта. Тут разработчики Magento очень хорошо постарались, чтобы предоставить нам достаточно мощный механизм работы с почтой.

Что же тут особенного?


Итак, у некоторых может возникнуть вопрос: «А почему бы не использовать функцию mail()? Ведь она как раз и предназначена для подобных целей». Конечно можно, тем более, если кто-то жить без нее не может, сам бог велел mail-ить. Что же дает нам magento-вский механизм отправки писем? Первое и, на мой взгляд, самое главное достоинство — это использование шаблонов. Шаблоны представляют собой обычные html-файлы с небольшими дополнениями (но об этом чуть ниже), т.е. у шаблона может быть любое оформление, и верстальщики не будут больше плеваться, разбирая ваш php-код и стараясь воплотить задумку дизайнера. Также в шаблоны можно добавлять блоки любого из доступных модулей (только не забываем их инициализировать), что позволяет увеличить скорость разработки.

С чего начать?


Итак, отправкой писем занимается метод sendTransactional() модели Mage_Core_Model_Email_Template

Mage::getModel('core/email_template')
      ->setDesignConfig(array('area'=>'frontend', 'store'=>$storeId))
      ->sendTransactional(
        $templateId,
        $sender,
        $recepientEmail,
        $recepientName,
        $templateData);


* This source code was highlighted with Source Code Highlighter.


$storeId – идентификатор магазина (да, Magento может поднять несколько магазинов, прочитать об этом можно тут)

$templateId – идентификатор шаблона, он может быть либо строковым идентификатором, который берется из xml-конфига, либо целочисленным, который берется из БД

С целочисленными идентификаторами все просто, их можно посмотреть в разделе админки System > Transactional Emails и, при необходимости, добавить собственный шаблон. Строковые идентификаторы находятся в конфигах модулей в разделе global/template/email. Например,

<global>
  <template>
    <email>
      <customer_create_account_email_template translate="label" module="customer">
        <label>New account</label>
        <file>account_new.html</file>
        <type>html</type>
      </customer_create_account_email_template>
    </email>
  </template>
</global>


* This source code was highlighted with Source Code Highlighter.


customer_create_account_email_template и есть наш идентификатор. Как можно заметить, элемент customer_create_account_email_template имеет три дочерних элемента – это label, file, type.

  • label – название шаблона
  • file – путь к файлу шаблона, относительно текущей локали (по умолчанию это app/locale/en_US/template/email)
  • type – тип шаблона (либо text, либо html)

$sender – отправитель письма, может быть представлен в виде ассоциативного массива, например:
$sender = array('email' => 'sender@example.com', 'name' => 'Sender Name');
Или взят из конфига Magento, чаще всего из раздела админки System > Configuretion > Store Email Addresses.
$sender = Mage::getStoreConfig('customer/create_account/email_identity');
В этом примере путь ведет к конфигу General contact раздела админки System > Configuretion > Store Email Addresses.

$recepientEmail — email получателя письма

$recepientName – имя получателя письма

$templateData – ассоциативный массив, содержащий в себе данные, которые нужно передать в шаблон. Например:
$templateData = array('name' => 'Василий Пупкин', 'link_url' => 'http://google.ru', 'items_collection' => $items, 'phone_number' => '11122233');

Шаблоны писем


Как я уже писал выше, шаблон письма представляет собой html-файл с небольшими дополнениями. Итак, шаблон начинается с заголовка, в котором указывается тема письма вот таким образом:

Далее может следовать любой html-код, т.е. после заголовка мы помещаем тело письма.
Уважаемая Екатерина Матвеевна…
Как же использовать данные, которые мы положили в $templateData? Очень просто. Необходимо вставить в шаблон конструкцию следующего вида {{var <имя_ключа>}}. Например,

<a href="{{var link_url}}">{{var name}}</a>

* This source code was highlighted with Source Code Highlighter.


На выходе у нас получится:

<a href=”http://google.ru>Василий Пупкин<a>

* This source code was highlighted with Source Code Highlighter.


Еще одна удобная возможность – это использование layout’ов в шаблонах. Т.е. вы можете описать layout в своем модуле, и использовать его потом в письме. Например, если добавить в конфиг mymodule.xml layout’ов вашего модуля строки

<mymodule_email_someitems>
  <block type="mymodule/email_items" name="items" template="email/mymodule/items.phtml"/>
</mymodule_email_someitems>


* This source code was highlighted with Source Code Highlighter.


то добавление в шаблон следующей конструкции позволит отобразить блок(и), внутри layout’а:
{{layout handle="mymodule_email_someitems" items=$items_collection}}
Если layout’у необходимы какие-либо данные, то их можно передать в дополнительных атрибутах конструкции {{layout}}, в данном случае, это параметр items.

И последнее, что хотелось бы рассказать о шаблонах писем, это условные выражения. Описываются они с помощью конструкции:

{{depend condition}}
Тут может быть любой код, разрешенный к использованию в шаблонах
{{/depend}}

Если значение condition истинно, то содержимое блока depend будет отображено. Например:

{{depend phone_number}}
{{var phone_number}} – позвони мне.
{{/depend}}

Вот таким образом реализована отправка почты. Этот метод позволяет использовать все достоинства этой замечательной CMS.
Теги:
Хабы:
+4
Комментарии3

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн