Zend Mail avec template

De Marmits Wiki

source: www.informatix.fr

fichier de configuration "configmail.ini"

resources.layout.layoutPath = "./application/layouts/"
resources.view.layoutPath = "./application/modules/site/views/"
mail.sujet.format = Marmits.com %s
mail.data.from = "contact@marmits.com"
mail.data.admin = "contact@marmits.com"
mail.data.nom = "Développement web -> marmits"
mail.data.adminsite = "http://site.com/admininistration"

Les templates pour Zend

- créer un layout (ex: mail.phtml) - créer une vue (ex: contact.phtml)

J'initialise ma classe dans le contôleur

$mail = new Mymail(Zend_Registry::get('configmail'));

$mail->setSujet(" / N° ".$textNumCommande.", effectuée sur le site.");
$mail->variable = $variable;  ----- > vers la vue ou la layout
$mail->rendreVue('contact.phtml');
$mail->addTo($mailadmin);
 
if (!$mail->send())
{
$erreur = "Echec lors de l'envoie du mail, veuillez réessayer plus tard.";
}


Voici la classe modifiée de Zend Mail à ranger dans les "models"

<?php
/**
 * Envoi d'e-mail avec un layout standard
**/
class Mymail extends Zend_Mail {
 private $_config;
    private $_view;

    public function __construct($config, $charset = 'UTF-8')
    {
        if (!isset($config))
        {
            throw new Zend_Exception('Pas de configuration fournie.') ;
        }
        $this->_config = $config;
        parent::__construct($charset);
        $this->setFrom($this->_config->mail->data->from, $this->_config->mail->data->nom);

        $this->_view = new Zend_View();
        $this->_view->addScriptPath('./application/modules/site/views');

    }

    /* Ceci servira pour remplir les attributs de la vue variable.
    ** Dans notre cas le contenu et l'émetteur.
    */
    public function __set($key, $val)
    {
       if ('_' != substr($key, 0, 1))
       {
           $this->_view->$key = $val;
           return;
       }
    }

    public function setSujet($sujet)
    {
        if (isset($this->_config->mail->sujet->format))
        {
            /* Permet de spécifier un format pour le sujet */
            $sujet = sprintf($this->_config->mail->sujet->format, $sujet);
       }
    return parent::setSubject($sujet);
    }

    /* Spécifie où trouver le layout mail.phtml
    ** ainsi que la vue variable (contact.phtml pour l'exemple).
    ** La vue est rendue dans le content du layout,
    ** qui est lui même rendu dans le corps du mail.
    */
    public function rendreVue($script)
    {
        $layout = new Zend_Layout(Array('layoutPath' => $this->_config->resources->layout->layoutPath));

        $layout->setLayout('mail');
        $this->_view->setScriptPath($this->_config->resources->view->layoutPath.'scripts/mails');

        $layout->content = $this->_view->render($script);
        $html = $layout->render();
        $this->setBodyHtml($html);
    }

}
?>