Zend Mail avec template

De Marmits Wiki

rce: www.informatix.fr 1 - 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"

2 - Les templates pour Zend

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

3 - 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."; }


4 - 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);
    }

}
?>