« Zend Mail avec template » : différence entre les versions

De Marmits Wiki
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
rce: www.informatix.fr
source: www.informatix.fr
1 - fichier de configuration "configmail.ini"
 
== 1 - fichier de configuration "configmail.ini" ==
 
resources.layout.layoutPath = "./application/layouts/"
resources.layout.layoutPath = "./application/layouts/"
resources.view.layoutPath = "./application/modules/site/views/"
resources.view.layoutPath = "./application/modules/site/views/"
Ligne 9 : Ligne 11 :
mail.data.adminsite = "http://site.com/admininistration"
mail.data.adminsite = "http://site.com/admininistration"


2 - Les templates pour Zend
== 2 - Les templates pour Zend ==


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


3 - J'initialise ma classe dans le contôleur
== 3 - J'initialise ma classe dans le contôleur ==
<pre>
$mail = new Mymail(Zend_Registry::get('configmail'));
$mail = new Mymail(Zend_Registry::get('configmail'));


Ligne 26 : Ligne 29 :
$erreur = "Echec lors de l'envoie du mail, veuillez réessayer plus tard.";
$erreur = "Echec lors de l'envoie du mail, veuillez réessayer plus tard.";
}
}
</pre>




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





Version du 18 juillet 2019 à 13:56

source: 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);
    }

}
?>