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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Newsletter] Créer une newsletter HTML mais dynamique


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut [Newsletter] Créer une newsletter HTML mais dynamique
    Bonjour,

    J'ai mis en place un petit système de newsletter (fichier html) envoyée aux membres par une boucle, classique, et fonctionnement impeccable.

    Mais ma newsletter étant un fichier HTML, à l'heure actuelle je la modifie directement dans le code pour réaliser les suivantes. Comment faire pour qu'elle "se crée" automatiquement à partir d'un contenu de base de donnée inclus dans un gabarit ? Car je suppose que les newsletters qu'on reçoit quotidiennement ne sont pas créées manuellement chaque jour ?

    Le problème, c'est qu'un tel fichier devient du PHP !...
    Une idée pour me mettre sur la voie ? Merci d'avance.

  2. #2
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Bonjour,

    Il n'y a pas vraiment de problème...

    Tu créers un modèle standard générique que tu enregistres quelque part sur ton serveur genre : model.html

    Ensuite, dans l'administration lors de la création d'une nouvelle newsletter, tu charges dans ton éditeur WYSIWYG (tinymce, ckeditor, etc.) le fichier model.html via la fonction file_get_contents($adresse_du_modele)

    Ensuite, tu modifies le contenu... et pour sauvergarder tu enregistres dans une table mysql le contenu de chaque newsletter avec un identifiant différent ou tu enregistre avec un identifiant différent au format html:

    Si c'est ta première newsletter, alors newsletter-1.html, newsletter-2.html, etc.

    Par contre, penses à utiliser sendmail si tu envoies à des milliers de contact et ajoutes une tâche cron pour envoyer tes mails par petit paquets toutes les X minutes...

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    file_get_contents récupère le fichier tel qu'il est, si y'a du php dedans il va apparaitre, a moins de le lancer via http mais les variable ne seront pas pris en compte, pour récupèrer le contenu et interprète par PHP il faut utiliser le buffer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ob_start();
    require 'newletter.php';
    $html = ob_get_clean();
    ou si il est accessible

  4. #4
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Mais dans le modèle HTML, pourquoi y aurait-il du PHP? Le php servira sur base du modèle html de créer les newsletters souhaitées mais dans le modèle il ne doit pas y avoir de PHP...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Sayrus Voir le message
    Mais dans le modèle HTML, pourquoi y aurait-il du PHP? Le php servira sur base du modèle html de créer les newsletters souhaitées mais dans le modèle il ne doit pas y avoir de PHP...
    bah pourquoi pas ? imagine un template de newletter avec un article de blog, tu ferais comment pour envoyer le mail ?

  6. #6
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Ha ok, alors on parle de créer une newsletter sur base d'articles existants...

    En fait il y a 2 possibilités, la première que j'ai cité, une template html chargé dynamiquement avec un contenu bidon modifier manuellement lors de chaque nouvelle newsletter mais où le canevas est déjà présent.

    Ou alors plus dans ton cas, il faut créer un système de newsletters dynamiques:

    Pour cela il faut, créer un fichier header.html, footer.html, model-article.html

    Une fois les fichiers regroupés, ça forme la newsletter...

    Tu créer tes paramètres HTML démarquer par des balises de ton choix exemple: [UNSUBSCRIBE], [EMAIL], [NAME], [DATE], [CONTENT], [TITLE], etc.

    Ensuite, une fois ta template créée, il faut créer le méchanisme php avec le listing de tous les articles du site, et chaque article coché sera ajouté dans ta newsletter...

    Par exemple, une fois les articles choisi et les préférences de la newsletter ajoutées dans la db, tu génère ton fichier newsletter-xx.html

    et tes articles seront ajoutés les uns en dessous des autres dans ta newsletter avec le style css et HTML que tu auras défini dans model-article.html.

    model-article.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class="article">
    <h1>[TITLE]</h1><div class="date">[DATE]</div>
    [CONTENT]
    </div>
    Note que les classes ne sont pas indispensables, en effet, pour une bonne newsletter, les styles doivent être inclus dans l'attribut "style" de chaque tag et non chargé via CSS.

    Tu l'auras compris, les paramètres entre [...] sont remplacer avec une fonction PHP du style str_replace('[TITLE]', $row->title);

    etc.

    C'est vraiment chouette de créé un système de newsletters...

    Je sais de quoi je parle

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    mais si le template est en fonction des variables par exemple un tableau (la liste des articles) comment tu feras ?

  8. #8
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Si c'est une liste d'article...

    Que ce soit dans une db ou dans un array, si chaque élément de l'article s'y trouve c'est bon...

    Le but du jeu pour avoir facile, tu listes les articles, tu les choisis... Une fois la sélection faites, tu enregistres et ta newsletter est générée.

    Comment?

    Ben tu as sélectionnés les articles que tu veux donc tu récupères leur ID, via leur ID ben tu charges les données dynamiquement dans ta template...

    Tu n'as pas un exemple? Ce sera plus facile à expliquer...

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Sayrus Voir le message
    Si c'est une liste d'article...

    Que ce soit dans une db ou dans un array, si chaque élément de l'article s'y trouve c'est bon...

    Le but du jeu pour avoir facile, tu listes les articles, tu les choisis... Une fois la sélection faites, tu enregistres et ta newsletter est générée.

    Comment?

    Ben tu as sélectionnés les articles que tu veux donc tu récupères leur ID, via leur ID ben tu charges les données dynamiquement dans ta template...

    Tu n'as pas un exemple? Ce sera plus facile à expliquer...
    imagine une liste (truc, bidule, machin)

    avec mon template moi je fais

    template.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div>
        <ul>
            <?php foreach($items as $item): ?>
            <li><?php echo $item ?></li>
            <?php endforeach ?>
        </ul>
    </div>
    ensuite dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $items = array('truc', 'bidule', 'machin');
     
    ob_start();
    require 'template.php';
    $html = ob_get_clean();
     
    mail('test@exemple.com', 'test', $html);
    comment je fais ma liste avec ton systeme de crochet ?

  10. #10
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    imagine une liste (truc, bidule, machin)

    avec mon template moi je fais

    template.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div>
        <ul>
            <?php foreach($items as $item): ?>
            <li><?php echo $item ?></li>
            <?php endforeach ?>
        </ul>
    </div>
    ensuite dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $items = array('truc', 'bidule', 'machin');
     
    ob_start();
    require 'template.php';
    $html = ob_get_clean();
     
    mail('test@exemple.com', 'test', $html);
    comment je fais ma liste avec ton systeme de crochet ?

    exemple:

    model-article.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class="article">
    <h1>[TITLE]</h1><div class="date">[DATE]</div>
    [CONTENT]
    </div>
    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
    $array_articles=array(1 => array('title' => 'Mon article 1', 'date' => '17-12-2010', 'contenu' => '<p>mon contenu html'</p>),2 => array('title' => 'Mon article 1', 'date' => '17-12-2010', 'contenu' => '<p>mon contenu html'</p>),3 => array('title' => 'Mon article 1', 'date' => '17-12-2010', 'contenu' => '<p>mon contenu html'</p>));
     
    // 1, 2 et 3 représente l'id de l'article, ça pourrait etre 13,54,59
     
    $header=file_get_contents('model-header.html');
    $footer=file_get_contents('model-footer.html');
    $html=$header;
     
    foreach($array_articles as $id => $article)
    {
       $model=file_get_contents('model-article.html');
       $model=str_replace('[TITLE]', $article['title']);
       $model=str_replace('[DATE]', $article['date']);
       $model=str_replace('[CONTENT]', $article['content']);
     
      $html.=$model;
    }
     
    $html.=$footer;
    etc...

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    voila ou je voulais en venir, c'est que maintenant t'as plus 1 seul fichier de template mais plusieurs, et le traitement peux devenir vite conséquent.

  12. #12
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Mais non pas forcément... Pourquoi ce serait conséquent???

    A la rigueur tu peux même faire en 2 fichiers...

    Un général qui aurait le haut de page, le centre de page (contenu) et le bas de page

    tu aurais dans ce fichier ton HTML normal mais au moment du contenu tu fais appel au contenu dynamique via [ARTICLES]

    et la tu inclus $html, un truc dans le genre quoi...

    Mais le traitement est SUPER RAPIDE!!!

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est consentant par que tu dois faire 1 fichier part partie au lieu d'un seul, et retraiter chaque fichier derrière, et les assemblés, on s'éloigne du template standard ou finalement on se préoccupe pas de tout ca, si un jour j'ai envie de modifier une partie, je vais être obligé de fouillé dans dans les fichiers, les modifié, mais aussi modifier le code derrière.

  14. #14
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Tu peux très bien avoir 1 seule template avec comme HTML ceci:

    Une template d'exemple,il faut considérer les classes comme remplacées par "style" et les "div" par des tables, peut importe c'est un exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div class="header"> ... </div>
    <div class="content">
    <!-- debut article generic -->
    <div class="article">
       <h1>[TITLE]</h1>
       <span>[DATE]</span>
       [CONTENT]
    </div>
    <!-- fin article generic -->
    </div>
    <div class="footer"> ... </div>

    Ensuite lors du traitement on fait:

    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
    $template=file_get_contents(model-newsletter.html);
     
    $header=preg_match(... la condition qui te retournera de "$template" le bloc "header");
    $article=preg_match(... la condition qui te retournera de "$template" le bloc "article");
    $footer=preg_match(... la condition qui te retournera de "$template" le bloc "footer");
     
    $html=header;
     
    $model='';
    foreach($articles as $id => $article)
    {
          $model=$article;
          $model=str_replace('[TITLE]', $article['title']);
          $model=str_replace('[DATE]', $article['date']);
          $model=str_replace('[CONTENT]', $article['content']);
          $html.=$model;
     
     
    }
     
    $html.=$footer;

    Et voilà, le principe est le même non? C'est comme cela que fonctionne les moteurs de templates...

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Sayrus Voir le message
    Et voilà, le principe est le même non? C'est comme cela que fonctionne les moteurs de templates...
    certain moteurs oui, sauf qui y'a tout un framework derrière, ca sera jamais aussi simple pour son cas de fais les 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ob_start();
    require 'newletter.php';
    $html = ob_get_clean();

  16. #16
    Membre confirmé Avatar de Sayrus
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    899
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 899
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    certain moteurs oui, sauf qui y'a tout un framework derrière, ca sera jamais aussi simple pour son cas de fais les 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ob_start();
    require 'newletter.php';
    $html = ob_get_clean();
    Oui bien sûr c'est bien plus qu'une centaine de lignes de code, c'est un long développement à faire dans le cas que j'ai présenté...

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    très intéressants ces deux cas de figures.
    Donc l'un semble assez simple et court à mettre en place, l'autre un peu plus conséquent. Mis à part le temps de développement et le nombre de lignes de code, y en a-t-il un finalement qui devrait être plus rapide, etc ?..

    Je vais essayer les deux pour voir.

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par nicolas2603 Voir le message
    très intéressants ces deux cas de figures.
    Donc l'un semble assez simple et court à mettre en place, l'autre un peu plus conséquent. Mis à part le temps de développement et le nombre de lignes de code, y en a-t-il un finalement qui devrait être plus rapide, etc ?..

    Je vais essayer les deux pour voir.
    le plus rapide et plus simple c'est avec le buffer, si tu veux utiliser des moteur de template utilise Smarty ou Twig, l'avantage avec le buffer c'est que tas rien a réapprendre, et que c'est réutilisable pour des framework type Zend ou Symfony

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Ok. Je viens de tester avec le buffer, et j'ai l'impression que mon php n'est qu'à moitié interprété.

    Quand je visualise mon fichier PHP (dans lequel j'ai mes paramètres de connexion à la base de donnée et ma requête), le contenu est bien présent, renseigné via la requête.

    Mais quand j'envoie le mail, je reçois un mail avec ma newsletter, mais elle est vide, là où le php est sensé avoir été interprété par le buffer ! A moins qu'il y ait quelque chose que j'ai mal compris...

    Voici mon code :

    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
    $titre="La Newsletter ...";
    $from = "From: webmestre<webmestre@....fr>\nMime-Version:";
    $from .= " 1.0\nContent-Type: text/html; charset=ISO-8859-1\n";
    ob_start();
    require 'newsletter/newsletter.php';
    $contenu = ob_get_clean();
     
    $varTab=array('mail1','mail2','mail3',...);
    foreach ($varTab as $e_mail) {
        if (mail($e_mail,$titre,$contenu,$from)) {
    	echo "<li>Mail envoyé avec succés à ".$e_mail."</li>";
        } else {
    	echo "<li>Erreur d'envoi pour ".$e_mail."</li>";
        }
    }
    EDIT : à moins que le problème vienne du Content-Type de $from ?

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un echo du $contenu

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment créer une newsletter en HTML ?
    Par noarno dans le forum E-Mailing
    Réponses: 4
    Dernier message: 25/07/2007, 12h31
  2. [Newsletter] Créer une newsletter facile d'accès
    Par alex12 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/06/2007, 08h08
  3. Créer une newsletter facile d'accès
    Par alex12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 29/05/2007, 19h37
  4. Comment créer une newsletter
    Par pierrot10 dans le forum E-Mailing
    Réponses: 13
    Dernier message: 01/03/2006, 01h54
  5. [Mail] Créer une Newsletter
    Par pierrot10 dans le forum Langage
    Réponses: 4
    Dernier message: 22/02/2006, 20h32

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