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

Utilisateur anonyme - 21 avril 2007 à 15:23
 Utilisateur anonyme - 22 avril 2008 à 16:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42384-flexible-template-language-ftl-template-parser-extensible-par-plugins

Utilisateur anonyme
22 avril 2008 à 16:38
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.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 avril 2008 à 18:03
Et où se trouve cette version ?
Manifestement, ce n'est pas celle qui est présente ici...
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
14 avril 2008 à 17:58
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.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
13 avril 2008 à 03:18
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.
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
23 oct. 2007 à 12:51
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.
Utilisateur anonyme
22 oct. 2007 à 23:12
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.
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
22 oct. 2007 à 20:31
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?
Utilisateur anonyme
5 juin 2007 à 19:46
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.
Freedom_09 Messages postés 3 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 19:15
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é ;)
JoJo738 Messages postés 1267 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 29 juin 2010 2
4 juin 2007 à 18:58
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)
Utilisateur anonyme
24 avril 2007 à 13:43
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
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
24 avril 2007 à 11:50
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?
Utilisateur anonyme
24 avril 2007 à 03:08
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...
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
23 avril 2007 à 21:29
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.
Freedom_09 Messages postés 3 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 4 juin 2007
23 avril 2007 à 21:20
ç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
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
23 avril 2007 à 20:54
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 :)
Utilisateur anonyme
23 avril 2007 à 19:44
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.
cs_fanfouer Messages postés 209 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 27 janvier 2008
23 avril 2007 à 14:09
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).
Utilisateur anonyme
22 avril 2007 à 22:53
ok, j'avais pas vu, ça a a l'air trè complet en plus. Merci
Utilisateur anonyme
22 avril 2007 à 13:11
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
Utilisateur anonyme
21 avril 2007 à 15:23
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.
Rejoignez-nous