Chwilę dobrą zastanawiałam się jak opisać kontynuację wątku dot. tworzenia e-mali w Magento – czy skupić się na budowie samego szablonu, czy może zrobić zestawienie obu wersji Magento jednocześnie. Wiedziałam, że niezależnie od tego jak podejdę do tematu, jest on ważny i nie godzi się opisać go po przysłowiowych „łebkach”. Zdecydowałam ostatecznie, że na developerski aspekt tworzenia e-maili, poświęcę trzy artykuły. W pierwszym opiszę jak to się robię w Magento 1 a w drugim spróbuję opisać Magento 2. Na końcu natomiast postaram się zrobić jakieś zestawienie / ściągawkę najważniejszych kwestii.
Gdzie znajdują się szablony e-maili w Magento
Szablony e-mail znajdziemy w ścieżce:
app/locale/[language_code]/template/email
Znajdziemy tu wszystkie komunikaty jakimi nasze Magento się posługuje. Za [language_code] należy uważać takie katalogi jak np. pl_PL czy en_US itp.
Jak dodać nowy szablon?
Skoro wiemy, gdzie leżą nasze szablony, wypadałoby dodać jakiś swój własny. Powiedzmy, że interesuje nas przygotowanie e-mail’a, z przypomnieniem o niedokonanej płatności.
Musimy więc stworzyć plik :
app/locale/[language_code]/template/email/payreminder/payreminder.html
Dodajmy do niego zawartość:
<!--@subject Payment reminder @-->
<!--@vars
{"store url=""":"Store Url",
"var logo_url":"Email Logo Image Url",
"var logo_alt":"Email Logo Image Alt",
"htmlescape var=$order.getCustomerName()":"Customer Name",
"var store.getFrontendName()":"Store Name",
"store url="customer/account/"":"Customer Account Url",
"var order.increment_id":"Order Id",
"var order.getCreatedAtFormated('long')":"Order Created At (datetime)",
"var order.getBillingAddress().format('html')":"Billing Address",
"var order.getShippingAddress().format('html')":"Shipping Address",
"var order.getShippingDescription()":"Shipping Description",
"layout handle="sales_email_order_items" order=$order":"Order Items Grid",
"var order.getEmailCustomerNote()":"Email Order Note"}
@->
{{var header_block}}
Dzień dobry,
<br/>
Nie odnotowaliśmy płatności za zamówienie nr {{var order.increment_id}}
Pozdrawiamy
Twój sklep :)
{{var footer_block}}
Spójrz uważnie na komentarze, znajdujące się powyżej zasadniczej treści e-maila. Pierwszy z nich określa tytuł naszego e-maila, który będzie się pojawiał w programie pocztowym, a pozostałe to zmienne, które możemy w naszym e-mailu wykorzystać. Mówiliśmy o nich w poprzednim artykule.
Poinformuj Magento, że Twój szablon istnieje
Ok mamy szablon i co dalej? Coś go musi wysłać. Zapewne będzie on komunikatem jakiejś nowej funkcjonalności. Zapewne stworzymy moduł. Wszystko się zgadza.
W config.xml naszego modułu musimy zainicjować nasz szablon:
<global>
<template>
<email>
<payment_reminder_template translate="label" module="namespace_payreminder">
<label>Default Payreminder Template</label>
<file>payreminder/payreminder.html</file>
<type>html</type>
</payment_reminder_template>
</email>
</template>
</global>
Kiedy już mamy zainicjowany nasz szablon pozostaje obsłużyć go w PHP
$email = Mage::getModel('core/email_template');
$customerEmail = $_order→getCustomerEmail();
$storeId = Mage::app()->getStore()->getStoreId();
$emailTemplateVariables = [
'order' => $_order
];
try {
$email→sendTransactional(
'payment_reminder_template',
$sender,
$customerEmail,
$sender,
$emailTemplateVariables
);
} catch (Exception $error) {
Mage::getSingleton('core/session')->addError($error→getMessage());
}
E-maile transakcyjne w Magento
Jeśli zmienne mamy poprawnie skonfigurowane wg powyższego przykładu, to będziemy mogli je nadpisywać za pomocą e-maili transakcyjnych. W poprzednim artykule „Magento 2 – moje własne maile sprzedażowe” pokazałam, jak z tej funkcjonalności można korzystać. Sama zasada nie zmieniła się znacznie w stosunku do Magento 1.
Listę szablonów znajdziemy jednak w ścieżce:
System → Emaile transakcyjne.
Cała reszta wygląda i działa w zasadzie dokładnie tak samo. Jednak, jeśli byśmy chcieli móc nadpisywać szablony, musimy stworzyć na tą okoliczność miejsce konfiguracji.
Tworzenie konfiguracji dla e-maili transakcyjnych
Na tą okoliczność musimy stworzyć w naszym module plik system.xml w katalogu etc naszego modułu:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sections>
<namespace_module translate="label" module="namespace_module">
<label>Powiadomienia o płatności</label>
<tab>sales</tab>
<sort_order>100</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<general>
<label>Ustawienia główne</label>
<frontend_type>text</frontend_type>
<sort_order>99</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<email_template translate="label">
<label>Szablon e-mail</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_email_template</source_model>
<sort_order>9</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</email_template>
</fields>
</general>
</groups>
</namespace_module>
</sections>
</config>
Następnie tworzymy ACL dla naszej konfiguracji, poprzez dodanie pliku adminhtml.xml:
<?xml version="1.0"?>
<config>
<acl>
<resources>
<all>
<title>Allow Everything</title>
</all>
<admin>
<children>
<system>
<children>
<config>
<children>
<namespace_module>
<title>Payreminder</title>
</namespace_module>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</config>
Teraz po przelogowaniu się w panelu i wyczyszczeniu cache, powinniśmy widzieć zakładkę „ Powiadomienia o płatności” po przejściu do:
System → Konfiguracja
To jednak nie koniec. Magento musi wiedzieć, że ma skorzystać z tego szablonu. Musimy więc zmodyfikować lekko nasz PHP, poprzez pobranie ID naszego szablonu:
$templateId = Mage::getStoreConfig('namespace_module/general/email_template', $order->getStoreId());
if (!$templateId) {
$templateId = ‘payment_reminder_template’;
}
następnie do metody sendTransactional() podajemy zmienną $templateId, zamiast payment_reminder_template.