Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FLEXIBLE TEMPLATE LANGUAGE (FTL) – TEMPLATE PARSER EXTENSIBLE PAR PLUGINS


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : template, parser, plugin, cms, regex Niveau : Initié Date de création : 20/04/2007 Date de mise à jour : 05/06/2007 20:03:11 Vu / téléchargé: 4 394 / 270

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
ƒtl signifie Flexible Template Language.
le ƒtl est un langage de mise en forme permettant de contrôler et simplifier le code HTML.
Il permet par exemple l'utilisation de variables dans vos templates, la création de boucles, et bien d'autres fonctions disponibles en plugin.
Les fonctions natives du langage sont très peut nombreuses, afin que le langage reste très flexible.
Le but du projet était de créer un langage de mise en forme dont les balises et les fonctions soient totalement extensibles sans toucher au code du parser lui-même (via les plugins).
La class est donc plus un moteur de gestion de template qu'un template-parser à part entière.
Il est fait avant tout pour trouver les balises ƒtl, et les interpréter selon les plugins dont il dispose.
Les fonctions au coeur des algorithmes de parsing permettent de disposer d'une syntaxe proche du XML, avec gestion des codes imbriqués, des arguments avec quote, des caractères d'échappement, ...

Grâce à l'absence de toute regex, le parsing reste rapide même pour les codes les plus complexes.

La structure des plugins est standard, et fournis toutes les informations sur la balise correspondante, afin de permettre le développement simple et rapide de nouveaux plugins.
 

Source

  • Documentation en ligne: http://flexible.blackwizzard.com/
Documentation en ligne: http://flexible.blackwizzard.com/

Conclusion

Decompressez l'archive dans votre repertoire web.
Le repertoire /PLUGINS/ contient les plugins en demo.
Le repertoire /parser/ contient la class.
Les autres repertoires presentent des exemples concrets d'utilisation du FTL.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

21 avril 2007 00:23:33 :
Ajout du lien vers la documentation en ligne
05 juin 2007 20:03:11 :
Correction du bug "First Item Dropped" (fonction loop) Ajout d'un plugin

Commentaires et avis

signaler à un administrateur
Commentaire de JJDai le 21/04/2007 15:23:38

La présentation est séduisante, mais un peu de comentaire sur l'utilisation, et la onstitution des plugins eu été sympthique.
Je ne maitrise pas trop le PHP, et j'ai du passer quelques heures à décortiquer le code, malgré que cela semble assez abordable.
Je vais quand même tenter d'aller jusqu'au bout car ca semble correspondre à un beoin que j'avais.
Si j'ai bien compris il faut définir une balise qui commense par <!nom> et se termine par </nom>.
Je ne omprends pas pouurquoi utiliser le ! en dé&but et le / en fin, si c'est pour distinguer les balise d'un autre système, il faudrait le faire aussi sur la balise de fin, se me semble.
Par ailleurs je ne coprends pas bien comment est parser le template pour ajouter de nouvelle balise.

signaler à un administrateur
Commentaire de BlackWizzard le 22/04/2007 13:11:37 administrateur CS

Le lien vers la doc est indiqué (http://flexible.blackwizzard.com/)
Chaque balise, chaque fonction est décrite, avec des exemples.

Va voir en particulier la page dédiée à la syntaxe et à la description (sommaire, ce n'est pas un tutorial) du processus de parsing : http://flexible.blackwizzard.com/basics/syntax

signaler à un administrateur
Commentaire de JJDai le 22/04/2007 22:53:23

ok, j'avais pas vu, ça a a l'air trè complet en plus. Merci

signaler à un administrateur
Commentaire de fanfouer le 23/04/2007 14:09:31

Ca m'a l'air bien cool tout ca, il faudra que je le teste. Heureusement, il n'y a pas de cache ou tout ce genre de chose (j'ai horreur des systeme de temlate avec cache).

signaler à un administrateur
Commentaire de BlackWizzard le 23/04/2007 19:44:35 administrateur CS

oui, moi aussi je deteste ça. C'est pas assez flexible.
Je voulais creer un systeme simple et flexible, adaptable à tous les projets, extensible par plugins tres simplement.

signaler à un administrateur
Commentaire de fanfouer le 23/04/2007 20:54:43

C'est tout simplement génial!
Est-ce qu'il est prevu le support des conditions dans les templates? Peut-etre est-il déjà implémenté tu me dira, mais je n'ai pas vu comment je pouvais m'en servir.

Allé bravo, je te met 10 :)

signaler à un administrateur
Commentaire de Freedom_09 le 23/04/2007 21:20:50

ça a l'air très sympa.

Je n'ai pas encore regardé le code de près, mais la doc est plutot claire, l'utilisation semble à la fois aisée est puissante (getBaliseMap doit être un bonheur)

Bref bravo, je noterai dès que j'aurai testé, ce qui ne saurai tarder :D

signaler à un administrateur
Commentaire de fanfouer le 23/04/2007 21:29:51

J'ai trouvé le premier beug : Lorsque l'on utilise une boucle, le premier element envoyé au parser n'est jamais pris en compte. Exemple, j'ai l'array suivant que je veut afficher dans une <table/> : array("pomme", "banane", "orange"); Et bien quand j'aurai fait tout le bazar avec foreach et tout le PHP, seule "banane" et "orange" se retrouveront dans le HTML. Si on execute loop(); avec une array NULL de variable avant le foreach censé traiter l'array susmentionné (en guise d'init) et bien "pomme" apparait.

signaler à un administrateur
Commentaire de BlackWizzard le 24/04/2007 03:08:58 administrateur CS

Pour les if, c'est implementé en plugin (PLUGINS/dynamics/if.php)
Utilisation:
Pour executer un code dans le cas où la variable "hello" (definie via une balise define ou une fonction addVar) est superieur ou egale à 10:
{:if hello=10 operator=">="}
code...
{/if}

La syntaxe est pas terrible, je vais surement updater le plugin. En attendant, utilisez ça.

Pour l'utilisation des loops, la fonction supporte uniquement les array non indexés de type array("variable1"=>"valeur1","variable2"=>"valeur2","variableN"=>"valeurN")

C'est donc normal que le passage d'un array à une dimention donne des resultats imprevus...

signaler à un administrateur
Commentaire de fanfouer le 24/04/2007 11:50:25

Oui oui effectivement mon exemple était pas terrible. J'utilise un array associatif pour la boucle comme decrit dans la doc. mais le premier tour n'est jamais pris en compte.

Nikel pour les if, merci.

Peut-on etre averti par mail en cas d'update? Y a-t-il un changelog pour savoir ce qu'il faut modifier?

signaler à un administrateur
Commentaire de BlackWizzard le 24/04/2007 13:43:34 administrateur CS

La version 3.0b est la premiere version publique en ligne.
Pour les prochaines versions, je vais mettre en ligne une newsletter et un changelog evidement.
Mais la structure du langage ne changera pas, ce ne sera que des ajouts, pas de deprecations.

Je mettrai aussi une fonction de commentaire sur les pages de la doc, pour que les gens puissent commenter et preciser, à la maniere de php.net

signaler à un administrateur
Commentaire de JoJo738 le 04/06/2007 18:58:17

Hello,

J'ai été conquis par ton code, et je crois que je vais l'utiliser dans mes nouveaux scripts :D
Par contre, je trouve une erreur ( error_reporting(E_ALL) )

Notice: Undefined index: section in C:\wamp\www\P\themes\parser\class.codeparser.php on line 291

J'ai beau chercher, je ne trouve pas (Il n'y a pas de variable $section ..., ni $?['section'], ...)

Sinon, je pense que ce serait pas mal de faire du Php5, et rajouter quelques vérifications (file_exists)

signaler à un administrateur
Commentaire de Freedom_09 le 04/06/2007 19:15:31

Le problèe que tu croises est assez récurrent, les notice apparaissent sur des vérifications faites sur des variables dont on n'est pas assuré de l'excistence...

si tu veux t'en débarasser, il suffit, à la ligne indiquée, d'ajouter dans la condition un !isset() || adapté ;)

signaler à un administrateur
Commentaire de BlackWizzard le 05/06/2007 19:46:43 administrateur CS

J'ai codé ça pour répondre à une besoin personnel, et mis en open-source pour potentiellement aider les gens. Du coup, le php4 me suffit, et je ne compte pas passer à php5 tant que je n'en aurait pas besoin.
Mais si l'un de vous améliore le parser, ou passe en php5, ou même si vous programmez de nouveaux plugins, envoyez moi un message, et je publierai la nouvelle version.

signaler à un administrateur
Commentaire de fanfouer le 22/10/2007 20:31:00

Bonsoir,

J'ai mis a jour le script et j'ai quelques questions.
Premierement, comment met-on la valeur nulle dans un {:if}? Du genre, si une variable est nulle, on n'affiche pas ce qui est entre {:if} et {/if}.
J'ai bien essayé avec {:if myVar=NULL operator="!="} mais ca ne marche pas.

Ensuite, je pense qu'en voulant corriger un beug sur les boucles (firstItemDropped), tu en as provoqué un autre : J'écris ce code dans mon PHP:
<?
$index = 0;
foreach ($this->PropertyList as $id => $property){
$CSS = ($index % 2 == 0) ? 'standRow1' : 'standRow2';
$propertyLabel = ($property['label'] == NULL) ? $id : $property['label'];
$this->tpl_obj->loop("propertyList", array("tr_CSS"=>$CSS, "property_label"=>$propertyLabel, "property_value"=>$this->displayPropertyValue($id)));
$index++;
}
?>

et ce code dans mon .tpl :
{!loop name="propertyList"}
  <tr class="%tr_CSS%">
<td class="standCell">%property_label%</td>
<td class="standCell">%property_value%</td>
  </tr>
{/loop}
{!onEmptyLoop name="propertiesList"}
  <tr class="standRow1">
   <td colspan="2" style="color:#DD0000;" class="standCell">Pas de propriétés à afficher</td>
  </tr>
{/onEmptyLoop}

et ca me produit un effet pour le moin innatendu : seule la valeur de "property_value" apparait, sans tableau ni rien et si je l'enleve du loop(); dans l'espoir de voir une autre colonne, rien n'apparait (carrément :d ).

Comment expliques-tu cela?

signaler à un administrateur
Commentaire de BlackWizzard le 22/10/2007 23:12:58 administrateur CS

Sincerement, je n'en ai aucune idée!
Je n'ai aucun prob de ce type avec les boucles, et je n'ai pas touché à la fonction depuis cette correction.

Concernant les If, il faut modifier le plugin, pour definir une valeur null. Ce plugin est un peut à chier, la syntaxe de la balise est pas pratique.
Le mieux serait de le reecrire pour prendre une syntaxe genre {:if condition="myVar==NULL"}{/if} avec un parsing au niveau du plugin. C'est pas en projet pour le moment, mais je le ferai surement un jour quand j'aurai le temps.

signaler à un administrateur
Commentaire de fanfouer le 23/10/2007 12:51:57

Merci,

En fait je suis un boulet : quand j'éacris ca dans le loop(); "property_value"=>$this->displayPropertyValue($id), la méthode displayPropertyValue() contient un echo... donc c'est normal que ca fasse n'importe quoi. Aucun beug à signaler donc, désolé.

Pour le if, je peut essayer de m'en occuper, à voir.

signaler à un administrateur
Commentaire de neigedhiver le 13/04/2008 03:18:19

Salut,

Je me souvenais de cette source, mais je ne m'y étais pas intéressé à l'époque... Là, je m'y intéresse, alors voilà...

J'ai constaté un phénomène qui peut s'apparenter à un bug, sans que je sache si c'en est un ou pas...

Quand on boucle sur un tableau, systématiquement, le premier élément n'est pas affiché. Bon, je pourrais regarder dans le code pourquoi, mais ma question n'est pas comment faire pour que ce ne soit plus le cas (il suffit d'avoir un premier élément vide), mais : est-ce délibéré, ou bien est-ce un comportement non désiré ?

C'est tout concernant les bugs. Concernant des remarques de tout poil, maintenant...

Je regrette qu'une instance soit associée à un fichier. Je ne trouve pas ça très... (flexible ?) souple.
Certes, on peut avoir dans un même fichier plusieurs sections, et choisir celles que l'on va afficher ou non.
Mais dans ma logique, en POO, je sépare au maximum les tâches en autant de tâches les plus élémentaires possibles. Exemple : je veux afficher des commentaires sur un article, sur une news, sur un billet de blog, sur une photo, ou sur n'importe quoi...
J'ai un template pour mes commentaires, que j'utiliserai partout : news, blogs, photos... Il me suffit de l'inclure dans le template de chaque page (directement dans le template, ou d'assigner une variable contenant le template parsé).

Avec FTL, il faut créer un deuxième objet pour le template des commentaires, et l'assigner au premier dans une variable. Ca fait 2 objets.
Ca va si j'ai que 2 templates, mais si j'en ai un pour l'entête, un pour les CSS, un pour les JS, un pour la bannière, un pour le menu, un pour les informations de l'utilisateur, un pour la pub, un pour le pied de page, un autre pour le contenu, un autre pour des commentaires... Ca commence à faire lourd...
Alors qu'avec un seul objet qui se charge de parser des fichiers qu'on lui passe en argument des méthodes appropriées... On n'a qu'un seul objet, et le reste du traitement est le même. Et je trouve que c'est plus souple.
Je ne comprends pas pourquoi tu préfères éviter d'avoir une multitude de petits fichiers... Personnellement, je trouve que d'avoir plusieurs fichiers, spécialisés, ça permet d'avoir un site très modulaire au niveau des template, et d'éviter d'avoir du code redondant, ce qui facilite la maintenance. Avoir plusieurs fichiers, s'ils sont bien rangés, c'est vraiment pas un problème...

Sinon, j'apprécie énormément le site, très clair, très détaillé : les explications sont limpides, bien ordonnées... C'est quand même bien agréable d'avoir une doc comme ça (en français qui plus est lol) quand on utilise une nouvelle classe.

Et puis j'aime quand même beaucoup l'idée d'avoir des plugins pour tout, avec juste une base qui fait le minimum.

signaler à un administrateur
Commentaire de fanfouer le 14/04/2008 17:58:33

Bonsoir,

>J'ai constaté un phénomène qui peut s'apparenter à un bug, sans que je sache si c'en est un ou pas...
>Quand on boucle sur un tableau, systématiquement, le premier élément n'est pas affiché. Bon, je pourrais regarder dans le code pourquoi, mais ma question n'est pas >comment faire pour que ce ne soit plus le cas (il suffit d'avoir un premier élément vide), mais : est-ce délibéré, ou bien est-ce un comportement non désiré ?

Ce beug est connu et appelé "First item droped". Il est corrigé dans la dernière version.

Pour le reste, je laisse à Blackwizzard le plaisir de traiter tout ça xD.

Bonne après midi.

signaler à un administrateur
Commentaire de neigedhiver le 14/04/2008 18:03:12

Et où se trouve cette version ?
Manifestement, ce n'est pas celle qui est présente ici...

signaler à un administrateur
Commentaire de BlackWizzard le 22/04/2008 16:38:40 administrateur CS

La nouvelle version est sur le site dédié. j'ai du oublier d'uploader sur phpcs. dsl.
Pour les commentaires sur l'organisation, je suis d'accord, ce serait une bonne facon de faire. Mais j'ai codé cette class pour mes besoins perso a l'origine, et l'organisation actuelle s'adapte plus a mes besoins, etant donné que la class est intégrée dans un CMS perso.
A la limite, le code est plutot clair je pense, donc si tu vx essayer de re-organiser le fonctionnement et re-poster, ca me va.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Template :: Comment ça marche??? [ par Adagyo ] Salut @ tous,Je souhaiterais proposer au utilisateur plusieurs theme d'affichage de mes page web... Pour cela, j'ai essayé de décortiquer un peux vBul Expressions régulieres [ par Nini ] Trouvez l'expression régulière (Syntaxe basée sur le PHP) et entrez la ci-dessous (en suivant l'exemple).Cette regex doit extraire le texte et le cont parser un fichier doc en php [ par kayoo ] je n' arrive pas à parser un fichier de type word en php, le but est de réaliser un moteur de recherche sur le fichier .merci template.inc [ par joedalton ] bonjourVoila, je possede un fichier template.inc qui me permet de définir ma classe template, mais le probleme c'est que ce fichier est valable pour l Regex et caractères spéciaux [ par Totofweb ] BonjourJ'ai une variable, $texte. Dans celle-ci, je dois tester si elle contient [couleur=#123456] où 123465 est un nombre entier de 6 chiffres.J'ai e regex : validité d'une url absolue ou relative [ par Totofweb ] SalutJe fais mon module de bbcode, et je dois remplacer [lien=monurl.php] ou [lien=http://www.monurl.com/index.php?id=4] par &lt;a href="[l'url qui a Parser xml en php [ par tahbre ] Bonjour à tous, Je dois accéder à un fichier xml qui est sur un autre site ftp que le mien, et je veux réaliser un parser en php de façon à stocker l template aide [ par thedentiste ] Voila est ce que quelqu'un pourrais m'aider pour utlisation de template j'ai chope plein de tuto mais je trouve pas ce qu'il le faut je cherche a fair Template phplib [ par TuXAveRy ] Bonjour,Voila j'ai un problème de logique assez basic :/J'utilise smarty depuis quelque temps déjà et pour des raisons technique je souhaiterais passe parser xml [ par Nebraska ] bonjour,bon je débute salement en php; et j'ai besoin d'un parser xml. J'ai essayé ça mais bon ça marche pas :(Une bonne âme prèt a me dire ou je me s


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.