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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    Membre averti
    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
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    Membre averti
    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
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Quelle version de PHP (précisément) ?

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, 15h49
  2. [Delphi] Cherche moteur 3D ultra simple à utiliser
    Par Matt2094 dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 22/05/2006, 10h17
  3. Les systèmes de templates / Moteurs de templates java
    Par eXiaNazaire dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2006, 14h38
  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, 22h16
  5. moteur de template ?
    Par djoukit dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 14/10/2004, 10h53

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