8796 sujets

Développement web côté serveur, CMS

Hello à tous,

Je cherche à rendre plus lisible un système de newsletter au format HTML.

Le contenu de cette newsletter est envoyé par la fonction PHP mail() avec pour attribut une variable $messageClient contenant mon code html.

Afin de garder la couleur syntaxique et d'éviter des copier-coller à chaque modif je voudrais appeler le contenu HTML de la newsletter par un include...mais voilà je n'y arrive pas Smiley bawling

Ci-dessous quelques lignes ....
 $messageClient="'".include("content.html")."'";
mail($emailClient,$sujet,$messageClient,$From);

Si quelqu'un a une idée je suis preneur Smiley cligne
Ps: Le reste du développement est correct c'est en voulant remplacer le code html par l'include que ça bug.
Modifié par AspiGeek (13 Jul 2009 - 19:02)
Hello,
et avec quelque chose du style

$messageclient  = readfile('tonfichier.html');


(je n'ai pas pu tester, mais j'aurais essayé ça spontanément).

a+
P.
Hummm je viens d'essayer et pas d'amélioration.
Le contenu est directement interprété par le navigateur, pas moyen de le contenir dans la variable.

Rien ne s'affiche dans le mail de réception. Smiley bawling

Edit: je viens d'essayer la fonction file_get_contents() le contenu est bien assimilé comme une string mais du coup mais mon code php à l'intérieur n'est pas interprété...pas cool...

Bon bah je vais garder mon bon vieux copier-coller alors!
Modifié par AspiGeek (13 Jul 2009 - 15:16)
Modérateur
Salut AspiGeek, Smiley smile

roooo, le copier/coller. C'est pas glop tout ça Smiley ravi

Un include() te suffit amplement. Smiley cligne Perso, je préfère require_once().
ex fichier_1.php :

$une_var = "du texte";

ex fichier_2.php :

include("fchier_1.php");

echo $une_var;


Je crois que tu t'es pris trop la tête. Smiley cligne . Si tu as besoin de récupérer plusieurs valeurs d'un coup, utilise un tableau (array()).

Pourquoi faire compliquer quand on peut faire simple. Smiley smile

++
Modifié par Nolem (13 Jul 2009 - 15:49)
Salut Nolem,

Ta méthode est celle que j'ai déjà en place plus ou moins Smiley smile

Le problème est que je veux garder ma coloration syntaxique dans ton fichier_1.php or dans une string tout le code est de couleur identique alors c'est galère pour les modifs Smiley bawling

Mais tu dois avoir raison je dois me prendre la tête pour rien...
Modérateur
En reprenant ton idée et en reprenant mon idée, ce serait à peu près :
(fichier 1)

$emailClient = "domain@domain.com";
$sujet = "mon sujet";
$messageClient = "du texte et encore du texte et encore ...";
$From = "moi@domain.com";


(fichier 2)

include("fchier_1.php");
$br = "<br />";

echo $emailClient.$br.$sujet.$br.$messageClient.$br.$From;

mail($emailClient,$sujet,$messageClient,$From);


Attention, ne pas oublier de faire un conditionnelle de test lors de l'envoi du mail
(SI mail -> message envoi ok SINON message erreur de traitement)

<<<EDIT
N'oublie pas qu'il y a phpmailer ou pear mail qui peuvent te faciliter grandement ton travail. Smiley cligne
EDIT;

++
Modifié par Nolem (13 Jul 2009 - 16:23)
Modérateur
Bonjour AspiGeek,

En Coldfusion, il y a la fonction <cfsavecontent ...>. J'ai recherché l'équivalent en PHP, et je suis tombé sur ce sujet.

Quelques pistes sont données, peut-être que ça pourra t'aider. Smiley cligne
Modérateur
Tony Monast=> Je ne sais pas si la syntaxe Heredoc est utile dans ce cas.

AspiGeek => peux tu mettre sur le forum, la partie de ton code que tu voudrais inclure stp ?

++
Merci de vous pencher sur le problème.
Voici le code...

  //Variable Flash utf8 => iso8859
     $nomIso= utf8_decode(htmlspecialchars($nom));
     $societeIso= utf8_decode(htmlspecialchars($societe));
     $telIso= utf8_decode(htmlspecialchars($tel));
     $emailIso= utf8_decode(htmlspecialchars($email));
     $prestaIso=utf8_decode(htmlspecialchars($presta));
     $participantIso=utf8_decode(htmlspecialchars($participant));
     $villeIso=utf8_decode(htmlspecialchars($ville));
	 $budgetIso=utf8_decode(htmlspecialchars($budget));
     $dateIso= utf8_decode(htmlspecialchars($date));
     $dureeIso=utf8_decode(htmlspecialchars($duree));
     $demandeIso= utf8_decode(htmlspecialchars($demande));
	 
	 
	 $emailClient=$emailIso;
	 $emailDM='newsletter@test.com';
	 $sujet='Test| Votre devis est en préparation';
	 
	 $messageDM="------Test Newsletter------\n\n
Nom: $nomIso\n
Société: $societeIso\n
Telephone: $telIso\n
Email: $emailIso\n
Prestation: $prestaIso\n 
Nbr Participants: $participantIso\n
Ville: $villeIso\n
Budget: $budgetIso\n
Date: $dateIso\n
Durée: $dureeIso\n\n
Commentaire: $demandeIso";
	 
     $messageClient='<html>
<head>
   <title>Votre Devis est en préparation</title>
   <style type="text/css">
   p{
	   margin:0 0 14px 0;
   }
   </style>
</head>
<body>
<!-- Mon code HTML -->
</body>
</html>';
	 

$From  = "From:no-reply@test.com\n";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-15\n";

$FromMe = "From:no-reply@test.com\n";
$FromMe .= "MIME-version: 1.0\n";
$FromMe .= "Content-type: text/plain; charset= iso-8859-15\n";

mail($emailClient,$sujet,$messageClient,$From);
mail($emailDM,$sujet,$messageDM,$FromMe);
?> 

Mon code html fait plus de 300 lignes et newsletter oblige le css est inline d'ou ma douleur a voir ces 300 lignes dans la même couleur sous mon éditeur.

Je voulais donc exporter mon contenu html dans un fichier externe et l'appeler par un include mais pas moyen de l'inclure dans la variable $messageClient.

Tony Monast, ColdFusion... si tu me dis que c'est une machine a café je te crois Smiley sweatdrop
Modifié par AspiGeek (13 Jul 2009 - 16:43)
Modérateur
AspiGeek a écrit :

Tony Monast, ColdFusion... si tu me dis que c'est une machine a café je te crois Smiley sweatdrop


Est-ce que tu dis ça dans le sens que tu n'as aucune idée de ce qu'est Coldfusion?

Pour ton problème, les deux solutions proposées dans le sujet que j'ai trouvé ne fonctionnent pas? Je pense notamment à celle-ci :



 $variableName = <<<HEREDOC
Some Text<br>
$qryGetUsers[UserName]<br>
$qryGetUsers[FirstName]
HEREDOC;  


Ceci dit, je ne sais pas si tu peux y mettre un include à l'intérieur. Je ne connais PHP qu'en surface.
Tony Monast a écrit :

Est-ce que tu dis ça dans le sens que tu n'as aucune idée de ce qu'est Coldfusion?


ColdFusion je sais juste que ça existe Smiley cligne

Faut relativiser ce problème n'est pas vital mais j'aurai préféré détacher le contenu de la newsletter du script lui même.
je reste cependant surpris que ma première solution ne marche pas...

 $messageClient="'".include("content.html")."'";

Modifié par AspiGeek (13 Jul 2009 - 17:02)
Modérateur
Logiquement, tu coupes ton fichier 1 (suivant ce que tu veux scinder et le réutiliser ultérieurement dans ton application), juste avant les instructions mail. Ce qui ferait :

Ton fichier 1

//début de ton script déposé sur le forum
// ...
$From  = "From:no-reply@test.com\n";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-15\n";

$FromMe = "From:no-reply@test.com\n";
$FromMe .= "MIME-version: 1.0\n";
$FromMe .= "Content-type: text/plain; charset= iso-8859-15\n";


Ton fichier 2 :

include("fichier_1.php");

$message_ok = "L'envoi du mail s'est bien déroulé";

if(mail($emailClient,$sujet,$messageClient,$From)){
	echo $message_ok;
}elseif(mail($emailDM,$sujet,$messageDM,$FromMe)){
	echo $message_ok;
}else{
	die("erreur de traitement d'envoi");
}


l'instruction include ou autres de la même famille (include_once(), require(), require_once()) ne se comporte pas tout à fait comme un loadMovieNum() (AS 2). En gros un include, c'est comme si tu ajoutes du code en amont de ton propre code.

À propos de la syntaxe Heredoc, tu peux regarder ce lien qui en parle efficacement.

++
Modifié par Nolem (13 Jul 2009 - 17:38)
Je crois que vous avez mal compris ma demande. Smiley decu

Je cherche juste à attribuer le contenu d'un fichier HTML (newsletter) à ma variable $messageClient.

Dans ton exemple Nolem, ça ne dissocie pas le contenu de la variable et du coup j'ai toujours mes 300 lignes de même couleur dans mon éditeur.

Si tu préfères je cherche à exporter le contenu de la variable $messageClient pour pouvoir travailler avec la coloration syntaxique plus efficacement car intervenir dans une chaine de 300 lignes c'est un peu galère.

$messageClient='<html>
<head>
   <title>Test</title>
</head>
<body>
<!-- Mon code HTML -->
</body>
</html>';

Voilou j'espère avoir été plus clair Smiley smile
Modifié par AspiGeek (13 Jul 2009 - 18:20)
Modérateur
Bin là, c'est encore plus simple. Tu te crées un gabarit html que tu vas enregistrer sous le nom que tu veux voir même l'extension que tu désires (page_mail.gab) avec des mots clefs :


<html>
<head>
	<title>%%TITREPAGE%%</title>
</head>
<body>
	<h1>%%TITRE_DE_CONTENU%%</h1>
	<p>%%MON_CONTENU%%</p>
</body>
</html>


après d'un point de vu php :

$titre_page = "ma page";
$titre_contenu = "Le titre";
$contenu = "du texte";

$gabarit= file_get_contents("mon_chemin/page_mail.gab");

//ceci = quand tu trouves ceci, tu me le remplaces par cela dans ceci.
$gabarit = str_replace("%%TITREPAGE%%",$titre_page,$gabarit);
$gabarit = str_replace("%%TITRE_DE_CONTENU%%",$titre_contenu,$gabarit);
$gabarit = str_replace("%%MON_CONTENU%%",$contenu,$gabarit);

echo $gabarit;


Il est évident que l'on peut l'optimiser et que tu peux utiliser include (avec la suite de ton script) pour réutiliser ultérieurement.

En espérant cette fois ci t'avoir aidé Smiley smile

++

ps :code fait de tête, j'ai peut être fait une pétouille Smiley ohwell
Modifié par Nolem (13 Jul 2009 - 18:46)
Yes, j'avais déjà évoqué la solution du file_get_contents dans mon 3ème post mais ton astuce avec str_replace() fait que je marque le sujet résolu et te dis un énorme merci Smiley cligne .

Bonne soirée @+