THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour à toutes et tous,

J'ai pris mon courage à deux main, et écrit un nouveau parseur pour Thelia.
Ma motivation initiale était de pallier aux limitations d'imbrication des boucles conditionnelles, et d'avoir un contrôle plus précis de la syntaxe.
Je me suis aperçu par la suite que j'obtenais des gains de performance en utilisant ce nouveau parser.

En resumé:

1) Ce parser est en principe totalement compatible avec l'existant Thelia, et ne demande aucune modification de code, a part le fichier fonctions/moteur.php.

2) Il permet d'imbriquer les boucles simples et conditionnelles sur autant de niveaux qu'on veut.

3) Il permet de placer plusieurs boucles (simples ou conditionnelles) dans une boucle conditionnelle

4) Il contrôle formellement la syntaxe des templates, et donne des messages plus précis (enfin, j'espère) que le parseur original.

5) Il offre un (modeste) gain en performances par rapport au parseur Thelia, surtout sur les volumes de données importants.

6) Il offre une nouvelle boucle TEST.

7) Il offre une nouvelle boucle REPETER.

8) Il permet de manipuler des variables, avec #SET, #GET, #ENV (à la Spip).

9) Vous pouvez commenter vos templates (et donc du code Thelia) avec <REM>...</REM>.

Et d'autre choses encore, détaillées dans le README.txt du plugin.

Toujours Compatible Thelia 1.4.2 et 1.4.3 !

Ce nouveau parseur est actuellement en place sur plusieurs sites, dont celui-ci: http://www.vins-et-terroirs-de-france.fr/index.php

Si vous souhaitez essayer ce parseur, la dernière version (1.0 RC11) est disponible ici.

Il s'installe sous forme de plugin, et peut être activé et désactivé d'un simple clic.

Vos commentaires et retours de bugs seront précieux pour permettre l'amélioration de ce bout de code.

Franck.

Last edited by roadster31 (04-03-2011 16:38:44)


OpenStudio Toulouse

  • yoan
  • Cofondateur Thelia

Offline


Salut,

Il faut qu'on regarde tout ça mais c'est une très belle initiative


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


Bonjour Roadster31,

Avant tout merci pour ce nouveau parseur.

Maintenant 1 premier retour Thelia 1.4
message d'erreur:

Warning: Call-time pass-by-reference has been deprecated in D:\PIERRE\PERSO\SITES\WAMP\www\theliabeta\fonctions\parser_ex.php on line 181

Warning: Call-time pass-by-reference has been deprecated in D:\PIERRE\PERSO\SITES\WAMP\www\theliabeta\fonctions\parser_ex.php on line 223

Warning: Call-time pass-by-reference has been deprecated in D:\PIERRE\PERSO\SITES\WAMP\www\theliabeta\fonctions\parser_ex.php on line 283

Warning: Call-time pass-by-reference has been deprecated in D:\PIERRE\PERSO\SITES\WAMP\www\theliabeta\fonctions\parser_ex.php on line 550

Pour m'enlever un doute ton fichier moteur.php REMPLACE celui existant
et le parseur_ex.php est RAJOUTE en plus en conservant le parseur EXISTANT, j'ai bien compris?

Merci.

Reg


le-bouquiniste.com                                                      tongue  plugin 1.4.x / 1.5   => valeurstock / Mailpaiement / formcontact

Offline


Ha oui, tiens. J'ai uploadé une nouvelle version qui n'affiche plus ces warnings.

Pour m'enlever un doute ton fichier moteur.php REMPLACE celui existant
et le parseur_ex.php est RAJOUTE en plus en conservant le parseur EXISTANT, j'ai bien compris?

C'est exactement ça.

Last edited by roadster31 (09-10-2009 08:51:23)


OpenStudio Toulouse

Offline


Nouvelle version du parseur, qui ajoute nativement un nouveau type de boucle, la boucle TEST:

<TEST_nom_boucle variable="<var_ou_val>" test="<type test>" valeur="<var_ou_val>">
   A afficher si condition verifiee
</TEST_xxxx>
   A afficher si condition non verifiee
<//TEST_nom_boucle>

nom_boucle est le nom de la boucle TEST

type_test peut prendre les valeurs: vide, egal, different, superieur, superieurouegal, inferieur, inferieurouegal

var_ou_val est une variable (#xxxx), ou une valeur
   
Note: l'argument 'valeur' est ignoré par le test 'vide'.


OpenStudio Toulouse

  • manu
  • faï tot petar miladiu

Offline


t'as fait ca pour ne pas utiliser de filtre?


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Ca va plus loin que le filtre, dans la mesure ou ça marche (à tous les coups) sur plusieurs lignes, et que tu peux placer dedans ce que tu veux (boucles, texte, boucles conditionnelles, et même des parenthèses ou des pipe (|) )

Par ailleurs, ça améliore les performances. En effet, le filtre est appliqué après évaluation de l'intégralité du code, alors que dans le cas de cette boucle TEST, seul le code correspondant au résultat du test est évalué.

Last edited by roadster31 (14-10-2009 09:07:04)


OpenStudio Toulouse

Offline


Bonjour,

Je suis en train de travailler avec ce nouveau parser.

J'ai cette erreur :

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in D:\Mes documents\Sites-locaux\bienvenue\fonctions\parser_ex.php on line 380

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in D:\Mes documents\Sites-locaux\bienvenue\fonctions\parser_ex.php on line 384

Merci, Alfouine


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Salut Alfouine,

J'ai l'impression que cela ressemble a l'erreur que j'avais eu post#3...

Reg


le-bouquiniste.com                                                      tongue  plugin 1.4.x / 1.5   => valeurstock / Mailpaiement / formcontact

Offline


Salut reg,

Bin ouais, mais pas au même endroit, c'est sur la boucle Test.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Une version corrigée est en place.

Notez qu'il ne s'agit que de "Warnings", qui provoquent l'affichage d'un message sur le navigateur, mais n'empêchent pas le bon fonctionnement du script.

Je vais essayer d'oublier mes vieilles habitudes de développeur PHP ;-)


OpenStudio Toulouse

  • manu
  • faï tot petar miladiu

Offline


heu tu dois confondre avec les notices.

Si il y a un warning c'est qu'il y a un endroit ou ca marche  pas


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Pas tout à fait. Un warning signale une erreur non fatale.

En l'occurence, il s'agissait ici de l'usage d'une fonctionnalité dépréciée (deprecated) mais toujours supportée, concernant le passage d'arguments de fonctions par référence.

Last edited by roadster31 (26-10-2009 11:34:50)


OpenStudio Toulouse

Offline


salut roadster du 31,

Merci, le problème est corrigé.

Bravo pour la boucle Test qui devrait bien améliorer mes problèmes de temps de réponse.

J'ai modifié une partie du code :
        $this->tokenize($filecontents, " \t\n<>#\"|[]&.");

Car la liste des caractères de fin de variable n'est pas assez complète, il faudrait que seul les caractères alpha et en majuscules soit compris dans le nom de variable et exclure tous le reste. Je l'aurai bien codé, mais je ne sais pas faire.

En tous cas, Merci

Alfouine


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Existe-il un lien ou l'on peut, à coup sûre, récupérer la dernière version de ce nouveau parser ? et est-il compatible avec la dernière version de thelia (1.4.2.1) ?
Je serai ravis de mon côté de testé ce parser, car je trouve qu'en effet, c'est une superbe initiative, cela démontre bien que thelia est un produit hautement customisable.

Low

Offline


Tu auras toujours la dernière version ici.

Pour ce qui est de la 1.4.2.1, il n'y a aucune raison que ce parser ne fonctionne pas.

Vos retours d'expérience sont les bienvenus, ils permettront d'identifier et de corriger les bugs qui rôdent sournoisement dans les méandres du code.

Alfouine wrote:

il faudrait que seul les caractères alpha et en majuscules soit compris dans le nom de variable et exclure tous le reste

Ca paraît logique. J'imagine que les caractères à prendre en compte son A-Z,a-z,0-9, et _ D'autres en vue ?

Last edited by roadster31 (21-01-2010 12:27:41)


OpenStudio Toulouse

Offline


Bonjour,

Je pense seulement A-Z et _.

Je prends un exemple, j'utilisais des caractéristiques pour des valeurs en pixels.
Le code était #VALEURpx, donc il faut exclure également les minuscules.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Alfouine,

J'ai fait quelques tests, et il semble que mon parser interprète correctement du code comme #VALEURpx.

Peux tu me donner le code qui ne fonctionne pas chez toi ?


OpenStudio Toulouse

Offline


J'utilise exactement cela :

            <THELIA_RUB_PRODUIT_FILS2 type="PRODUIT" rubrique="#RUBRIQUE_ID" profondeur="1" caracteristique="#CARACTERISTIQUE_ID" caracdisp="#CARACTERISTIQUE_DISP">
            	<a href="/#REWRITEURL" title="#TITRE"><img style="top:#TVApx;left:#POIDSpx;" alt="#TITRE" src="/images/design/0.png" /></a>
            </THELIA_RUB_PRODUIT_FILS2>

Le #POIDS passe mais pas le #TVA.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Alfouine,

Merci beaucoup pour tes retours.

Je pense avoir corrigé le problème, et les variables devraient être évaluées correctement, même dans des cas un peu tordus.

Une méthode différente pour l'isolation des variables m'a permis de réduite le nombre de tokens, et donc d'augmenter (un peu) les performances.

Le lien de téléchargement de la nouvelle version est dans le 1er post.

Last edited by roadster31 (03-11-2009 15:25:56)


OpenStudio Toulouse

Offline


Merci ça marche.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Il y a des erreurs avec les prix

Sur le parseur original ca fonctionne par contre sur celui-ci #PRIX2 ou #PRIX2ORIG etc.. sont pas parser, il substitue #PRIX au lieu de #PRIX2

exemple : #PRIX = 50.00
le rendu de #PRIX2 = 50.002 (le 2 étant celui de #PRIX2)

correction provisoire changer la variable #PRIX2 par #PROPRIX par exemple

Last edited by asturyan (04-11-2009 17:03:12)

Offline


pas de problème, ça marche ... a suivre ?
au passage , compliment.


A force de copier on fini par singer

Offline


Damned ! Je regarde et je te tiens au jus.


OpenStudio Toulouse

Offline


asturyan wrote:

exemple : #PRIX = 50.00
le rendu de #PRIX2 = 50.002 (le 2 étant celui de #PRIX2)

C'est corrigé.

Merci encore à tous ceux qui prennent la peine de signaler les problèmes.


OpenStudio Toulouse