Tworzenie e-maili w Magento cz. 1

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.