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
.