developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 9 years ago

#545 closed enhancement (fixed)

Templates virtuel

Reported by: Lipki Owned by: doubleface
Priority: normal Milestone: Jelix 1.4
Component: jelix:tpl Version: trunk
Severity: normal Keywords:
Cc: mr.thiriot@… Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Alors voila l'idée : Pour utiliser jTpl on est obliger de créer des fichiers physique. (.tpl)

Dans la "norme" jTpl, la plupart des éléments sont fait pour créer des squelettes, mais de plus en plus sont créer des plugins orienté contenu.

Je pense évidement eu plugin image, swf, mais également aux modificateurs, à jUrl, et dans une certaine mesure les boucles le plugin cycle et j'en oublie.

C'est dommage de ne pas pouvoir profiter de tout cela sur du contenu dynamique. Comme par exemple récupérer d'une base de données.

En tous cas j'ai trouvé ça dommage :)

Donc je propose ...

Attachments (7)

jTpl.classe.diff (1.2 KB) - added by Lipki 12 years ago.
init.diff (3.2 KB) - added by Lipki 12 years ago.
jTplCompiler.class.diff (1.6 KB) - added by Lipki 12 years ago.
dynTpl.class.php (339 bytes) - added by Lipki 12 years ago.
template_virtuel.diff (5.7 KB) - added by Lipki 12 years ago.
virtualtemplate.patch (10.5 KB) - added by doubleface 11 years ago.
patch de doubleface
virtualtpl.patch (7.1 KB) - added by doubleface 10 years ago.
virtualtpl for the trunk

Download all attachments as: .zip

Change History (23)

comment:1 Changed 12 years ago by Lipki

  • une function jTpl::dynFetch(...)
  • Qui fait appel à jTpl::fetch(... $dyn=true)
  • jTpl::fetch(... $dyn=true) instancie jVTplSelector(...)

Changed 12 years ago by Lipki

comment:2 Changed 12 years ago by Lipki

  • jVTplSelector(...)
    • fichier source dans le dossier classes 'xxx/dynTpl.class.php'
    • nouveau compiler jVTplCompiler(...)

Changed 12 years ago by Lipki

comment:3 Changed 12 years ago by Lipki

  • jVTplCompiler(...) extends jTplCompiler(...)
    • instancie dynTpl()
    • vérifie l'existence de dynTpl::{$selector->resource}()
    • et récupère le contenu a compiler

Changed 12 years ago by Lipki

comment:4 Changed 12 years ago by Lipki

La dernière touche, c'est la classe qui renvoie le contenu en fonction de la ressource demandée.

Changed 12 years ago by Lipki

comment:5 Changed 12 years ago by Lipki

  • Owner set to Lipki
  • Status changed from new to assigned

Bon c'est fait assez rapidement, et je ne connais pas du tous cette partie du code de jelix, donc je suis sur d'avoir fait des bourdes énorme. D'ailleurs en l'état jurl ne fonctionne pas dans les tpl virtuel.

Enfin, je veut avoir votre avis, est-ce une piste fiable ou pas ?

comment:6 Changed 12 years ago by mike

Cette piste me semble interessante. Cela résoudrait le problème que je soulevais sur le forum: http://jelix.org/forums/read.php?5,2491

Je pense qu'il faut creuser l'idée.

comment:7 Changed 12 years ago by Lipki

Bon voila la bonne version du patch, j'espère que je me suis pas planté.

Changed 12 years ago by Lipki

comment:8 Changed 12 years ago by Lipki

  • review set to review?

comment:9 Changed 12 years ago by laurentj

  • Component changed from jelix to jelix:tpl
  • review changed from review? to review-
  • je préfère une méthode fetchFromString plutôt qu'un enième argument à fetch
  • je n'aime pas cette histoire de classe dynTpl.class.php. D'une part déjà parce que si on utilise plusieurs template "virtuels" de plusieurs modules dans une même action, cela va provoquer des erreurs "classe déjà définie" au chargement des classes (il faudrait laisser le nom libre, et imposer l'implémentation d'une interface spécifique), et d'autre part, je trouve que c'est plutôt limitant, puisqu'il faut absolument fournir une classe.
  • il manque des blocs de commentaires en tête des nouvelles classes et méthodes

Ton patch sur jIncluder n'est pas suffisant. En effet, il faut faire plus de modifications que celles que tu as fait. Par exemple, le cache n'est jamais mis à jour, puisque ton fichier source est cette classe dyn, et donc sa date de modification ne correspond absolument à la date de modification du contenu du template.

Je pense qu'il faut y travailler encore, voir si on ne peut pas faire un truc plus général au niveau des selecteurs. Ou encore se passer de selecteur et jIncluder. Je ne sais pas trop encore, je vais y reflechir.

comment:10 Changed 11 years ago by doubleface

  • Cc mr.thiriot@… added
  • review changed from review- to review?

Voilà une tentative de contribution à ce ticket. J'ai fait une méthode fetchFromString en me passant des sélecteurs et de jIncluder. J'ai du aussi faire une petite factorisation dans jTplCompiler (compileWithoutSelector : un meilleur nom serait le bienvenu...).

Ca fonctionne avec jTpl et jTpl standelone et il y a des tests unitaire pour chacuns. Par contre j'ai du integrer mon patch pour le ticket #1025 pour que les tests unitaires tournent.

Changed 11 years ago by doubleface

patch de doubleface

comment:11 Changed 11 years ago by doubleface

My patch is for jelix 1.1

comment:12 Changed 10 years ago by doubleface

  • Version changed from 1.0.3 to trunk

Here is my patch adapted for the trunk

Changed 10 years ago by doubleface

virtualtpl for the trunk

comment:13 Changed 10 years ago by doubleface

  • Owner changed from Lipki to doubleface
  • Status changed from assigned to new

comment:14 Changed 9 years ago by laurentj

  • review review? deleted
  • Status changed from new to reviewing

comment:15 Changed 9 years ago by laurentj

  • Milestone set to Jelix 1.4

pull request : https://github.com/jelix/jelix/pull/15

Application du patch de doubleface, et ajout de quelques corrections :

  • un même fichier était utilisé pour la compilation de tout les templates virtuels : risque fort probable de collision. Maintenant, chaque tpl virtuel a son propre cache. et si le contenu ne change pas : pas de compilation à faire.
  • meilleure prise en compte des userModifiers + userFunctions + trusted + outputtype
  • j'ai trouvé un meilleur nom pour la nouvelle méthode dans le compilateur :)

comment:16 Changed 9 years ago by laurentj

  • Resolution set to fixed
  • Status changed from reviewing to closed

review ok par foxmask

Note: See TracTickets for help on using tickets.