developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
#149 closed new feature (fixed)
plugin jtpl cycle
Reported by: | laurentj | Owned by: | dubphil |
---|---|---|---|
Priority: | lowest | Milestone: | Jelix 1.1 beta 1 |
Component: | jelix:tpl | Version: | 1.0 beta1 |
Severity: | trivial | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | no | |
Hosting Provider: | Php version: |
Description
avoir un plugin jtpl pour afficher des choses alternativement, dans une boucle
{cycle 'aa','bb','cc'}
{cycle $tableau}
Attachments (4)
Change History (25)
comment:1 Changed 14 years ago by laurentj
- Milestone changed from Jelix 1.0beta2 to Jelix 1.0beta3
comment:2 Changed 13 years ago by laurentj
- Milestone changed from Jelix 1.0beta3 to Jelix 1.0
comment:3 Changed 13 years ago by laurentj
- Milestone changed from Jelix 1.0 to Jelix 1.1
comment:4 Changed 13 years ago by nuks
- Owner set to nuks
comment:5 in reply to: ↑ description Changed 13 years ago by dubphil
- Owner changed from nuks to dubphil
- Status changed from new to assigned
Replying to laurentj:
avoir un plugin jtpl pour afficher des choses alternativement, dans une boucle
{cycle 'aa','bb','cc'}
{cycle $tableau}
Finalement il fonctionnera comme cela :
{cycle 'aa,bb,cc'} {cycle $tableau} avec $tableau = array('name'=>'myname','values=>'aa,bb,cc'[, 'reset'=>'[true/false]']);
comment:6 Changed 13 years ago by laurentj
- Documentation needed unset
- review set to review?
comment:7 Changed 13 years ago by laurentj
- review changed from review? to review-
Quelques petits problèmes dans le fichier :
- problèmes d'indentation sur certaines lignes
- non respect du "coding style" de jelix. Celui du plugin orignal dans smarty était le bon.
- jException n'accepte pas en paramètre un message, mais une clé de locale pour jLocale.
À part ça, je n'aime pas trop l'api. C'est plutôt compliqué à taper... Faudrait penser à un truc plus simple.
comment:8 Changed 13 years ago by laurentj
J'ai pensé à une solution, qui repose sur 3 plugins différents :
{cycle_init 'aa,bb,cc', 'nom'}
Créer un cycle. Premier argument : une chaîne avec des virgules pour séparer les valeurs, ou tout simplement un tableau php contenant les valeurs. Deuxième argument (facultatif), le nom du cycle.
{cycle 'nom'}
Affiche la valeur cyclique du cycle indiqué. Le nom du cycle étant facultatif. Ce serait bien aussi de pouvoir passer directement un tableau php contenant les valeurs, ce qui évite de faire un cycle_init pour les cycles non nommé.
{cycle_reset 'nom'}
Pour refaire une remise à zéro du cycle. nom facultatif.
Qu'en penses-tu ?
comment:9 Changed 13 years ago by bballizlife
La solution proposée par laurent me paraît simple à utiliser. Je vote pour.
comment:10 Changed 13 years ago by nuks
laurentj: Le mieux serait de garder une même structure pour tous les plugins. Pour le miens, tu m'avais proposé {counter_init 'name', 'type', 'start', 'incr'} {counter 'name'} {counter_reset 'name'} {counter_reset_all}
cf: http://dev.jelix.org/ticket/375 Donc en gros, le nom avant le cycle et l'ajoutd 'une fonction ycle_reset_all serait un plus ;)
comment:11 Changed 13 years ago by nuks
En fait j'avais aussi ajouter un boolean (parametre facultatif évidement) sur {counter 'name'} pour permettre de ne pas afficher le compteur mais de l'augmenter quand même =) Ca donnait ceci:
{counter 'name', bool}
comment:12 Changed 13 years ago by dubphil
mince j'avais pas vu ta dernière note avant d'uploader les fichiers je refais ça...
comment:13 Changed 13 years ago by dubphil
- review changed from review- to review?
voilà j'ai changé l'ordre des paramètres pour cycle_init.
comment:14 Changed 13 years ago by dubphil
pour l'instant l'option du cycle par default ne marche pas je regarde ça, j'ai corrigé une erreur dans cycle_init
comment:15 Changed 13 years ago by laurentj
- review changed from review? to review-
jtpl_function_common_cycle_init : pour juste tester une virgule, vaut mieux utiliser strpos (et tester la valeur de retour avec false) plutôt que preg_match, c'est plus rapide.
jtpl_function_common_cycle :
$cycle_array = $cycle_vars['values']; $retval = $cycle_array[$cycle_vars['index']]; if($cycle_vars['index'] >= count($cycle_array) -1){ $cycle_vars['index'] = 0; } else { $cycle_vars['index']++; }
Pour si peu, je ne suis pas sûr que passer par une variable cycle_array soit utile ici.
Par contre, pour
$tpl->_privateVars['cycle'][$cycle_name]['index'];
pour améliorer la lisibilité, ce serait pas mal de passer par un alias ($index = & $tpl->...).
Pour le reste, c'est ok :-)
comment:16 Changed 13 years ago by nuks
A ce propos laurentj, je me pose une question depuis longtemps. Un foreach avec une référence est-il plus rapide qu'un foreach sans référence ? Pourquoi utiliser un foreach sans référence si on ne touche pas à la variable consernée ?
Désolé pour le hs :)
comment:17 Changed 13 years ago by laurentj
sans réference est peut être plus rapide en effet, vu qu'il n'y a pas copie de la variable.
comment:18 Changed 13 years ago by dubphil
- review changed from review- to review?
voilà ça devrait être à peu près bon, j'ai aussi corrigé des problèmes de majuscules intempestives dans les messages d'erreur...
comment:19 Changed 13 years ago by laurentj
- Resolution set to fixed
- review changed from review? to review+
- Status changed from assigned to closed
function jtpl_function_common_cycle_init($tpl, $name='', $values='') { if($name == ''){ throw new jException("jelix~errors.tplplugin.block.bad.argument.number", array('cycle_init','1','')); return; } else {
Si le paramètre $name est obligatoire, pas besoin de lui donner une valeur par défaut ;-) De plus, après avoir générer une exception, inutile de faire un return (et de faire un else), l'exception arrêtant l'exécution de la fonction.
Il traîne aussi des problèmes d'espaces en fin de ligne, des problèmes d'indentation.
J'ai quand même intégré tes fichiers dans le trunk, et fait moi même les petites corrections. Merci pour le patch :-)
svn 842.
comment:20 Changed 12 years ago by laurentj
- Documentation needed set
comment:21 Changed 12 years ago by laurentj
- Documentation needed unset
Je m'en charge dès que j'ai fini les testes unitaires pour {counter} :)