Système de template php

Statut
N'est pas ouverte pour d'autres réponses.

Tifox

ou pas
Je suis en train de regarder pour système de template en php, mais je me rend compte qu'il y a en a un certains nombres, et que ce n'est pas évident de trouver des informations dessus (utilisation efficacité, simplicité, ...), hormis en les testant.

Est-ce que certains d'entre vous ont déjà testé et/ou adopté certains systèmes de template, et pourquoi ?
 

Lagwagon

Jésus
Staff
Nous pour le moment, dans la guilde on fonctionne via le forum et on link les templates directement sur le site de blizzard avec leur simulateur. En y ajoutant un petit commentaire.
C'est encore le plus simple je pense =]
 

Lagwagon

Jésus
Staff
Ok c'est bon, je suis fatigué je pensais qu'on était dans la section Wow :gne:

:0)
 
S

Shrekju

ex membre
J'utiliser Smarty. J'apprécie assez bien la programmation en langage "smarty". Par exemple foreach. Certains ne l'apprécient pas pcq il y a trop de fonctions de ce genre. Une fois qu'on a un peu la main, c'est assez pratique. Ce n'est p-e pas le meilleur mais c'est celui qui me convient le mieux.
 
Comme le disait un des développeurs de PHP (Je pense qu'il s'agit du père de PHP) : PHP est un moteur de template. N'utilisez pas de surcouche à un couche ;)

Cependant, si tu trouves que c'est si bien d'utiliser des templates, Smarty est connu et a une aide assez bien développée.
 

guslinux

Gamerz'ien
Perso j'ai laissé tombé les librairies de template ... et j'utilise PHP ...

-> Un include et une bonne gestion de la cache : ca te donne un système de template à la Ruby on Rails, cad syntaxe en php, possibilité de faire des for,if,appels de fonctions, etc etc etc ...
 
1er
OP
Tifox

Tifox

ou pas
Pour Ahava, merci pour le comparatif, mais au vu de la date (2004), je ne lui fais pas complètement confiance.

J'avais regardé la librairie de phpbb, mais je n'ai pas été convaincu du fait que ça demande un surplus de travail. En effet, Il faut déclarer dans le fichier php ce qui sera utilisé dans les fichier tpl (donc si on eut rajouter une info (qu'on suppose déjà avoir dans le fichier php) dans une page, il faut la déclarer dans la page ET dire quelque part dans le fichier php que cette info doit apparaitre dans la page)

Pour ce qui est de la nécessité d'une lib de template, c'est vrai que je ne suis pas convaincu. En fait, je suis actuellement en train de réécrire tout ce qui me sert de base pour faire des site afin de me rapprocher le plus possible d'un modèle MVC et d'avoir un maximum de modularité. donc je regarde un peu ce qui existe afin de ne pas réinventer la roue si ce n'est pas nécessaire.
 

SkYlEsS

Elite
Y a moyen d'avoir un bout de ton code en exemple ... ça m'intrigue :-'
 
1er
OP
Tifox

Tifox

ou pas
En fait, il n'y a encore rien du tout comme code.

Le principe du modèle MVC est de séparer la présentation (V de view), des données (M de model) et de lier les 2 via un contrôleur (C). Lorsqu'on se trouve sur une page et qu'on fait une action (un clic en général), on appelle le contrôleur qui va exécuter cette action. Le contrôleur va exécuter les calcul en se basant sur les données et sur les paramètres fournis par la page qui a appelé le contrôleur et choisir la vue a afficher en retour. Ca c'est le modèle MVC expliqué rapidement.

Ce que je cherche, c'est d'adapter ça en php de la manière la plus simple (pour le developpeur) possible.

Le contrôleur sera représenté par un page php pure, qui sera appelée lors d'une action sur une page. Elle récupérera/enregistera les donnée grâce a d'autre classes qui faciliteront l'accès à la base de données, puis sélectionnera une vue (un template ?) a afficher.

Ce que je cherche pour l'instant, c'est la partie vue (c'est pour ça que je regarde les template), la partie abstraction des données (pas encore regardé), et un moyen d'automatiser le passage de paramètres entre la page et le contrôleur.

Mais bon, je n'en suis qu'au début de mes recherche, ça peut encore changer.
 
Perso j'utilise aussi PHPLib mais Smarty est bien aussi, bien documenté, plus puissant même si cela s'apparente plus à un language carrément à part.

Il est aussi plus complexe si tu veux aller dans les retranchements.

;)

PS : sinon preg_replace est pas mal non plus si tu veux du simple! :-D
 

Ahava

Revenant
Tifox a dit:
En effet, Il faut déclarer dans le fichier php ce qui sera utilisé dans les fichier tpl (donc si on eut rajouter une info (qu'on suppose déjà avoir dans le fichier php) dans une page, il faut la déclarer dans la page ET dire quelque part dans le fichier php que cette info doit apparaitre dans la page)
Bah, oui et non. Tu instancie un objet PHP, où tu indique la template à utiliser, en gros.Dans la template coucou.tpl, j'ai ceci (simple exemple) :
Code:
<html><head></head><body>{COUCOU}</body></html
Dans le fichier PHP, j'ai donc ceci :
Code:
// instanciation de l'objet
$template = new Template('./dossierTemplate/tpl/');
// j'indique quels fichiers je veux utiliser
$template->set_filenames(array('tpl_coucou' => 'coucou.tpl'));
// remplissage d'une var bidonne
$salut = 'Hey, voilà mon systeme de template fonctionnel !';
// j'indique que pour remplir {COUCOU}, j'utilise la variable $salut
$template->assign_vars(array('COUCOU' => $salut));
// je génère la template pour l'afficher 
$template->pparse('coucou');
Et pour faire un systeme de cache (post de guslinux), très simple :
Code:
// put in cache
ob_start();
// generate the page
$template->pparse('coucou');
// put the result of the page in this variable
$result = ob_get_contents();
// write what is in this variable in an html file 
file_put_contents('./cache/'.salut.'html',$result);
// clear the cache
ob_end_clean();
Loetheri a dit:
Comme le disait un des développeurs de PHP (Je pense qu'il s'agit du père de PHP) : PHP est un moteur de template. N'utilisez pas de surcouche à un couche ;)
Ah ouais ? Et comment séparer alors la couche présentation de la couche métier ? Comment changer le design sans devoir recoder tout le site ? Tant qu'à faire, oublions la O.O., codons tout un dans un seul script sans aucune possibilité de réutiliser ce qu'on a déja codé :-9 :-9 Nan, je déconne. Sincèrement je prends php comme un langage de programmation, et je trouve qu'un systeme de templates vaut la peine d'être implémenté si l'on tiens un peu à la perenité de son projet. Imaginer phpBB sans aucun systeme de templates, on en parlerait même pas tellement ca serait pas connu... :-D
 

SkYlEsS

Elite
Je retiens qu'il y a deux choses que j'n'ai toujours pas compris : cette histoire de template et de mise en cache :pfiou:

Un jour, je comprendrai :]
 
1er
OP
Tifox

Tifox

ou pas
Un système de template, c'est un système qui permet de séparer le code php (pour faire des calcul), de la présentation des résultat de ces calculs. Ceci afin de pouvoir facilement modifier la présentation d'un site web sans devoir toucher au code.

Un exemple concret : une page php qui affiche le résultat de l'addition de 2 variables. Voila ce que ça donne si on ne sépare pas la présentation du code des calcul :
Fichier page.php
Code:
<?php
$a = 3;
$b = 2;
?>

<html>
	<head>
	</head>
	
	<body>
		<h1> Addition de <?php echo $a; ?> et <?php echo $b; ?></h1>
		<p>
		<?php
		echo $a.' + '.$b.' = '.($a + $b);
		?>
		</p>
	</body>
</html>
Maintenant, si on sépare (la j'utilise un système de template + ou - imaginaire) :
Fichier page.php
Code:
<?php
$a = 3;
$b = 2;
$c = $a + $b;
$tpl = new template();
$tpl->setTemplate('page.tpl');
$tpl->setVar('a', $a);
$tpl->setVar('b', $b);
$tpl->setVar('c', $c);
?>
Fichier page.tpl
Code:
<html>
	<head>
	</head>
	
	<body>
		<h1> Addition de {a} et {b}</h1>
		<p>
			{a} + {b} = {c}
		</p>
	</body>
</html>
On voit tout de suite que c'est plus facile de modifier le look de la page dans le 2e cas.

Pour l'histoire de cache, je te revoie sur le post de guslinux, histoire de ne pas se disperser ici : https://www.gamerz.be/comment.mettre.cache.pt160281_1.html
 
1er
OP
Tifox

Tifox

ou pas
Ahava a dit:
Bah, oui et non. Tu instancie un objet PHP, où tu indique la template à utiliser, en gros.Dans la template coucou.tpl, j'ai ceci (simple exemple) :
Code:
<html><head></head><body>{COUCOU}</body></html
Dans le fichier PHP, j'ai donc ceci :
Code:
// instanciation de l'objet
$template = new Template('./dossierTemplate/tpl/');
// j'indique quels fichiers je veux utiliser
$template->set_filenames(array('tpl_coucou' => 'coucou.tpl'));
// remplissage d'une var bidonne
$salut = 'Hey, voilà mon systeme de template fonctionnel !';
[COLOR=Red]// j'indique que pour remplir {COUCOU}, j'utilise la variable $salut
$template->assign_vars(array('COUCOU' => $salut));
// je génère la template pour l'afficher 
$template->pparse('coucou');[/COLOR]
Ce qui m'embête, c'est que je voudrai éviter de devoir faire toute ce que j'ai mis en rouge, que je trouve redondant. Je voudrai que que mon template puisse récupérer tout seul, comme un grand, des information de mon contrôleur php.
Et il y a en fait moyen de le faire avec php 5 et les ob_... (du moins il me semble, faut que je teste), et cette solution garde l'avantage de laisser la page de template en html/php, donc pas de nouveau langage a apprendre. J'ai trouvé l'info, sur un lien de guslinx sur le post de la cache en php : http://sahid.funraill.org/2007/01/23/modele-mvc-en-php/

Enfin, j'ai plein d'idée, faut que je teste tout ça.
 

SkYlEsS

Elite
Tifox a dit:
Pour l'histoire de cache, je te revoie sur le post de guslinux, histoire de ne pas se disperser ici : https://www.gamerz.be/comment.mettre.cache.pt160281_1.html
Tifox, mon informateur préféré :love: J'ai bien compris l'histoire des Templates mtn :=) (Mais qu'offres en plus les templates tels que Smarty au fait ?)

Pour le cache, j'n'arrive justement pô à comprendre non plus malgré la lecture complète du topic ... si tu avais le temps de m'expliquer par un exemple simple, comme toujours :-' (dans le topic du gus alors)

Merci !
 

Ahava

Revenant
Bah si tu vois qu'une page est tres tres souvent demandée, et que les infos qui y sont ne changent pas trop trop vite et que tu veux libérer un peu ta BD (vu que la page a bcp de requetes), tu va générer un fichier html du résultat de la génération de ta page toutes les 2 minutes par exemple...

Donc une fois toutes les deux minutes ta page fera ses requetes, et le reste du temps c'est juste une inclusion html donc tu libere bcp de ressources....
 

guslinux

Gamerz'ien
SkYlEsS a dit:
Je retiens qu'il y a deux choses que j'n'ai toujours pas compris : cette histoire de template et de mise en cache :pfiou:

Un jour, je comprendrai :]
C'est relativement simple :
-> L'Objectif du template : avoir un fichier spécialisé pour l'interface graphique, de pouvoir y injecter des données et récuperer le résultat dans une variable en s'inspirant du modèle MVC.

Pour réaliser cet objectif, plusieurs solutions :
- Utiliser une librairie PHP avec un langage propre, et des appels propres.
- Combiner un simple include() d'un fichier melant html et php à la gestion de la cache PHP.

Pour plus d'informations sur la cache PHP je vous invites à vous documenter sur le sujet.

Exemple :
Code:
$SALUT = "Nouveau message";
ob_start();
include('gui/test.html');
$INTERFACE .= ob_get_contents();
ob_end_clean();
Dans gui/test.html on trouvera :
Code:
<p><?=$SALUT?></p>
En fait, ca revient au meme que la programmation en PHP dite "basique", sauf que plus tot que de faire l'include à l'endroit du code html global où on veut que le résultat soit envoyé... on stocke le résultat dans une variable.

Avantage :
- Pas de moteur additionnel pour la génération du template
- Langage de template = PHP !

Amélioration :
- S'inspirer des fonctions PEAR QuickForm pour créer des inputs de manière rapide et simple.

Je ne sais pas si j'ai été clair :-D

Ps : Je pense que pour mieux comprendre, il faut essayer avec un exemple concret. Par exemple un listing ...
 

guslinux

Gamerz'ien
Ahava a dit:
Bah si tu vois qu'une page est tres tres souvent demandée, et que les infos qui y sont ne changent pas trop trop vite et que tu veux libérer un peu ta BD (vu que la page a bcp de requetes), tu va générer un fichier html du résultat de la génération de ta page toutes les 2 minutes par exemple...

Donc une fois toutes les deux minutes ta page fera ses requetes, et le reste du temps c'est juste une inclusion html donc tu libere bcp de ressources....
Non c'est pas le meme types de cache ca ^^

Quand je parlais de la cache, c'était la "sortie ecran" de PHP qu'on peut mettre dans une variable.

En gros, quand tu fais un echo, ca va dans la mémoire et puis c'est transmit. Si on arrive à récuperer le contenu de la mémoire pour le traiter comme une variable ... on a un système de template à base de PHP :-D
 

Ahava

Revenant
Ah, oké, ton template contient du code php... Mouais, c'est une facon de faire, pourquoi pas...

Perso, je reste sur phpLib pour le moment : car j'ai commencé comme ça, et j'aime le fait que le webdesigner, sans rien connâitre de PHP, pourra juste faire les designs sans se préoccuper du reste.

Oué je sais, au lieu de lui apprendre de pas toucher à {SALUT} je devrais lui apprendre à pas toucher à <?php echo $SALUT ?> mais bon...
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut