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

Closed 12 years ago

Last modified 11 years ago

#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)

function.cycle_init.php (1.6 KB) - added by dubphil 12 years ago.
initialisation du cycle
function.cycle.php (1.8 KB) - added by dubphil 12 years ago.
cycle
function.cycle_reset.php (1014 bytes) - added by dubphil 12 years ago.
reset du cycle
dubphil_cycle.diff (15.8 KB) - added by dubphil 12 years ago.
pour la localisation des messages d'erreur

Download all attachments as: .zip

Change History (25)

comment:1 Changed 13 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

Je m'en charge dès que j'ai fini les testes unitaires pour {counter} :)

comment:5 in reply to: ↑ description Changed 12 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 12 years ago by laurentj

  • Documentation needed unset
  • review set to review?

comment:7 Changed 12 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 12 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 12 years ago by bballizlife

La solution proposée par laurent me paraît simple à utiliser. Je vote pour.

comment:10 Changed 12 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 12 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 12 years ago by dubphil

mince j'avais pas vu ta dernière note avant d'uploader les fichiers je refais ça...

comment:13 Changed 12 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 12 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 12 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 12 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 12 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.

Changed 12 years ago by dubphil

initialisation du cycle

Changed 12 years ago by dubphil

cycle

Changed 12 years ago by dubphil

reset du cycle

Changed 12 years ago by dubphil

pour la localisation des messages d'erreur

comment:18 Changed 12 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 12 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
Note: See TracTickets for help on using tickets.