IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le moteur de templates TempLAX a besoin de testeurs

Le , par cahnory

4PARTAGES

0  0 
Bonjour à tous, j'ai développé un moteur de template et j'aurai besoin de testeurs afin de voir s'il réagit bien en toute situation.
La version présentée en test doit faire l'objet d'un rangement en vue d'une distribution donc si vous ne vous y retrouvez pas ne vous en faites pas ça sera corrigé. Toujours est-il que pour tester vous n'aurez pas besoin de mettre le nez dedans.

Dans sa version démo, TempLAX ne reconnait que les variables et les blocks mais la démo contient un pack d'extensions de base (empty, isset, date, number). D'autre options présentes dans la précédente version (numéro de ligne, nombre de ligne...) feront leur apparition une fois la phase de test terminée mais celle-ci resteront limitée, l'idée étant que le superflu soit contenu sous forme d'extension.

Pour tester TempLAX vous pouvez vous amusez avec le fichier demo.html (le template) en ajoutant variables, blocks et sous blocks ; et demo.php en remplissant ou non ces variables et blocks.

Pour ceux qui ont des connaissances (très légères en POO) il vous est possible de tester la création d'extensions.
Chaque extension se présente sous la forme d'une classe nommée "TempLAX_[extension name]" (sans crochet ni guillemet), celle-ci doit posséder une méthode public "parse" acceptant une string en paramètre et retournant une string.
Pour utiliser une extension utiliser la méthode extend([extension_name]) (sans crochet). Vous pouvez l'utilisez soit directement sur la classe auquel cas l'extensions sera chargé pour toute les instances de TempLAX, soit sur une instance de TempLAX.

J'attend beaucoup de vos remarques et vous remercie d'avance pour ce service que vous rendez à moi mais aussi et surtout à la communauté de développer web.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de ThomasR
Membre expert https://www.developpez.com
Le 28/04/2009 à 13:44
Bonjour Cahnory,

Ton système marche très bien, sympathique, mais peu performant lors d'une grande itération de blocks. N'étant pas un grand connaisseur de système de template je me contenterais de commenter le peu de code que j'ai regardé :

Je pense que la manière dont tu utilises preg_replace est optimisable, nottament parce que tu remplis ton template de code PHP puis tu évalues le template complet, la fonction preg_replace_callback permet directement d'effectuer un remplacement spécifique sur une occurence de ton expression régulière; Exemple :
Code : Sélectionner tout
1
2
3
4
5
6
$content = preg_replace('#<!--BLOCK ([[:alnum:]._\-]+) -->#',
    '<?php
        foreach($this->get_block(\'$1\',\'BLOCK\') as $i=>$block): 
    if($this->get_block_iteration($block, \'$1\', $i)):
   ?>', $content
remplaçable par :

Code : Sélectionner tout
1
2
$content = preg_replace_callback('#<!--BLOCK ([[:alnum:]._\-]+) -->#', array(get_class($this), 'block_open_replace'), $content);
Avec la fonction block_open_replace (voire replace qui ferait partie de l'interface ITempLAXExtension)

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
// class TempLAX
public function block_open_replace($matches){
    $replace_with = '';
    foreach($matches as $m){
        // do replace
    }
    return $replace_with;
}
Aussi, d'un point de vue POO, les extensions n'ont pas à hériter de TemplAx, c'est TempLAX qui devrait manipuler les extensions et non pas l'inverse. Pour finir, la nécessité d'implémentation de méthodes dans une classe doit se traduire par l'implémentation d'une interface.

J'éspère ne pas avoir fait mon gros lourd
0  0