Partage
  • Partager sur Facebook
  • Partager sur Twitter

Moteur de templates ou pas??

Sujet résolu
    4 avril 2007 à 21:22:56

    Bah ce que j'ai mis dans mon post précédent :) MVC ne veut pas dire forcément template !
    • Partager sur Facebook
    • Partager sur Twitter
      5 avril 2007 à 1:31:31

      C'est passionnant ce sujet !
      Encore un truc de fou qui en est quand même à sa 4ème page !

      Et on remarque quand même que ça part vite en sucette sur internet en général, les gens se lâchent plus facilement, et on a du mal à dire ce que l'on pense... Enfin ça passe moins bien sur le net... Bref on va fermer la petite parenthèse de psycho/philo...

      Finalement c'est vrai tiens, PHP sans templates, c'est beaucoup plus rapide que PHP avec templates (c'est stupide à dire non ?)...

      Mais alors, moi qui ait tout commencé mon projet en templates ? Pour que ce soit peut être plus facile pour un designer qu'il n'y aura peut être pas ?

      Ah lala... Peut être aussi que cette folie des templates vienne en partie des forums phpBB... Utilisant ce fameux template de phpLib assez facile à prendre en main et à utiliser, du côté designer et codeur php, il est utilisé partout partout, et surtout, tant de monde crée ou modifie des fichiers de synthaxe pour template phpBB...

      Que ce soit dit, peut être aussi est-il plus facile de modifier le code HTML que le CSS (dans ce cas peut-on vraiment dire que l'on soit designer ?)...

      Bref, si je vois que le site est bien trop lent dû à ma solution de template (surtout si je n'arrive pas à mettre ma solution de cache partout), il va falloir que je trouve le moyen de remettre ça correctement et proporement en PHP simple sans trop de problèmes...

      Que d'aventures quand on tombe sur un forum comme ça (remarquez l'influence qu'ont certaines personnes peut jouer, soit on campe sur ses positions [méfiance], soit on se jette dedans [naïveté ou révélation lol])...

      Alors voilà, amis du soir[...] !
      lol, très intéressant, j'attends la suite !
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2007 à 11:21:51

        Bonjour à tous!
        Je me permet de relancer le sujet, pour vous proposer une alternative.
        Comme on dit, Templates ou pas Templates, eh bien, la réponse du "Pas templates" trouve ses arguments dans le fait que faire une sorte de "surcouche" à PHP, peut être inutile... Bon, c'est un point de vue.

        Pour ceux qui utilisent le moteur de templates de PHPLib ou bien celui de phpBB (c'est quasiment le même), j'ai une alternative à vous proposer.

        Alors, l'avantage de cette méthode est que pour ceux qui ont commencé à coder leur site (comme je l'ai fait) avec ce moteur, et bien je propose une classe qui ne change rien au niveau du code PHP, où il faut juste changer les variables et définitions de bloc dans les fichiers de template.

        Cette méthode est effectivement plus rapide que le moteur de templates lui même, car il n'y a pas de RegEx, etc...

        Après, c'est un choix, pour ma part je ne l'utiliserais qu'au cas où le site ralentirait trop. (Deux lignes à changer :) ).

        Voici un petit exemple (la classe ni le code de templates ne sont finalisés, mais ça fonctionne...)

        Voici donc un code typique pour les templates:

        <?php
        $template = new Template("template_path");

        $array_users = array(); //un tableau d'utilisateurs

        $template->set_filenames("body", "body.html"); //ou body.tpl si votre extension est tpl

        $template->assign_vars(array(
            "BIENVENUE"  =>  "Bienvenue à tous",
            //etc, pour ceux qui connaissent
        ));

        foreach($array_users as $user)
        {
            $template->assign_bloc_vars("utilisateurs", array(
                "NOM"      =>   $user["nom"],
                "PRENOM"   =>   $user["prenom"],
                "EMAIL"    =>   $user["email"],
            ));
        }
        ?>


        Voici un exemple très basique du code php.

        Maintenant, le template normal:
        body.html

        <html>
        <body>

        {BIENVENUE}

        <table>
        <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Email</th>
        </tr>
        <!-- BEGIN utilisateurs -->
        <tr>
        <td>{utilisateurs.NOM}</td>
        <td>{utilisateurs.PRENOM}</td>
        <td>{utilisateurs.EMAIL}</td>
        </tr>
        <!-- END utilisateurs -->
        </table>

        </body>
        </html>


        Bien, voilà le code, sans indentation (oui le tab dans le textarea du zCode c'est pas encore ça lol)

        Et voici la version qui va avec les templates plus rapide (mais comprenant du code PHP):
        body.html

        <html>
        <body>

        <?php echo $BIENVENUE; ?>

        <table>
        <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Email</th>
        </tr>
        <?php /*BEGIN utilisateurs*/ if(isset($utilisateurs)) foreach($utilisateurs as $t) { ?>
        <tr>
        <td><?php echo $t["NOM"]; ?></td>
        <td><?php echo $t["PRENOM"]; ?></td>
        <td><?php echo $t["EMAIL"]; ?></td>
        </tr>
        <?php /*END utilisateurs*/ } ?>
        </table>

        </body>
        </html>


        Bien alors voilà, pour conclure, je dirais que ce système est un peu plus ennuyeux au sens où insérer du code PHP comme ça, dans le HTML, on s'éloigne du principe que l'on voulait développer avec les Templates pour les designers.

        Bon, je serais tenté de dire que pas tant que ça, le contenu php des balises reste quand même du simple code, le plus souvent à copier/coller.
        Cependant, il reste dans la classe à finaliser la fonction assign_var_from_handle(), et dans le code le fait de gérer si la variable n'existe pas (<?php echo @$UNE_VARIABLE; ?>).

        Voilà, ensuite, pour ceux qui ont déjà commencé en Templates normaux, et bien il faut se dire que tout remettre avec ce système de balises, c'est un peu lourd. Il faudrait alors mettre en place un système de conversion (une bonne fois pour toute, je vais essayer de mettre ça en place) des fichiers de templates normaux à ceux avec les balises PHP.

        Je trouve que ça peut être un bon outil. Au pire, si cela ne plaît pas aux designers, il y a moyen de faire tous les fichiers en templates normaux, puis de lancer le convertisseur.

        Voilà pour l'alternative, si des gens sont intéressés...

        Merci ! ^^
        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2007 à 12:19:14

          > Tu peux te passer du if(isset())

          > Tu peux utiliser la syntaxe alternative au lieu des { et }
          • Partager sur Facebook
          • Partager sur Twitter
            6 avril 2007 à 12:31:13

            Comme l'a dit Emacs à quelques reprises, un moteur de templates ne sert à rien. On pourrait même partir du principe que séparer html de php ne sert pas à grand chose. Enfin si, à simplifier le boulot du designer me dirait vous. Là aussi, Emacs a donné deux solutions, et je n'en répèterais qu'une seule : tu fais une page html, comme si la page php avait été générée, et tu refiles ça à ton designer. Il pourra très bien s'en occuper, vu qu'il n'y aura que du html. Bon, ensuite, c'est sur, faut que le codeur s'amuse à remette le php sur tout ça. Mais bon, ça prend quoi, une demie-journée pour cinq ou six pages ? Pas beaucoup de boulot, quand on part du principe que le site va gagner en vitesse d'affichage ...

            Edit : scorpe51, avec ta méthode, si tu veux du traitement de variables dans des boucles, t'es un peu dans la mouise ^^'
            • Partager sur Facebook
            • Partager sur Twitter
              6 avril 2007 à 12:34:39

              Jour vous, j'ai pas eu le courage de lire les 4 pages mais le sujet est très intéressant :)

              J'aimerais bidouiller un petit script qui profiterait des avantages des moteurs de templates, c'est à dire de n'avoir aucun code PHP dans les TPL, sans leurs inconvénients :-°

              Mais comment faire pour que les variables puissent s'afficher entre accolades {var}, et que je n'aie pas à mettre des php echo partout ?
              • Partager sur Facebook
              • Partager sur Twitter
                6 avril 2007 à 13:17:28

                Citation : mythos75

                Jour vous, j'ai pas eu le courage de lire les 4 pages mais le sujet est très intéressant :)

                J'aimerais bidouiller un petit script qui profiterait des avantages des moteurs de templates, c'est à dire de n'avoir aucun code PHP dans les TPL, sans leurs inconvénients :-°

                Mais comment faire pour que les variables puissent s'afficher entre accolades {var}, et que je n'aie pas à mettre des php echo partout ?



                Si j'étais toi, je me serais abstenu de demander ça ;) !

                La solution, justement, c'est d'utiliser le moteur de templates qu'est PHP ;) !
                • Partager sur Facebook
                • Partager sur Twitter
                  6 avril 2007 à 14:01:17

                  Citation : RedoX

                  > Tu peux te passer du if(isset())

                  > Tu peux utiliser la syntaxe alternative au lieu des { et }


                  Et bien non, si je me passe du if isset, et qu'il n'y a pas de tableau dans le foreach, tu as une jolie erreur PHP (après tu peux les désactiver pour le site en vFinale)

                  Et la synthaxe alternative oui, c'est un choix. Mais c'était juste une ébauche pour ceux qui utilisent Template de phpBB.

                  Citation : NL



                  Edit : scorpe51, avec ta méthode, si tu veux du traitement de variables dans des boucles, t'es un peu dans la mouise ^^'



                  Eh bien, si tu as bien compris le principe, il faut juste savoir que tu n'as normalement plus de traitement à faire dans les boucles. C'est exactement ce que j'ai expliqué... Il s'agit purement et simplement de l'affichage de texte auparavant traité. N'as-tu jamais utilisé des Templates ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 avril 2007 à 14:38:15

                    Si ton array est initialisé [ à vide ] t'auras pas d'erreurs... après c'est une question de rigueur quand ton code hein ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 avril 2007 à 15:09:36

                      Actually... je vais m'expliquer.

                      Il y a des blocs dans le code, si tu ne veux pas les afficher, tu ne les déclares pas. Donc en clair, le tableau n'est pas initialisé. Et comme on ne cherche pas à savoir les tableaux dans le code HTML, le isset est plutôt conseillé. Mais c'est vrai, c'est une question de rigueur (c'est relatif).

                      Après on va pas s'éterniser dessus, finalement, ce n'est qu'une suggestion que je voulais partager, au pire on peut oublier ^^ .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 avril 2007 à 15:40:44

                        Scorpe, si j'ai bien compris, tu fais tout passer par des arrays, et puis tu les traites o_O Ca doit pas être spécialement optimisé ton truc ^^
                        Et j'ai déjà utilisé des templates, qui s'amusaient tous à parser mon texte avec de multiples preg_replace => super rapide ><
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 avril 2007 à 16:00:43

                          Citation : xboxman

                          Je te montre!

                          Fichier tpl.php
                          <?php

                          $tpl = fopen("news.html", "r"); //on ouvre le index.html en lecture seule
                          $html = fread($tpl, filesize("news.html")); //lecture du fichier
                          fclose ($tpl); //fermeture

                          $connect = mysql_connect("localhost", "root", "");
                          mysql_select_db ("test");

                          $sql = "SELECT * FROM news";
                          $result = mysql_unbuffered_query($sql);
                          $nb_news = mysql_num_rows($result);

                          mysql_close ($connect);

                          $html = str_replace ("{NBNEWS}", "$nb_news", $html);

                          echo $html;

                          ?>



                          Fichier news.html


                          <?php
                          include('tpl.php');
                          ?>


                          [...]
                                     <p>
                                        Il y a eu {NBNEWS}!
                                     </p>
                          [...]




                          Merci, je cherchais un truc du genre aussi.

                          Par contre le $nb_news ne doit pas être entre guillemets dans ton str_replace :)

                          $html = str_replace ("{NBNEWS}", $nb_news, $html);


                          Mais l'idéal ce serait de ne pas avoir à appeler str_replace pour chaque variable, sinon c'est un peu long :-°

                          Une regex ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 avril 2007 à 16:48:51

                            Et tu peux pas mettre <?php echo $nb_news; ?> à la place de {NBNEWS} (qui te ferai gagner le temps que php ouvre un fichier, le traite avec des expressions régulières puis l'affiche. Je te laisse faire des tests de vitesse entre les deux méthodes, et tu vois le temps que tu gagne à écrire uniquement {VAR} au lieu de echo $var; si ce temps vaut vraiment le coup d'être gagné...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 avril 2007 à 16:55:11

                              Ouaip ça en vaut peut être pas la peine...
                              Mais je cherche quand même, pour le fun :-°
                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 avril 2007 à 18:55:33

                                Citation : NL

                                Scorpe, si j'ai bien compris, tu fais tout passer par des arrays, et puis tu les traites o_O Ca doit pas être spécialement optimisé ton truc ^^
                                Et j'ai déjà utilisé des templates, qui s'amusaient tous à parser mon texte avec de multiples preg_replace => super rapide ><


                                Bon... o_O On dirait que vous avez du mal à assimiler (je sais que c'est pas forcément aussi clair qu'une conversation de vive voix). L'idée c'est de reprendre les mêmes fonctions que Template de phpBB, sans utiliser de regex. Les tableaux sont bien plus rapides qu'on ne le pense. Et cette méthode est également plus rapide que les Template regEx, le script s'exécute 2 à 3 fois plus vite.

                                Après vous codez comme vous voulez ! :-° <- je l'aime bien çui là de smilie.
                                Générer le code HTML dans le PHP, c'est bon aussi. Le truc c'est que quand tu te mets aux templates, 'faut un petit temps de réadaptation. Avec les classes surtout, et par exemple la méthode magique __toString() qui est bien pratique.

                                Merci

                                Pis on va pas en faire un fromage. :magicien:
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  6 avril 2007 à 19:07:51

                                  Ben à la base je disais surtout qu'il valait mieux ne pas utiliser de templates, mais bon ^^'
                                  Ta méthode est peut-être plus rapide que tout l'attirail de phpBB - pas très dur en soi ^^ - mais nécessite quand même de mettre dans un array (généralement via une boucle) et ensuite traiter l'array. Bref, tu traites deux fois des données, alors que tu peux le faire une seule fois ...
                                  Ensuite, tu dis que dans tes templates, tu mets du PHP, alors que c'est censé éviter ça hein ^^'

                                  Et puis,

                                  <?php /*BEGIN utilisateurs*/ if(isset($utilisateurs)) foreach($utilisateurs as $t) { ?>


                                  Ma foi, si on prend ton idée, tu fais tout dans ton fichier et, à la suite de ton fichier, plutôt que de faire des BEGIN qui servent à rien, tu le traites. Donc tu n'as plus qu'un fichier moins rapide qu'une page codée sans 'templates' ^^'
                                  Et puis, vu comme ça, c'est aussi bordélique qu'une page sans 'templates', donc le designer ne gagne pas grand chose ^^'
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 avril 2007 à 22:09:47

                                    Les templates, utile ou non.. Ca se discute en fait..
                                    Mais le principal est de coder de la façon Model View Controller..
                                    Pour plus d'explications : http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      6 avril 2007 à 22:33:17

                                      Vous cherchez presque tous des solutions pour faire du templating mais vous pouvez très bien vous contenter de la solution ci-dessous.

                                      Admettons que nous travaillons avec des pseudoframes. Nous avons deux répertoires. L'un appelé "controllers" et l'autre "views". Le premier contient tous les scripts de traitement des données et l'autre contenant les vues, les templates hein !!! :D

                                      Nous allons passé une variable $page dans l'url qui aura cette valeur. Cette valeur doit être le nom du fichier d'une vue et de celui d'un controlleur (facultatif). Analysez le principe ci-dessous :


                                      <?php
                                              /*
                                               *      Fichier index.php
                                               *
                                               */


                                              // Importations des scripts importants
                                              require('conf/config.php');
                                              require('includes/fonctions.php');
                                             
                                              // A-t-on besoin d'un controlleur ?
                                              if(!empty($_GET['page']) && file_exists('controllers/'. $_GET['page'] .'.php'))
                                              {
                                                      require('controllers/'. $_GET['page'] .'.php');
                                              }
                                             
                                              // Importation du header
                                              require('views/header.php');
                                             
                                              // Importation de la vue de la page
                                              if(!empty($_GET['page']) && file_exists('views/'. $_GET['page'] .'.php'))
                                              {
                                                      require('views/'. $_GET['page'] .'.php');
                                              }
                                                else
                                              {
                                                      require('views/accueil.php');
                                              }
                                             
                                              // Importation du pied de page
                                              require('views/footer.php');

                                      ?>


                                      Vous remarquez ici que index.php ne contient aucun code HTML. Ce n'est que du PHP. Le fichier footer.php ferme le HTML et coupe la connexion à la base de données si elle est ouverte.

                                      Toutes les pages sont appelées de la sorte : http://www.votresite.com/index.php?page=votrePage

                                      Nous allons créer deux pages. Un controleur (controllers/news.php) et une vue (views/news.php).

                                      Le contrôleur va récupérer toutes les news et la vue va les afficher au moyen d'une simple boucle while()


                                      <?php

                                              /*
                                               *      Fichier news.php
                                               *
                                               *      Type : controlleur
                                               */

                                               
                                              // Connexion à la bdd
                                              connexionBDD(HOST, LOGIN, PWD, BDD);
                                             
                                              // Récupération des news
                                              $resultat = mysql_query('SELECT titre, corps, dateNews, auteur FROM news ORDER BY dateNews DESC LIMIT 10');
                                             
                                      ?>


                                      Passons à la vue :


                                      <?php
                                              /*
                                               *      Fichier news.php
                                               *
                                               *      Type : vue
                                               */

                                               
                                               // Test du nombre de résultats
                                               if(mysql_num_rows($resultat) > 0)
                                               {
                                                      while($news = mysql_fetch_assoc($resultat))
                                                      {
                                      ?>
                                      <div id="news<?php echo $news['id']; ?>">
                                              <h3>Le <?php echo convertirDate($news['dateNews']); ?> par <?php echo afficherDonnees($news['auteur']); ?> : <?php echo afficherDonnees($news['titre']); ?></h3>
                                             
                                              <?php
                                                      echo convertirBBCode(nl2br(afficherDonnees($news['corps'])));
                                              ?>
                                      </div>
                                      <?php
                                                      } // End while
                                             
                                              } // End if
                                      ?>


                                      Vous remarquez ici l'importance de fonctions utilisateurs qui permettent de faire un maximum abstraction des traitements. Ces fonctions, écrites en langue naturelle permettent aussi à un webdesigneur de prendre un main le code PHP avec facilité. Pour lui, ces noms de fonctions sont plus parlants que des noms anglais par exemple.

                                      Vous voyez que ce n'est pas très compliqué de s'approcher du modèle MVC avec PHP sans user des moteurs de templates à la noix.

                                      Vous pouvez améliorer encore ce modèle MVC au moyen de classes POO comme la librairie PDO qui permet d'accéder à n'importe qu'elle base de données sans se soucier de son type (MySQL, ODBC, PostgreSQL...) et de récupérer par exemple en une fois tous les résultats d'une requête SQL dans un tableau. Il suffira alors seulement de parcourir le tableau avec une boucle foreach() dans la page de vue correspondante.

                                      Librairie PDO : http://fr.php.net/pdo (nécessite PHP5 + driver MySQL pour une BDD MySQL).

                                      Mon site de PHP (voir url dans la signature si ça vous intéresse) est par exemple codé sur cette base (en un peu plus complexe quand même ^^ ).

                                      J'espère que ce petit mini rikiki tutorial vous aura convaincu de ne pas utiliser les templates mais d'utiliser toute la puissance de PHP et de ses nouveaux outils :)

                                      ++

                                      Hugo.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 avril 2007 à 1:10:50

                                        Merci ^^

                                        Ca serait intéressant de discuter en PV de la conception web, et échanger 2-3 idées. Enfin, ce que j'en dit, lol...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          7 avril 2007 à 9:32:01

                                          Citation : scorpe51

                                          discuter en PV de la conception web, et échanger 2-3 idées.


                                          Moi les idées..., je les vends ! :p
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            7 avril 2007 à 12:44:39

                                            Citation : Bison

                                            Citation : scorpe51

                                            discuter en PV de la conception web, et échanger 2-3 idées.


                                            Moi les idées..., je les vends ! :p



                                            Ah pas bête Bison ^ ^ Je te souhaite encore une joyeuse Pâques au passage espèce de cloche :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              7 avril 2007 à 15:59:25

                                              Citation : Emacs

                                              Ah pas bête Bison ^ ^ Je te souhaite encore une joyeuse Pâques au passage espèce de cloche :)


                                              MDR ! :lol::lol::lol::lol:
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                7 avril 2007 à 23:54:21

                                                Citation : Emacs

                                                Ah pas bête Bison ^ ^ Je te souhaite encore une joyeuse Pâques au passage espèce de cloche :)


                                                Bouuuuh c'est vieux comme expression ça ^^ !

                                                Joyeuse Pâques à toutes et à tous. Que nos lapins soient productifs... je suis gourmand (et puis remarque, à l'allure où sa b**** se reproduit ces bêtes-là :-° ) !

                                                Alex
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  8 avril 2007 à 0:44:24

                                                  C'est vieux mais si je lui dis ça c'est aussi parceque c'est un délire entre nous depuis un autre forum :)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    9 avril 2007 à 22:03:04

                                                    Citation : Bison

                                                    Citation : scorpe51

                                                    discuter en PV de la conception web, et échanger 2-3 idées.


                                                    Moi les idées..., je les vends ! :p



                                                    Tss non mais franchement, que pour les sous... rahlala dans quoi on vit :p
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      9 avril 2007 à 22:21:21

                                                      Vive la mondialisation et le capitalisme lol :p
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        9 mai 2007 à 4:22:52

                                                        Bonjour,

                                                        j'ai une question à laquelle je ne trouve pas vraiment de réponse. Je n'utilise pas de moteur de template (j'ai fait un site entier récemment avec le moteur de PHPLib pour essayer, mais je trouve ça finalement lourdingue... Je crois même que je ré-écrirai ce site from scratch un jour sans rien dire à mon client). :-°

                                                        En revanche, j'essaie de séparer au maximum les "rôles" : les fichiers XHTML pour la structure du document, les fichiers CSS pour la mise en page, les fichiers PHP pour la couche métier, etc.

                                                        Mais j'hésite entre 2 méthodes, et c'est surtout la fermeture de la connexion MySQL qui me pose problème.

                                                        La 1re méthode donne ça chez moi :

                                                        news.php
                                                        /* ... connexion MySQL ... */

                                                        $cat = $_POST['categorie'];

                                                        if($cat == 0) {
                                                            $query = "SELECT * FROM database ORDER BY datecrea";
                                                        }
                                                        else {
                                                            $query = "SELECT * FROM database WHERE cat_id='".(int)$cat."' ORDER BY datecrea";
                                                        }


                                                        index.php
                                                        <!-- blabla html -->
                                                        <?php require('news.php'); ?>
                                                        <!-- blabla html -->

                                                        <?php while($row=mysql_fetch_assoc($results): ?>
                                                            <p class="news">
                                                                Titre : <?php echo $row['$titre']; ?>
                                                                Date : <?php echo $row['$datecrea']; ?>
                                                                Article : <?php echo $row['$article']; ?>
                                                            </p>
                                                        <?php endwhile ?>

                                                        sauf que je ne sais pas trop où mettre mysql_free_result() et mysql_close() ; je ne pense que que ce soit le rôle d'index.php de contenir ces fonctions...

                                                        La 2e méthode que j'utilise est le script de connexion SQL de Sylvain Guernion.

                                                        Ça donne ça :

                                                        news.php
                                                        /* ... connexion MySQL ... */

                                                        $cat = $_POST['categorie'];

                                                        if($cat ==0) {
                                                            $sql->select("*","database","","cat_id");
                                                        }
                                                        else {
                                                            $sql->select("*","database","cat_id=$cat","cat_id");
                                                        }

                                                        $results = $sql->db_result_ToArray();
                                                        $sql->free();
                                                        $sql->close_db();


                                                        Toutes les données de la requête sont stockées dans un tableau ; et donc :

                                                        index.php
                                                        <!-- blabla html -->
                                                        <?php foreach($results as $key => $value): ?>
                                                            <p class="news">
                                                                Titre : <?php echo $results[$key][titre]; ?>
                                                                Date : <?php echo $results[$key][datecrea]; ?>
                                                                Article : <?php echo $results[$key][article]; ?>
                                                            </p>
                                                        <?php endwhile ?>


                                                        C'est mieux, puisque je n'ai pas besoin de fermer la connexion (elle l'est déjà) et que je n'affiche que des données déjà chargées dans un tableau. Sauf que :

                                                        $sql->select("*","database","cat_id=$cat","cat_id");
                                                        et
                                                        <?php echo $results[$key][titre]; ?>

                                                        c'est vraiment moins sympa à écrire que :

                                                        $query = "SELECT * FROM database WHERE cat_id='".(int)$cat."' ORDER BY datecrea";
                                                        et
                                                        <?php echo $row['$titre’]; ?>

                                                        Je veux bien savoir ce qu'en pensent les pro-PHP !

                                                        Je voulais juste signaler que je suis issu du print et entièrement autodidacte (mes seuls enseignants sont les livres et le net), et que j'imagine volontiers que je dois avoir des lacunes évidentes... Donc please ne me criez pas dessus si j'ai écrit une horreur ! :p

                                                        Merci d'avance.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 mai 2007 à 1:28:57

                                                          Salut opentype,

                                                          Ta 2e méthode est lourde dans le sens où tu parcours 2 fois les résultats : une fois pour les stocker dans un tableau, et une autre fois pour les afficher. Si tu utilises php5, tu devrais regarder du coté des iterators : http://www.php.net/manual/fr/language.oop5.iterations.php . L'idée c'est d'utiliser le tampon du résultat mysql au lieu de vouloir le vider avec mysql_free_result(). Je peux donner des exemples si t'arrives pas.

                                                          Pour la connexion à la base de données, la fermeture est facultative car php la ferme tout seul à la fin de l'exécution du script. Cependant tu peux toujours appeler une page final.php qui s'occupera de quelques trucs après l'affichage (fermeture de la connexion mysql, et d'autres choses pourquoi pas). Tu peux mettre l'appel à final.php à la fin d'index.php je n'y vois pas d'inconvénient (il appelle bien news.php).

                                                          Pour ton écriture pas sympa, tu n'utilises pas correctement le foreach !

                                                          // long et pas beau :
                                                          foreach($results as $key => $value)
                                                          echo $results[$key]['titre'];

                                                          // court et sexy :
                                                          foreach($results as $key => $value)
                                                          echo $value['titre'];

                                                          // et encore mieux, car tu n'utilises pas la clé ($key) :
                                                          foreach($results as $value)
                                                          echo $value['titre'];


                                                          Bonne chance !
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            10 mai 2007 à 2:05:06

                                                            Bonsoir Winzou,

                                                            Citation : Winzou

                                                            Ta 2e méthode est lourde dans le sens où tu parcours 2 fois les résultats : une fois pour les stocker dans un tableau, et une autre fois pour les afficher.


                                                            OK, c'est logique, je reste sur la 1re méthode et la boucle while.

                                                            Citation : winzou

                                                            Si tu utilises php5, tu devrais regarder du coté des iterators


                                                            Je n'utilise pratiquement que PHP4, car mes clients ont déjà la plupart du temps des serveurs et peu proposent PHP5...

                                                            Citation : Winzou

                                                            Pour la connexion à la base de données, la fermeture est facultative car php la ferme tout seul à la fin de l'exécution du script. Cependant tu peux toujours appeler une page final.php qui s'occupera de quelques trucs après l'affichage (fermeture de la connexion mysql, et d'autres choses pourquoi pas). Tu peux mettre l'appel à final.php à la fin d'index.php je n'y vois pas d'inconvénient (il appelle bien news.php).


                                                            OK, adopté !

                                                            Citation : winzou

                                                            Pour ton écriture pas sympa, tu n'utilises pas correctement le foreach !


                                                            // long et pas beau :
                                                            foreach($results as $key => $value)
                                                            echo $results[$key]['titre'];

                                                            // court et sexy :
                                                            foreach($results as $key => $value)
                                                            echo $value['titre'];

                                                            // et encore mieux, car tu n'utilises pas la clé ($key) :
                                                            foreach($results as $value)
                                                            echo $value['titre'];

                                                            Ça, je vais l'imprimer et l'encadrer ! J'avais le sentiment que ce que je faisais était moche, mais je ne voyais pas trop où !

                                                            Merci beaucoup pour ta réponse, tout ça me semble plus clair ! ^^
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Moteur de templates ou pas??

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown