IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

AJAX et getPresentationFor() : mail envoyé sans layout [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut AJAX et getPresentationFor() : mail envoyé sans layout
    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 à un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getController()->getPresentationFor('mails', 'monMail');
    Le 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.

    Voici la partie js :

    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
    		{
    		    //...
    		}
    	});
    });
    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
    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;
      }
    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

    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

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Problème résolu.

    Il suffisait de forcer l'utilisation du layout dans l'action qui génère le mail.
    C'est donc bel et bien cette ligne qui posait problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content = $this->getController()->getPresentationFor('mails', 'monMail');
    Il suffit alors de rajouter cette ligne dans l'action 'monMail' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setLayout('layout_mail');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mail envoyé sans erreur mais non reçu
    Par Skalp dans le forum Framework .NET
    Réponses: 0
    Dernier message: 15/06/2012, 16h00
  2. Création mail lotus sans l'envoyer
    Par DKreeK dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2011, 18h47
  3. [Mail] Envoyer un mail sans logiciel
    Par poitierjohan dans le forum Langage
    Réponses: 3
    Dernier message: 16/08/2006, 06h49
  4. Comment Envoyé un mail auto sans confirmation.
    Par Az3rTy dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/07/2006, 21h16
  5. Modification auto du corps d'un mail envoyé via Lotus Note
    Par DeepXtaZy dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/06/2003, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo