Twister Template Engine

Soyez le premier à donner votre avis sur cette source.

Vue 3 706 fois - Téléchargée 743 fois

Description

Bonjour à tous ca fait quelques années que je suis membre et enfin voila c'est fait.
Je poste ma première source.

Travaillant depuis un bon moment sur un framework maison. Voulant avoir un système
de template et ne voulant pas réinventé la roue, au début j'utilsais le moteur de
PHPBB puis Smarty, puis après quelques recherche sur le net j'en ai testé quelques
autres comme RainTPL, Twig ou encore le moteur de Jelix. Mais arf, il y avait toujours
un petit truc qui me manquait ou me génait. Mais les principaux problèmes venaient surtout
de la vitesse d'execution et de la consommation mémoire et/ou de la faciliter à ajouter
mes propres tags.

Du coup je me suis mis à coder mon moteur de template. Je vous présente donc
TWISTER, ultra léger, ultra rapide (je n'utilise par les regex et aucun code php est inséré)
et intégrant des fonctionnalités avancées comme dans smarty ou twig avec des "Modifier"
et des "Fonctions" personnalisables que l'on peux créer facilement.

Pour ce qui est de l'écriture des tags, c'est un mix entre PHPBB et Smarty donc
relativement facile à prendre en main.
Les variables ditent simples s'écrivent de la façon suivante :{$MA_VARIABLE}
nb:le prefix $ est un choix pour optimiser la vitesse de traitement
On peux ajouter à ces variables des "modifieurs" en les séparant avec le caractère |
Example : {$MA_VARIABLE|Upcase|nl2br}

Les modifieurs sous forme de plugin peuvent avoir des paramètres déclarés
entre ( et ) et séparés par des ;
Example : {$MA_VARIABLE|Upcase|Indent(-;4)}

On peut également utiliser des variables comme paramètres
Example : {$MA_VARIABLE|Upcase|Indent(-;$NB_INDENT)}
Voila liste des modifieurs disponible par défaut :
Capitalize, upcase, lowcase, nl2br, toHtml
et sous forme de plugin : Indent, sprintf, Formatnum, Replace, RegEx_Replace,
Wordwrap, Truncate, ...


TWISTER dispose de tags de type bloque :
DEFINE; INCLUDE, LOOP, IF..ELSEIF..ELSE, LITERAL ceux-ci s'écrivent des commentaires HTML.
Exemple : <!-- DEFINE Mavariable=foo --> ou encore
<!-- LOOP Maboucle --> ma boucle n°{$NB_MYLOOP} <!-- ENDLOOP Maboucle -->

J'ai fais ce choix surtout dans le but de ne pas obstruer l'affichage dans des editeurs html
de type wysiwyg. Pour ma part je commente mes codes HTML comme ceci : <!--# Mon commentaire -->

Et enfin TWISTER dispose de tags de type fonction qui sont à coder sous forme de plugin.
On peux bien entendu leur passer des parmètres séparés par des ;
Les paramètre s'écrivent sous la forme monparametre=mavaleur
Example : {#Cycle name=cycle1;values=#89cbc8,#8acca5}

Certain paramètres peuvent être ommis, cela dépendra de comment son coder les plugins,
et l'on peux également utiliser des variables comme dans les modifieurs
Example : {#Cycle name=$MONCYCLE;values=$COLORS}

Les plugins de type fonction disponible Counter, Cycle et Swf

Pour finir tous les tags, modifieurs, fonctions sont sensible à la casse de caractère
Exemple $Tuto, $TUTO, $tuto sont 3 variables différentes.

Pour ce qui est du code php il est également très simple :
// On initialise notre moteur de template
$tpl = new Core_TwisterTpl();
// On charge notre fichier template
$tpl->SetPath('templates/');
$tpl->LoadTemplate('test.tpl');
// On assigne les variables simples liées à notre template
$tpl->Assign('TITLE','Test de la class Core_TwisterTpl Standalone...');
// On assigne des variables liées à un block "LOOP" de notre template
$infos=array();
$infos[0] = array('TUTO_TITLE'=>'tuto1','TUTO_FORMAT'=>'pdf','TUTO_NBREAD'=>'5');
$infos[1] = array('TUTO_TITLE'=>'tuto2','TUTO_FORMAT'=>'doc','TUTO_NBREAD'=>'0');
$infos[2] = array('TUTO_TITLE'=>'tuto3','TUTO_FORMAT'=>'html','TUTO_NBREAD'=>'2');
$tpl->AssignLoop('LIST_TUTO',$infos);
// On effectue le rendu de notre template et on l'affiche
echo $tpl->Render();

Voila c'est un peu près tout. Et évidemment la vitesse et la consommation mémoire dépendront surtout de la taille,
de la complexité de vos fichiers templates. Et également de l'utilisation ou non des plugins.

Pour plus d'informations je vous laisse parcourir les différents fichier de cette petite classe.

J'attend avec impatience vos commentaires et suggestions.

Bon code à tous !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

remib74
Messages postés
15
Date d'inscription
dimanche 25 novembre 2012
Statut
Membre
Dernière intervention
20 octobre 2015
-
apres un test sous netbean il se peut que les fonctions swf_twister... et le modifieur regexreplace_twister_modifier_plugin.class contiennent des erreurs.
sympa la fonctions cycle il faudra que j'étudies ça quand je me mettrai a la poo... bon dimanche
cs_JDel
Messages postés
16
Date d'inscription
mardi 28 janvier 2003
Statut
Membre
Dernière intervention
1 septembre 2014
> remib74
Messages postés
15
Date d'inscription
dimanche 25 novembre 2012
Statut
Membre
Dernière intervention
20 octobre 2015
-
Merci je vais jeter un coup d'oeil sur le plugin swf . Juste en passant des que j'ai du temps je met la source a jour car celle-ci comporte quelques bugs notamment sur la gestion des IF et des LOOP que j'ai corrigé. Le nouveau code comporte également de nouvelles petites optimisiations et plugins. Je fais tout ca le plus rapidement possible. Enfin pour repondre à Dragonjoker tu peux aller voir sur http://www.atelier-alpha.ch :)
remib74
Messages postés
15
Date d'inscription
dimanche 25 novembre 2012
Statut
Membre
Dernière intervention
20 octobre 2015
-
je plussoies l'idée est bonne, je vais tester en local...
C'est une excellente idée, mais y a-t-il un endroit où on peut avoir un aperçu du rendu de ton framework ?
hx2508
Messages postés
3
Date d'inscription
vendredi 20 novembre 2009
Statut
Membre
Dernière intervention
14 mai 2014
-
Question simple : différent, ok, mais qu'apporte-t-il de plus, ou de mieux que ceux existants ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.