Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Class template

Votre avis, vos améliorations et idées (surtout ^^)
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
Message édité 8 fois, dernière édition par B.Moncef, 06 Janvier 2008, 0:16     Lien vers ce message 27 Décembre 2007, 17:39
Hello,
à l'image de Babacooll (topic), je vous présente ma classe template (fichier :: mis à jour 05.01.2008 à 19:02).
Si vous voulez que je mette le code dans le message, je le ferais, mais comme ça c'est plus léger à lirehttp://www.fire-soft-board.com/fsb/images/smileys/fsb2_ouais.gif

Pour le moment je trouve cette class très opérationnel et suffisante pour une utilisation basique. Mais peut-être avez-vous des remarques à faire sur son état actuel ?

Ce que je voudrais faire pour améliorer encore cette class est l'ajout des bloc, des conditions, et ajouter une dérivée aux switch si leur condition n'est pas validée (l'équivalent du else dans FSB2) et enfin ajouter un système de cache.
Ca fait un peu de travail encore, mais ce qui va être le plus dur pour moi va être les blocs. J'ai déjà essayé quelques trucs mais je n'ai pas encore aboutit http://www.fire-soft-board.com/fsb/images/smileys/fsb2_oups.gif

Voilà, donc je suis à votre écoute si vous avez des suggestions à faire ou tout autres chose ^^
Bye,
EmmaBlack


http://www.emmablack.net/site/img/sig/signature.png
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1002
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 17:48
Juste une remarque, le meilleur moteur de templates, c'est php :
-Pas de pseudo langage supplémentaire
-Pas de parsage à implémenter
-De nombreuses fonctionnalités natives ou très faciles à coder
D'où des moteurs de template beaucoup plus puissant et beaucoup plus performant, puisque le parsage c'est coûteux. Et je suis certain qu'un tel moteur de template est en moyenne plus rapide qu'un moteur classique utilisant du cache…


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1502
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 18:53
Déjà, deux trois truc qui ressortent.

Pour ta méthide set_var, c'est quoi toutes ces conditions ? Oo

Tu devrais plutot faire une condition pour voir si c'est un array (dans ce cas, un petit array_merge suffit... :p), sinon, c'est forcemment le nom d'une variable et sa valeur (false peut être considérée comme une valeur !). Ainsi, ton elseif, tu peux le remplacer par un else, le premier if, par une detection d'un array, et le dernier else, le barrer :D

De même, ca fait un peu beaucoup de méthodes, avec tout tes set. C'est là que les blocs et autres joeyuseté du genre sont efficaces... Ou même, de simples variables.

Dans ta méthode de parsage, le if preg_match, bof... Un preg_replace suffit. De même, si il detecte une variable "normale", il va s'arrter là et pas faire le reste... D'ou l'utilité des preg_replace et autres preg_replace_callback.

J'ai la flemme de lire le reste en fait.

conclusion > Pas mal de truc superflus... Mais y'a de l'idée en tout cas. Par contre, ton moteur ne générant pas de fichier cache compilé à la volée, il risque d'être "plutot" lourd. Comme Sékiltoyai, je te recommande PHP dans ton cas :p


 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
  Lien vers ce message 27 Décembre 2007, 19:02
Merci pour vos réponses :)
Mais je ne comprend pas ce que vous voulez dire par le meilleur moteur de template est PHP http://www.fire-soft-board.com/fsb/images/smileys/neutral.gif

Sinon je vais améliorer de suite la méthode set_var et pour preg_replace et preg_replace_callback, je vais d'abord faire un détour par la doc. ^^

J'ai aussi penser supprimer la méthode set_switch. La propriété data étant publique, on peut simplement créer un switch en faisant $tpl->data['switch']['nom'] = true;
C'est un peu plus lourd, mais ça enlève une méthode et permet d'assigner une valeur à un switch (même si j'en vois pas trop l'utilité xD)


http://www.emmablack.net/site/img/sig/signature.png
 
Equipe des MODS
Avatar de Korko
  • Age : 21 ans
  • Messages : 2613
  • Inscrit : 06 Octobre 2004
  Lien vers ce message 27 Décembre 2007, 19:12
Je suis à 100% contre les classes Templates inutiles comme le donnent Talus et Sekil du genre
<html>
...
<?php ... ?>
</html>

Comme fichier tpl.

Ce genre de truc est une horreur. Si c'est pour mettre du php dans le template HTML, ça ne sert à rien de faire une classe Template. l'interet étant justement de DISTINGUER le HTML du template et le PHP du code !
Car on peux avoir à réimplanter ces templates sur d'autres langages.

Imaginez que je vous demande de reprendre vos fichiers templates sur du PERL vous allez faire quoi ? Remodifier chacun de vos fichier pour mettre du perl au lieu du php ? Ou simplement faire en sorte (en PERL uniquement) d'accepter vos fichiers ?


Dieu vous aime. Offre soumise à conditions
Je suis une Brute
 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
  Lien vers ce message 27 Décembre 2007, 19:17
Ah c'est ça qu'ils voulaient dire ^^

C'est vrai que comme ça une class template n'a pas beaucoup d'intérêt :S


http://www.emmablack.net/site/img/sig/signature.png
 
Volcan
Avatar de Sékiltoyai
  • Age : 20 ans
  • Messages : 1002
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 19:47

Ce genre de truc est une horreur. Si c'est pour mettre du php dans le template HTML, ça ne sert à rien de faire une classe Template. l'interet étant justement de DISTINGUER le HTML du template et le PHP du code !

Si, cela sert à séparer les variables du code php et du code html, cela sert à permettre des fonctionnalités puissantes pour les templates, comme par exemple l'inclusion facile de sous-templates, et je ne suis pas d'accord que le code html doit se "distinguer" du code php, puisque de base, on comprend immédiatement un <?php echo $this->var; ?> alors qu'il n'y a aucune raison quel'on comprenne une syntaxe Smarty ou phpLib ou autre, donc perte de temps, et pour cette raison autant n'apprendre qu'un seul langage et non 150…


Imaginez que je vous demande de reprendre vos fichiers templates sur du PERL vous allez faire quoi ? Remodifier chacun de vos fichier pour mettre du perl au lieu du php ? Ou simplement faire en sorte (en PERL uniquement) d'accepter vos fichiers ?

Perl ne sert plus à faire des sites web, PHP est devenu avec Java et ASP (mais dans ce cas, à mon avis il faut de toute façon un codage et une organisation spécifiques) la seule solution serveur-side pour faire des sites web. Et quand bien même il faille le faire, alors on se fait un sed sur les fichiers ou bien alors un parseur…


http://www.phpfrance.com : Support francophone PHP et Web.
http://sekil.labrute.fr/
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1502
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 20:03
Korko > Ah, mais je n'ai jamais dit qu'il faut forcemment préferer ce genre de templates. Ce genre de templates est utile si t'as un bon truc de mise en cache derrière, etc. Mais dans le cas de EmmaBlack, il vaudrait mieux utiliser PHP.

Un moteur de TPL convient pour un gros truc difficile à maintenir, et qui permet de clarifier le code.... :p


 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
Message édité 1 fois, dernière édition par emmablack, 27 Décembre 2007, 20:08     Lien vers ce message 27 Décembre 2007, 20:05
Mais dans le cas de EmmaBlack, il vaudrait mieux utiliser PHP.


J'aime pas avoir le PHP et le HTML mélangé ^^
C'est pour ça que j'essaye de faire une class template ^^

Edit: j'ai mit à jour le fichier de la class


http://www.emmablack.net/site/img/sig/signature.png
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1502
  • Inscrit : 28 Septembre 2006
Message édité 1 fois, dernière édition par Talus, 27 Décembre 2007, 21:01     Lien vers ce message 27 Décembre 2007, 21:00
Euh pour le array_merge, t'as fumé, il te renvoi la fusion de deux arrays, et prends donc en compte au moins deux arrays :D

De même, avec tes preg_match, tu va pas capturer toutes tes variables, mais seulement la première... :p


 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
  Lien vers ce message 27 Décembre 2007, 21:04
Pour le array_merge, ça marche très bien :S
J'ai fait un print_r dessus et il m'affiche exactement la même chose qu'avec l'ancienne méthode que j'avais.

Et les preg_match me remplacent toutes mes variables ;)
PArce que j'ai la méthode parse() qui est rappelé plus bas.


http://www.emmablack.net/site/img/sig/signature.png
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1502
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 21:06
Ben revois la doc là dessus, ca ce que tu fais, ca sert à rien (utiliser array_merge sur un seul tableau... Fusionner un seul truc, ca t'arrive, toi ? :D)
Non, le preg_match ne capturera PAS toutes tes vars. Preg_match_all oui.


 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
  Lien vers ce message 27 Décembre 2007, 21:12
Le fait que j'ai mit += devant array_merge ne veut-il pas dire que je fusionne $this->data['varList'] et $name ?

Ah oui, il ne capture pas tout, moi j'avais comprit il ne remplace pas tout http://www.fire-soft-board.com/fsb/images/smileys/fsb2_oups.gif
En tout cas, toutes mes variables sont remplacées mais peut-être un coup de chance ^^
Je vais remplacer par une preg_match_all tout à l'heure :)

Mais avec les quelques modifications que j'ai apportés en suivant tes conseils, ma page s'affiche un peu plus vite, donc je pense bien faire en t'écoutant xD


http://www.emmablack.net/site/img/sig/signature.png
 
Volcan
Avatar de Talus
  • Age : 20 ans
  • Messages : 1502
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 27 Décembre 2007, 21:21
Boarf :)

Array merge prends en parametre des arrays à fusionner. Le "raccourci" += entre deux arrays (Synatxe : $ary1 += $ary2) est à proscrire, car désuete, et surtout peu lisible. Ici, il faudrait plutot faire ceci :
$ary1 = array_merge($ary1, $ary2);


Pour la preg_match_all, fait juste attention, car ca te rnevoit l'indice des capture en premiere dimension, puis en deuxieme dimension le numéro de l'itération...


 
Feu follet
Avatar de emmablack
  • Age : 18 ans
  • Messages : 199
  • Inscrit : 11 Mars 2006
  Lien vers ce message 27 Décembre 2007, 21:23
J'ai corrigé pour le array_merge().
Le preg_match_all je le ferais plus tard ;)

Merci à toi de ton aide :D


http://www.emmablack.net/site/img/sig/signature.png
 
Répondre


.