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

Langage PHP Discussion :

Template sans moteur de template


Sujet :

Langage PHP

  1. #1
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut Template sans moteur de template


    je découvre avec emerveillement les joies de ruby en ce moment.
    (c'est hors sujet, mais je recommande à ce propos Oreilly Head First Rails, et plus généralement la collection Head First qui très bien faite pour aborder un sujet nouveau)

    je me demandais une chose à propos de php dont j'aimerais avoir une confirmation :


    c'est un sujet classique
    http://php.developpez.com/faq/?page=...emplates_intro
    http://php.developpez.com/faq/?page=tbs#tbs-imbrication

    dès qu'on se retrouve en php à afficher une page qui liste qqch, on se retrouve à mélanger de la présentation avec du code (du foreach et des echo $truc). à moins bien entendu d'utiliser un moteur de template.

    cependant avec rails, la mme chose se fait par exemple comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <% for item in @items %>
      <li>  <%= item.name %> </li>
    <% end %>
    </ul>
    je suis assez bluffé par le fait qu'on peut par défaut sans rien installer de plus intercaler poser un bout de script ruby qui commence un foreach, refermer le script. poser du htlm comme si de rien n'était
    puis réouvrir une balise ruby pour referme le foreach.

    ma question : en php pur -- c'est à dire sans utiliser de moteur de template externe -- on ne peut pas faire ca ? si ?

  2. #2
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    peut-etre ce serait encore plus clair avec du code php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <?php foreach($items as $item)  {  ?>
      <li>  <?php echo $item->name; ?> </li>
    <?php } ?>
    </ul>
    ou une sorte d'équivalent


    ne peut juste pas marcher en php ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    on peut s'en rapprocher en activant la directive enable-short-tags au niveau du php.ini (ça peut poser problème et c'est vraiment très dommage) qui te permet d'écrire du code qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <? foreach( $truc as $machin ) : ?>
      <li>  <?=$machin->chose ?> </li>
    <? endforeach ?>
    </ul>

  4. #4
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    je ne connaissais pas les short tags

    ca a l'air tres bien ca.


    (ça peut poser problème et c'est vraiment très dommage)
    c'est quoi les pbs qui peuvent se poser ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Le problème se pose dès la première ligne d'un document XHTML avec la déclaration XML

    <?xml version="1.0" encoding="ISO-8859-1"?>
    C'est vraiment très dommage parce que les short-tags permettraient de clarifier grandement le mélange PHP/HTML

    EDIT :
    NB : la syntaxe alternative for : ... endfor n'est pas liée aux short tags par contre, et ça apporte un peu de clarté dans l'intégration dans du HTML. Enfin à mon goût, mais c'est subjectif

  6. #6
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    ahhhh pardon

    donc

    balises normales :
    short tags (qu'il faut activer avec php.ini enable-short-tags qui est désactivé par défaut je suppose)

    et autre sujet, qui n'a au final rien à voir avec les short tags :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ul>
    <?php foreach( $truc as $machin ) : ?>
      <li>  <?php =$machin->chose ?> </li>
    <?php endforeach ?>
    </ul>
    je suis un peu dubitatif sur cette syntaxe de foreach (pas testé encore)
    le ":"
    pas vu de trace dans la doc php http://us3.php.net/manual/en/control...es.foreach.php mis à part ce comment :
    adam dot sindelar at gmail dot com
    14-Apr-2008 01:45
    You can also use the alternative syntax for the foreach cycle:

    <?php
    foreach($array as $element):
    #do something
    endforeach;
    ?>

    Just thought it worth mentioning.
    d'ailleurs dans cet exemple le code php dans le foreach n'est pas cassé en deux blocs de code php entre coupé de html non ?
    comment s'appelle ce type de syntaxe ? (il me faut une accroche google )

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Heu... Syntaxe alternative

    plus de renseignements ici : http://docs.php.net/manual/fr/contro...ive-syntax.php

    attention, si je me souviens bien

    ne fonctionne pas

  8. #8
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    ben ca alors ?!?

    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
     
    </body>
    </html>
    sh-3.2$ cat test.php
    <html>
    <body>
     
    <?php $items = array("fourchette", 2, 33, 444, 66565); ?>
     
    bon alors ? cette syntaxe alternative ? ca marche ou bien ?
     
    <br><br>
     
    <?php foreach ($items as $item): ?>
    valeur : <?php echo $item; ?>  <br>
    <?php endforeach; ?>
     
     
    </body>
    </html>
    fonctionne bien comme attendu ...
    je pourrais avoir du php/htlm mixés bcp + propre maintenant...


    par contre effectivement

    ni
    ni
    ne fonctionne.

    mis à part les short tags, il n'y a pas moyen de faire plus court que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $item; ?>
    ?

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Non

    En même temps à partir du moment ou tu as bien capté la séparation PHP traitements et PHP présentation, les templates deviennent un peu de la littérature. Certains te diront même que PHP est en lui même un langage de templates.

    Tu peux faire un mélange PHP/HTML très clair en t'appuyant sur la syntaxe heredoc:


    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
    <?php
    $html = <<<SECTION1
    <html>
        <head>
            <title>$titre</title>
        </head>
        <body>
            Je raconte un peu ma vie machin tout ça....
            Et sur plusieurs lignes parce que je suis un peu narcissique.
    SECTION1;
     
    $items = array("fourchette", 2, 33, 444, 66565);
    foreach ($items as $item):
    $html .= <<<BOUCLE1
            valeur : $item <br>
    BOUCLE1;
     
    endforeach; 
    echo $html;
    ?>
    Lorsque tu as des bouclages sur une seule ligne de HTML, l'intérêt est pas évident, mais sur de grosses portions, la syntaxe heredoc permet de garder une bonne clarté. Accessoirement tu peux aussi en profiter pour sortir du HTML présenté correctement pour l'utilisateur qui regarderait le source.

    Tu peux faire la même chose avec des chaines entourées de guillemets, mais l'avantage de heredoc est de "titrer" les portions de HTML, ça permet de s'y retrouver plus facilement.

  10. #10
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    ou encore un moteur de template simplissime

    Code html du template : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html>
        <head>
            <title><tpl_titre></title>
        </head>
        <body>
            Je raconte un peu ma vie machin tout ça....
            Et sur plusieurs lignes parce que je suis un peu narcissique.
            <tpl_content>
        </body>
    </html>

    Code php pour la vue : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $tpl = file_get_contents('chemin/du/fichier');
     
    $titre = 'myTitle';
    $items = array("fourchette", 2, 33, 444, 66565);
    $content = implode ('<br/>', $items); 
     
    $tpl = str_replace('<tpl_titre>', $titre, $tpl);
    $tpl = str_replace('<tpl_content>', $content, $tpl);

  11. #11
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    merci pour ces éclairages.

    En même temps à partir du moment ou tu as bien capté la séparation PHP traitements et PHP présentation, les templates deviennent un peu de la littérature.
    => on est bien d'acccord

    j'avais entendu parler de heredoc il y aun moment. mais c'est en le revoyant maintenant que je me souviens du léger malaise que j'avais ressenti la 1ere fois : les >>>> et autres <<<<

    il y a cent ou deux cents ans, je m'étais retrouvé à optimiser du code realtime J2ME (un jeu) sur un téléphone vraiment pourri. Mais alors vraiment pourri. Genre à coté les series Nokia 3210 c'est la rolls. Et donc pas de decimal, donc à la place integer et shifts << et >> pour simuler la virgule et tt convertir à la volée... vlà la prise de tete à maintenir.

    mais bon je digresse.

    plus généralement, ce que m'évoque la syntaxe heredoc c'est que ce n'est pas naturel comme lecture (peut-etr une question d'habitude justement ). je m'interroge : est-ce que le code sera tjs aussi facile à prendre en main si qqn d'autre que moi se retrouve à faire la maintenance dans disons 5 ans ?

    précisément, j'ai des pages un peu trop longues et complexes avec trop de foreach () { echo "<a href=\"truc/truc\">....
    ca m'a paru simple à lire/ecrire il y a un moment. mais maintenant que ca a refroidit, j'ai bcp moins envie d'y "toucher". or CA c'est le 1er symptome du code qui commence à mal vieillir...

    ce que j'aimerais avoir au final, c'est relativement peu de fichiers
    (ie pas fichier1 qui appelle les sous-templates fichier2 fichier3 fichier4 qui eux-meme appellent sous-sous-templates fichier5 fichier6 etc. Sachant que chaque fichier n'est appelé qu'une seule fois ds tte l'appli, pas réutilisé quoi)

    en mm temps, j'ai pas non plus envie de gros fichiers usine à gaz rebutants
    la situation actuelle? => chaque page a une page de traitement (php pur) + une page de visualisation (html embarquant du php => c'est celle-là qui est dure/chiante à lire/maintenir)

    est-ce qu'au moins heredoc donne qqch de vraiment + concis que <?php echo $truc ?> et devient + limpide à l'usage ?

Discussions similaires

  1. zend framework avec ou sans moteur templates ?
    Par yveson33 dans le forum Zend Framework
    Réponses: 3
    Dernier message: 12/03/2008, 21h25
  2. Commencer zendframework avec ou sans moteur de template
    Par whitespirit dans le forum Zend Framework
    Réponses: 4
    Dernier message: 25/01/2008, 11h59
  3. Les systèmes de templates / Moteurs de templates java
    Par eXiaNazaire dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2006, 13h38
  4. [OpenTBS] Nom d'un moteur de template
    Par cortex93 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/04/2006, 21h16
  5. moteur de template ?
    Par djoukit dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 14/10/2004, 09h53

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