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 9 years ago

Last modified 8 years ago

#1319 confirmed enhancement

La possibilité d'avoir des sous-dossiers dans les sélécteurs

Reported by: nesswaw Owned by: laurentj
Priority: low Milestone:
Component: jelix:core Version: 1.2.1
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Bonjour,

Je remarque que l'ont peut pas avoir de sous-dossiers dans les sélecteurs, notamment dans le dossier des templates, il arrive que l'ont ai beaucoup de templates pour un module, les classer dans des dossiers serait pas un luxe :)

on aurait alors une syntaxe du type:

$tpl->fetch('monModule~dossier/monTpl'); $tpl->fetch('dossier/monTpl');

Ce sélecteur pointerait sur: app/monModule/templates/dossier/monTpl.tpl

Attachments (1)

patch.txt (694 bytes) - added by flav 8 years ago.

Download all attachments as: .zip

Change History (9)

comment:1 Changed 9 years ago by foxmask

à terme ca posera des problemes de perf que d'avoir un nouveau dossier à parcourir à partir duquel il faudra en plus vérifier si on n'a pas des templates localisés avec des sous dossiers par langue dans ces sous dossiers là. Peut-etre que le plus simple dans ton cas, serait une nomenclature claire pour identifier facilement un ensemble de template pour le même usage genre

pour les templates "d'action" :

  • voiture_(edit|view).tpl

pour les templates de zone :

  • zone.garage.tpl

Comme cela du premier coup d'oeil on identifie les templates par "famille" d'utilisation

non ? etc...

comment:2 Changed 9 years ago by nesswaw

C'est ce que je fais pour le moment je nomme mes templates par action:

default_index.tpl contact_index.tpl

Pour revenir au sujet, si on a des templates localisés, le système fonctionnerait comme maintenant:

Si on à un sélecteur "app~bar/foo" ou bar/foo et si on veut que notre template est localisé on aura ce chemin: app/templates/fr/bar/foo.tpl

Si le template n'est pas localisé, pour le même sélecteur on aura: app/templates/bar/foo.tpl

Je vois pas pourquoi il y aurait un problème de performance...

comment:3 Changed 9 years ago by nesswaw

En ayant regardé un peu le code de Jelix, pour mettre en place ce système il suffit juste de modifier une ligne dans le fichier jelix/core/selector/jSelectorModule.class.php dans la fonction construct(), il faut autoriser le caractère "/" dans le preg_match et tout fonctionne, même avec les templates localisé....

Maintenant il faut juste que cette proposition soit accepté pour faire des test en profondeur.

Ainsi ave cette modification, l'utilisateur est libre d'organiser son dossier de templates, dao, forms comme il le veut :)

comment:4 Changed 9 years ago by laurentj

  • Component changed from jelix to jelix:core
  • Owner set to laurentj
  • Priority changed from normal to low
  • Type changed from new feature to enhancement

Il est temps pour toi de proposer un patch, avec tests unitaires etc..

comment:5 Changed 9 years ago by laurentj

à noter qu'il y a aussi l'extension C à adapter (je m'en occuperai si besoin, mais pas tout de suite)...

comment:6 Changed 9 years ago by nesswaw

Oula alors je n'ai jamais fait de patch, ni utiliser un gestionnaire de version, je vais quand même essayer d'en faire un :)

comment:7 Changed 9 years ago by laurentj

  • Status changed from new to confirmed

comment:8 Changed 8 years ago by flav

Une piste pour le patch :

Dans /lib/jelix/core/selector/jSelectorModule.class.php ligne 37, remplacer :

if((preg_match("/^(([a-zA-Z0-9_\.]+)~)?([a-zA-Z0-9_\.]+)$/", $sel, $m))){

Par :

if((preg_match("/^(([a-zA-Z0-9_\.]+)~)?([a-zA-Z0-9_\.\/]+)$/", $sel, $m)) AND (!preg_match("(/\.)",$sel))){

On ajoute une condition pour interdire que le selecteur puisse contenir la chaine '/.', ce qui sinon authoriserait non seulement de pointer vers un fichier de façon relative (ex : '/../../file.tpl'), mais aussi de nommer de plusieurs façons un même sélecteur ('module~dossier1/././dossier2/template' = 'module~dossier1/dossier2/template'). Or remettre en cause l'unicité du nommage des sélecteur reviendrait à trahir le principe des sélecteurs.

Cette solution conserve le principe d'unicité du nommage des sélecteurs tout en permettant d'organiser les templates d'un modules d'une manière apréciable. (Par exemple, on peut regrouper les templates de chaque zones dans un sous dossier. Ou ajouter un dossier inc/ ect.)

J'ai cependant un doute sur l'expression régulière modifiée (c'est pas mon fort...). Je ne sait pas si l'anti-slash avant le point fait encore sens, puisque le point n'est plus en dernière position. Il semblerait que si, l'antislash n'étant toujours pas permis, j'en déduits qu'il doit échapper le point...

Changed 8 years ago by flav

Note: See TracTickets for help on using tickets.