Cet article traite de la réalisation de templates pour email et explique comment les rendre modifiables par le back-office. Aussi, la dernière partie traite de l'envoi de ces derniers.
Plan d'attaque
La première chose à faire est de créer le template en lui même. Après cela, il faudra renseigner son chemin dans un fichier de config (config.xml). Et enfin ajouter des entrés dans le fichier system.xml, afin de le rendre éditable dans le BO.
Création du template
Créer le template est ce qui a de plus simple. Cela consiste à créer un fichier dans le dossier "template" du dossier de votre locale. Par exemple pour contact.html, "/app/locale/fr_FR/template/contact.html".
Syntaxe des templates
Vous l'avez certainement remarqué, ces derniers ne sont pas des fichiers phtml. Ils n'acceptent donc pas de php. Malgré tout, ils acceptent un autre langage, le même que celui des blocs CMS ( des choses comme {{var maVariable}} ).
Afficher des variables
Pour le moment nous ne savons pas encore envoyer des variables aux templates. Malgré tout voici la syntaxe pour les afficher :
{{var maVariable}}
Ajouter des conditions
Pour ajouter des conditions ( comme "si a égale 2" ) on utilise le mot clé "depend". Ce dernier est proche du "if" php, mais est tout de même plus limité. Il n'accepte pas par exemple l'opérateur "NOT" (!), ni de "sinon" et il n'est pas possible de lui soumettre autre chose qu'un booléen. Voici un exemple :
{{depend monBooleen}}
{{/depend}}
Pour faire un else, il faudra donc utiliser deux variables différentes :
{{depend monBooleen}}
{{/depend}}
{{depend monBooleenInverse}}
{{/depend}}
Autre chose, les "depend" n'acceptent pas d'inclusion. Il est donc impossible de voir cela :
{{depend monBooleen}}
{{depend monBooleenInverse}}
{{/depend}}
{{/depend}}
Faire des boucles
Les boucles n'existent pas. Pour tout de même en faire, il faut passer par l'inclusion de blocs dynamiques, comme expliqué dans le paragraphe suivant.
Ajouter des blocs dynamiques
Comme vous pouvez le remarquer, le langage de template a de nombreuses limitations. Pour passer outre, il faut utiliser des blocs ( couple php et phtml ). Attention, n'oubliez pas que ces derniers ne sont pas éditables par le BO.
Je suppose que vous savez créer des blocs dynamiques. Pour les inclure :
{{block type="modulename/block" template="template_path.phtml"}}
Il est possible d'inclure des variables :
{{block type="modulename/block" template="template_path.phtml" myVariableInTheBlock=$myVariableInTheTemplate}}
Dans le bloc vous pouvez appeler la variable en utilisant :
$this->getMyVariableInTheBlock().
Ajouter le template dans le config.xml
Afin d'utiliser le template, il est nécessaire de l'insérer dans le config.xml de votre module. Pour cela, il faut ajouter deux entrées. La première le nom du template :
<config>
<default>
<mySection>
<myParam>
<templateName>mySection_myParam_templateName</templateName>
La seconde, lie le nom du template à son fichier :
<config>
<global>
<template>
<email>
<mySection_myParam_templateName> <!-- Template name-->
<label>Mon labal</label> <!-- Template title -->
<file>module/templateName.html</file> <!-- Template path -->
<type>html</type> <!-- Template format -->
Envoyer des emails
Maintenant attaquons nous à l'envoi de notre premier email. Il n'y a rien de bien compliqué, en premier lieu écrire une "action" pour tester l'envoi, puis ajouter le code d'envoi de l'email et enfin appeler l'action. Je suppose que vous savez créer et appeler des actions !
Dans votre action ajoutez le code suivant :
<?php
setTranslateInline(false);
Mage::getModel('core/email_template')
->setDesignConfig(
array(
'area' => 'frontend',
'store' => $this->getStoreId()
)
->sendTransactional(
// 1. Chemin XML vers le nom du template
Mage::getStoreConfig('mySection/myParam/templateName'),
// Émetteur
// parent::XML_PATH_EMAIL_IDENTITY, doit être changé si identity est innexistant.
Mage::getStoreConfig(parent::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()),
// 2. Itentité du destinataire
'name@domain.com', // Ici l'email destinataire
'name', // Ici le nom du destinataire
// 3. Envoyer des variables au template
array(
'myVar' => $myVar // Utilisable avec {{var myVar}}
)
);
$translate->setTranslateInline(true);
Comme vous pouvez le voir, il y a trois points importants. Le premier est le chemin XML vers le nom du template, qui est défini dans la balise "default" du config.xml. On a hard-codé le chemin, mais il est en réalité recommandé de passer par une constante. Le second point est l'identité du destinataire. Enfin, le troisième point est la liste des variables à transmettre.
Appelez votre action, un nouveau mail arrive dans votre boite. Si vous n'avez pas configuré sendmail, jetez un œil à la partie "Truc de dev" 
Comment modifier les templates par le BO ?
Maintenant que l'on peut envoyer de beaux emails, intéressons nous à la possibilité de modifier les templates directement dans le BO ! Pour cela, il faut éditer le fichier system.xml de votre module :
Ajouter des templates dans system.xml
Dans system.xml ajoutez les lignes suivantes :
<config>
<sections>
<mySection>
<groups>
<myParam translate="label">
<label>Nom du label</label>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<sort_order>10</sort_order>
<fields>
<templateName translate="label">
<label>Nom du template</label> <!-- Name -->
<frontend_type>select</frontend_type> <!-- Type list -->
<source_model>adminhtml/system_config_source_email_template</source_model> <!-- model, to fill the list -->
<sort_order>1</sort_order> <!-- to order form elements -->
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
Modifier le template
Notre template est maintenant éditable. Voyons comment le modifier. Pour cela deux étapes : dans un premier temps créer un nouveau template, et dans un second temps l'associer à la place de l'ancien.
Créer un nouveau template
Allez dans Système > Email Transactionnel. Cliquez sur "Nouveau template". Sélectionnez le template a surcharger, la langue, et cliquez sur le bouton "Chargez le gabarit". Entrez un nom ( par exemple "mon template perso"), ajoutez le sujet, et enfin modifiez le corps du template selon votre convenance. Sauvegardez le, votre template est créé !
Sélectionner le nouveau template
Allez dans Système > Configuration > mySection > myParam. Ici sélectionnez votre nouveau template.
Truc de dev
Surcharger l'envoi d'email
Il est intéressant dans le cadre du développement de sauvegarder les mails directement comme des fichiers. Pour cela il faut éditer la fonction getProcessedTemplate du modèle
/app/code/core/Mage/Core/Model/Email/Template.php. Bien sûr cet nouveau fichier doit rester sur votre poste de dév et jamais être mis en prod !
Juste avant "$this->_cancelDesignConfig(); \ return
$processedResult;", ajoutez :
$file = '/path/to/your/directory/'.date('m-j-H:i:s').'-'.$this->getId().'.html'; // put the real path and assure you magento can write in it
file_put_contents($file, $processedResult);
J'espère que vous avez apprécié mon premier article sur Magento. J'en ai quelques uns en
préparation, seulement il me faut du temps pour
