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

Bibliothèques et frameworks PHP Discussion :

Cherche moteur de template


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    DevJunior
    Inscrit en
    Août 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : DevJunior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2018
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Cherche moteur de template
    Bonjour, je suis à la recherche d'un moteur de template.

    J'ai fini mon site, le seul bémol c'est que des certaines vues (mon site est en mvc) j'ai pas mal de boucle / condition, et je trouve ça dégueulasse.

    Du coup j'ai jeté un coup d'oeil aux moteurs de template mais c'est des trucs ultra complexe avec système de cache et tout non moi je veux un truc basique.

    Phplib est vraiment pas mal mais on ne peut pas faire de boucles/conditions.

    En gros, moi je veux juste un truc qui me permettrait de changer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
        if(!empty($tasks_name)) { ?>
        <ul>
        <?php foreach($tasks_name as $task_name) { ?>
        <li><?= $task_name ?></li>
            <?php } ?>
        </ul>
    En ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {if(!empty($tasks_name))}
    <ul>
        {foreach $tasks_name as $task_name}
        <li>{$task_name}</li>
        {endforeach}
    </ul>
    {endif}
    En gros juste faire des variables/boucles/condition plus proprement qu'avec des <?php } ?> à tout va dans le code.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu peux le faire proprement en PHP sans passer par un moteur de template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    // fonction d'échappement
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
    $html = '';
    if ( ! empty($tasks_name)) {
        foreach ($tasks_name as $ts) {
            $html .= '<li>'.$hsc($ts).'</li>';
        }
        $html = '<ul>'.$html.'</ul>';
    }
    ensuite dans ton code à l'emplacement de cette liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo <<<html
    <!-- code html -->
    {$html}
    <!-- code html -->
    Généralement, tu construits tes blocs vue en début de script et ensuite tu fais un rendu global de ta page en fin de script en y insérant tes blocs créés aux bons emplacements

  3. #3
    Futur Membre du Club
    Homme Profil pro
    DevJunior
    Inscrit en
    Août 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : DevJunior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2018
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Re
    Je n'ai pas tout à fait compris... Au final faire $html = '<ul>' etc je trouve ça dégueulasse, du html n'a rien à faire dans un controlleur (enfin c'est mon avis)

    Et du coup avec une condition t'es obligé de faire <?php if(...) {*?> etc non ?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est clair qu'un contrôleur ne doit jamais contenir de HTML
    Par contre, tu dis avoir ton site en MVC, et vu ta problématique, cela me paraissait évident que ce code devait être logé dans la vue.

    Poste voir le code complet d'une de tes pages stp.

    Tu connais les notations NOWDOC et HEREDOC de PHP ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    DevJunior
    Inscrit en
    Août 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : DevJunior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2018
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Re
    Je ne connais pas, je débute php en fait (c'est du procédural)
    Voici un exemple:

    home (vue)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <div class="container">
        <h2>Liste des projets</h2>
    <form method="post" id="add-form">
        <div class="row">
            <div class="four columns">
                <label for="project-name">Nom du projet</label>
                <input class="u-full-width" type="text" id="project-name" name="project-name" placeholder="My project" />
            </div>
            <div class="four columns">
                <label for="project-desc">Description du project</label>
                <input class="u-full-width" type="text" id="project-desc" name="project-desc" placeholder="A short description about your project" />
            </div>
            <div class="four columns">
                <label for="project-deadline">Date limite du projet</label>
                <input class="u-full-width" type="date" id="project-deadline" name="project-deadline-date" />
                <input class="u-full-width" type="time" name="project-deadline-time" />
            </div>
        </div>
        <button class="button-primary" type="submit" name="add-project">Confirmer</button>
        <button class="button" type="button" id="form-cancel">Annuler</button>
    </form>
    <?php if(isset($error)) {
        foreach($error as $err) { ?>
            <p class="error"><?= $err ?></p>
        <?php }
    } ?>
    <button class="button-primary m-top" id="form-add">Nouveau projet</button>
        <div class="row">
    <?php foreach($projects as $project): ?>
    <div class="three columns box clickable" data-id="<?= $project->id ?>" id="project-box">
        <div class="title"><?= $project->name ?></div>
        <div class="row task center big m-top"><?= $project->list_count ?></div>
        <?php if($project->list_count > 1) { ?>
        <div class="row task center imp">tâches</div>
        <?php } else { ?>
        <div class="row task center imp">tâche</div>
        <?php } ?>
        </div>
    <?php endforeach; ?>
        </div>
    </div>
    home (controller)
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    require 'model/homeModel.php';
     
    if(isset($_POST['add-project'])) {
        $pj_name = htmlspecialchars($_POST['project-name']);
        $pj_desc = htmlspecialchars($_POST['project-desc']);
        $pj_deadline = [
            'date' => htmlspecialchars($_POST['project-deadline-date']),
            'time' => htmlspecialchars($_POST['project-deadline-time'])
        ];
     
        if(empty($pj_name))
            $error[] = "Vous devez nommer votre projet.";
        if(strlen($pj_name) > 100)
            $error[] = "Le nom de votre projet ne doit pas dépasser 100 caractères.";
     
        if(empty($pj_desc))
            $pj_desc = "Aucune description.";
        if(strlen($pj_desc) > 255)
            $error[] = "La description de votre projet ne doit pas dépasser 255 caractères.";
     
        if(empty($pj_deadline['date']))
            $error[] = "Vous devez choisir une date.";
        if(empty($pj_deadline['time']))
            $error[] = "Vous devez choisir une heure.";
     
        if(!isset($error)) {
            createProject($pj_name, $pj_desc, "$pj_deadline[date] $pj_deadline[time]");
        }
    }
     
    $projects = getProjects();
     
    require 'tpl/header.tpl';
    require 'tpl/home.tpl';
    require 'tpl/footer.tpl';
    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
    function createProject($name, $desc, $dl) {
        $db = getData();
        $req = $db->prepare('INSERT INTO project (name, description, deadline) VALUES (:name, :desc, :deadline)');
        $req->execute([
            'name' => $name,
            'desc' => $desc,
            'deadline' => $dl
        ]);
    }
     
    function getProjects() {
        $db = getData();
        $req = $db->query('SELECT project.id, project.name, COUNT(list.id) AS list_count
                          FROM project
                          LEFT JOIN list ON (list.project_id = project.id)
                          GROUP BY project.id DESC');
        return $projects = $req->fetchAll();
    }
    Voilà en gros la façon dont je m'y suis pris.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Quelle version de PHP (précisément) ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    DevJunior
    Inscrit en
    Août 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : DevJunior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2018
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    PHP 7.2.9

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Voici une première version de ta vue
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <?php
     
    // fonction d'échappement
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
    $html = ['errors' => '', 'projects' => ''];
     
    // errors
    if (isset($error)) {
        foreach ($error as $err) {
            $html['errors'] .= "<p>{$hsc($err)}</p>";             
        }
    }
     
    // projects
    foreach ($projects as $p) {
        $plural = $p->list_count > 1 ? 's' : '';
        $html['projects'] .= <<<html
    <div class="three columns box clickable" data-id="{$hsc($p->id)}" id="project-box">
        <div class="title">{$hsc($p->name)}</div>
        <div class="row task center big m-top">{$hsc($project->list_count)}</div>
        <div class="row task center imp">tâche{$plural}</div>
    </div>
    html;
    }
    ?> 
    <div class="container">
        <h2>Liste des projets</h2>
        <form method="post" id="add-form">
            <div class="row">
                <div class="four columns">
                    <label for="project-name">Nom du projet</label>
                    <input class="u-full-width" type="text" id="project-name" name="project-name" placeholder="My project" />
                </div>
                <div class="four columns">
                    <label for="project-desc">Description du project</label>
                    <input class="u-full-width" type="text" id="project-desc" name="project-desc" placeholder="A short description about your project" />
                </div>
                <div class="four columns">
                    <label for="project-deadline">Date limite du projet</label>
                    <input class="u-full-width" type="date" id="project-deadline" name="project-deadline-date" />
                    <input class="u-full-width" type="time" name="project-deadline-time" />
                </div>
            </div>
            <button class="button-primary" type="submit" name="add-project">Confirmer</button>
            <button class="button" type="button" id="form-cancel">Annuler</button>
        </form>
        <?= $html['errors'] ?>
        <button class="button-primary m-top" id="form-add">Nouveau projet</button>
        <div class="row"><?= $html['projects'] ?></div>
    </div>
    et le même résultat en utilisant la notation 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
    // fonction d'échappement
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
    $html = ['errors' => '', 'projects' => ''];
     
    // errors
    if (isset($error)) {
        foreach ($error as $err) {
            $html['errors'] .= "<p>{$hsc($err)}</p>";
        }
    }
     
    // projects
    foreach ($projects as $p) {
        $plural = $p->list_count > 1 ? 's' : '';
        $html['projects'] .= <<<html
    <div class="three columns box clickable" data-id="{$hsc($p->id)}" id="project-box">
        <div class="title">{$hsc($p->name)}</div>
        <div class="row task center big m-top">{$hsc($project->list_count)}</div>
        <div class="row task center imp">tâche{$plural}</div>
    </div>
    html;
    }
     
    echo <<<html
    <div class="container">
        <h2>Liste des projets</h2>
        <form method="post" id="add-form">
            <div class="row">
                <div class="four columns">
                    <label for="project-name">Nom du projet</label>
                    <input class="u-full-width" type="text" id="project-name" name="project-name" placeholder="My project" />
                </div>
                <div class="four columns">
                    <label for="project-desc">Description du project</label>
                    <input class="u-full-width" type="text" id="project-desc" name="project-desc" placeholder="A short description about your project" />
                </div>
                <div class="four columns">
                    <label for="project-deadline">Date limite du projet</label>
                    <input class="u-full-width" type="date" id="project-deadline" name="project-deadline-date" />
                    <input class="u-full-width" type="time" name="project-deadline-time" />
                </div>
            </div>
            <button class="button-primary" type="submit" name="add-project">Confirmer</button>
            <button class="button" type="button" id="form-cancel">Annuler</button>
        </form>
        {$html['errors']}
        <button class="button-primary m-top" id="form-add">Nouveau projet</button>
        <div class="row">{$html['projects']}</div>
    </div>
    html;
    Un peu de lecture par ici sur les chaines de caractères et par sur les fonctions anonymes (la fonction d'échappement $hsc)

    Tu noteras que c'est beaucoup plus propre. Pour la deuxième version, renomme ton fichier en .php

  9. #9
    Futur Membre du Club
    Homme Profil pro
    DevJunior
    Inscrit en
    Août 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : DevJunior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2018
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup, j'aime bien je vais appliquer cette méthode.

    Par la suite, est-ce que tu me conseilles de me renseigner sur de vrais moteur de template comme twig ou smarty ?

Discussions similaires

  1. [Smarty] Moteurs de templates et ralentissement?
    Par Danny Blue dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 16/06/2006, 14h49
  2. [Delphi] Cherche moteur 3D ultra simple à utiliser
    Par Matt2094 dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 22/05/2006, 09h17
  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