Twister Template Engine

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

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.