Bonjour à tous,
Je tente de faire un envoi de mail en AJAX, qui est exécuté grâce à une action "sendMail" (action appelé par AJAX) qui elle même génère le contenu de ce mail en faisant appel à une autre action d'un autre module "mails".
Ce module mail possède un layout bien particulier qui contient l'en-tête et le footer de tous mes mails. Chaque action du module mail possède un contenu qui lui est propre en dur dans les templates (mail1Success.php, mail2Success.php etc.)
Le but est de déclencher l'envoi de mail en AJAX en appelant donc l'action sendMail, qui elle va récupérer le layout ET le contenu grâce à unLe rendu est ok lorsqu'il n'y a pas d'AJAX, par contre dès lors que je fais un event.preventDefault() dans mon JS, le contenu reste mais mon leader et mon footer présents dans le layout n'apparaissent plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->getController()->getPresentationFor('mails', 'monMail');
Voici la partie js :
Mon action sendEmail :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // fichier.js $(document).delegate("#email_partners", "click", function(event){ event.preventDefault(); var address = $(this).attr('href'); // action ajaxSendEmailToPartners() $.get(address, function(data){ if('success' == data.status) { //... } else { //... } }); });
L'action générant le contenu du mail n'a rien de spécial : elle récupère les paramètre et les renvoie au template monMailSuccess.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public function executeAjaxSendEmailToPartners(sfWebRequest $request) { // [...] foreach($partners as $partner) { $this->getRequest()->setAttribute('atb1', $atb1); $this->getRequest()->setAttribute('atb2', $atb2); // [...] $content = $this->getController()->getPresentationFor('mails', 'monMail'); //Ligne qui pose visiblement probleme die($content); // Retourne le contenu avec layout quand je désactive le event.preventDefault, et le contenu sans layout lorsqu'il est activé. Tools::sendTemplatedEmail($from, $to, $subject, $content); } $json['status'] = 'success'; $this->getResponse()->setContentType('application/json'); $json = json_encode($json); $this->renderText($json); return sfView::NONE; }
La question est donc : comment parvenir à envoyer mon mail avec layout en gardant la dimension AJAX, sachant que le même code fonctionne parfaitement si je retire l'AJAX ?
Si je vais à l'URL monsite/mails/ajaxSendEmailToPartners le layout est présent.
Un grand merci à celui ou celle qui parviendra à me faire avancer![]()
Partager