-
    Techniques et conseils

Note: L'ensemble des "Tips of the Week" de l'éditeur OmniPilot sont régulièrement traduits chaque semaine. Vous les retrouvez ci-après

LISTE DES TUTORIAUX

Formatage de nombres et calculs FileMaker Pro sous Lasso

Passer facilement de FileMaker Pro CDML à Lasso Professional 8

Outil de Maintenance MySQL

Indicateur de progression - Progress bar

Uploads de fichiers sous Lasso Professional 8

Utilisation des arrays pour la création d'inlines dynamiques

Balises de gestion du Cache

Méthodes d'appel des balises

Encryption de données

Notions de Sessions

Gestion des erreurs

Pages d'erreur customisées

Variables globales

Optimisations de MySQL

Symboles d'assignation mathématiques

Expression régulières (Nettoyage du texte)

Expressions régulières (Rechercher/remplacer)

Expressions régulières (principes de base)

Optimisez votre code HTML en utilisant les balises [Loop] et [Iterate]

Utilisation des boucles (Loops)

Utilisation de la balise [Action_Params]

Techniques de commentaires


     
Blueworld, Windows Server 2003, Windows XP, RedHat, Linux, Mac OS X, MACOS, Apache, MySQL, FIlemaker Pro

Edité par OmniPilot Software, Lasso Professional fonctionne sous Windows 2000/2003/XP et Linux RedHat et Apache Server - Il s'intègre parfaitement à MySQL™ et FileMaker Pro™ ainsi que toutes autres bases de données
     




Déposez votre nom de domaine avec ELIDEE

Sujet: Utilisation des boucles (Loops)

Résumé:
Cet article discute des différences entre les balises conteneurs permettant d'exécuter des boucles sous Lasso, à savoir [Iterate], [Loop] et [While].

Détail:
Lasso dispose de différentes balises de boucles (loops) incluant [Loop] ... [/Loop], [While] ... [/While], et [Iterate] ... [/Iterate]. Connaître les capacités de chaque balise et l'utiliser dans le sens le plus approprié pour chaque situation peut rendre votre code plus facile à lire et le rendra plus rapide à exécuter.

Cet article contient une description de toutes les balises conteneurs de boucles que Lasso propose et fournit des conseils pour en tirer le meilleur parti.

La balise iterate qui un la plus méconnue des utilisateurs de Lasso sera abordée en premier.

Iterate

Les balises [Iterate] ... [/Iterate] sont utilisées pour effectuer un cycle à travers chaque élément d'un type de données multiple dans Lasso. Elles peuvent être utilisées pour parcourir chaque élément d'un array, dans un map ou bien encore chaque caractère d'une chaîne de caractère (string). Utiliser Iterate pour parcourir un type de données est rapide et efficient. A chaque fois que vous devez boucler autour d'un array, d'un map ou d'une chaîne de caractères [Iterate] ... [/Iterate] devrait toujours être votre premier choix.

Exemple

Un simple exemple va servir à illustrer combien il est simple d'utiliser iterate. Dans le code qui suit un array est paramétré avec trois valeurs: red (rouge), green (vert), blue (bleu). Nous souhaitons afficher le texte de chacune de ces couleurs. La balise iterate sera utilisée avec la variable exemple_array comme premier paramètre et une nouvelle variable temp_couleur comme second paramètre. La nouvelle variable temp_couleur est précisée pour chaque élément de exemple_array sur lequel nous allons "boucler".

[Var: 'exemple_array' = (Array: 'red', 'green', 'blue')]
[Iterate: $exemple_array, (var: 'temp_couleur')]
  <font color="[Var: 'temp_couleur']">[Var: 'temp_couleur']</font>
[/Iterate]

red green blue

Par comparaison, voici comment ce code serait écrit en utilisant les balises Loop. L'exemple avec iterate est beaucoup plus simple et ne requiert pas l'utilisation des balises [Array->Size] ou [Array->Get].

[Var: 'exemple_array' = (Array: 'red', 'green', 'blue')]
[Loop: $exemple_array->Size]
  [Var: 'temp_couleur' = $exemple_array->(Get:Loop_Count)]
  <font color="[Var: 'temp_couleur']">[Var: 'temp_couleur']</font>
[/Iterate]

Arrays

L'exemple ci-dessus vous montre comment iterate est utilisé couramment avec les arrays pour afficher chacune de ses valeurs. Iterate peut aussi être utilisé pour modifier les valeurs d'un array.

Cet exemple change chaque élément d'un array en majuscules. La variable temp_couleur est paramétrée avec chaque élément de l'array exemple_array. Cette variable n'es tpas une copie de la valeur contenue dans exemple_array, mais est une référence à cette valeur (une sorte d'alias de la valeur contenue dans l'array). Si nous paramétrons temp_couleur avec une nouvelle valeur, la valeur référencée dans l'array sera changée. Ainsi en réaffichant toutes les valeurs de l'array, nous pourrons les faire apparaître en majuscules.

<?LassoScript
  Var: 'exemple_array' = (Array: 'red', 'green', 'blue');
  Iterate: $exemple_array, (var: 'temp_couleur');
    $temp_couleur = (string_uppercase: $temp_couleur);
  /Iterate;
  Output: $exemple_array->(Join: ' ');
?>

RED GREEN BLUE

Notes

- Le second paramètre de [Iterate] devrait toujours être de la forme (Var: 'temp_name'). Ce paramètre ne devrait jamais être spécifié comme $temp_name à moins que vous ne souhaitiez créer une nouvelle variable qui doit être précisée dans valeurs de chaque élément de l'array en retour.

- Dans LP7 la balise [Loop_Count] retourne combien de fois la balise iterate a bouclé et la balise [Loop_Abort] peut être utilisée pour stopper le process d'iteration.

- Si le premier paramètre de la balise [Iterate] est un map, chaque élément de ce map sera passé en revue. Cela fonctionne identiquement à l'exemple ci-dessus à l'exception de la variable qui est paramétrée d'une paire clé/valeur (key/value) pour chaque élément du map.

- Si le premier paramètre de la balise [Iterate] est une chaîne de caractère, alors chaque caractère de la chaîne sera passé en revue jusqu'à la fin de la chaîne. Ceci permet des opération qui doivent être opérées sur chaque caractère d'une chaîne, un par un. Cependant, les chaînes de caractères ne sont que "lisibles" lorsqu'elles sont procédées ainsi (elles ne peuvent être re-écrites).

- Les balises [Iterate] ... [/Iterate] fonctionne actuellement avec n'importe quel type qui supporte les balises membres ->Size et ->Get. Elles peuvent être utilisées sur des paires ou l'affichage de plusieurs balises incluant [Action_Params], [XML->Children], et d'autres encore. Référez-vous à la documentation sur chaque type pour voir comment l'itération fonctionne en renvoyant des variables lisibles uniquement ou si ces variables peuvent également être modifiées.

- Les balises [Iterate] ... [/Iterate] peuvent être utilisées avec des custom tags (balises personnalisées) en précisant le second paramètre comme (Local:'temp_name') pour créer des variables locales temporaires.

Loop

Les balises [Loop] ... [/Loop] peuvent être utilisées pour répéter le même code plusieurs fois. Elles devraient être utilisées à chaque fois qu'un code doit être répété un nombre de fois fixé. Cependant, les balises loop acceptent les paramètres optionnels -To, -From et -By qui accroissent grandement leur utilité.

Exemple

Le plus simple exemple dans l'utilisation des balises [Loop] ... [/Loop] est de monter la répétition d'un morceau de page plusieurs fois. Un simple paramètre permet d'instruire à Lasso combien de fois boucler. La balise [Loop_Count] peut être utilisé pour afficher le nombre correspondant à la répétition courante.

Cet exemple boucle 5 fois, affichant à chaque fois le même message.

[Loop: 5]
  <br>Maintenant j'ai [Loop_Count]!
[/Loop]

Maintenant j'ai 1!
Maintenant j'ai 2!
Maintenant j'ai 3!
Maintenant j'ai 4!
Maintenant j'ai 5!

Paramètres

Les paramètres de la balise ouvrante [Loop] permet un grand nombre de variations sur l'utilisation des balises loop. Les balises loop réalise le travail classique de répétition d'une portion de page un certain nombre de fois, mais la balise [Loop_Count] retourne des valeurs différentes.

-From = spécifie la valeur de départ pour la boucle, par défaut 1. (-LoopFrom dans les versions précédentes de Lasso)

-To = spécifie la valeur de fin de la boucle. (-LoopTo dans les versions précédentes de Lasso).

-By = spécifie l'incrément à utiliser pour chaque boucle. (-LoopIncrement dans les versions précédentes de lasso).

Par exemple, en ajustant -To et -From et en affichant [Loop_Count] vous pouvez boucler sur n'importe quelle série de nombres.

[Loop: -From=1, -To=10][Loop_Count] [/Loop] -> 1 2 3 4 5 6 7 8 9 10

[Loop: -From=5, -To=10][Loop_Count] [/Loop] -> 5 6 7 8 9 10

[Loop: -From=-5, -To=5][Loop_Count] [/Loop] -> -5 -4 -3 -2 -1 0 1 2 3 4 5

En ajustant la valeur de -By, cela permet aux balises loop de boucler en sens inverse (à rebourd) d'une valeur de loop élevée à une valeur plus basse.

[Loop: -From=10, -To=5, -By=-1][Loop_Count] [/Loop] -> 10 9 8 7 6 5

Ou, -By peut aussi être utilisé pour compter par deux ou par trois.

[Loop: -From=1, -To=10, -By=2][Loop_Count] [/Loop] -> 1 3 5 7 9

[Loop: -From=1, -To=10, -By=3][Loop_Count] [/Loop] -> 1 4 7 10

Note: Notez que si vous précisez une valeur -From plus élevée que la valeur de -To mais ne paramétrez pas le -By à -1 les balises loop n'exécuterons aucune boucle. La valeur de -By n'est pas automatiquement ajustée mais doit être paramétrée manuellement si vous voulez boucler à rebourd.

[Loop: -From=10, -To=5][Loop_Count] [/Loop] -> Rien


While

Les balises [While] ... [/While] peuvent être utilisées pour continuer de boucler jusqu'à ce qu'une condition soit rencontrée. Cette balise peut être très utile dans certaines situations. La balise while est utilisée généralement lorsqu'un nombre incertain d'information doit être procédé comme par exemple avec les types [Net] et [XMLStream]. Les balises while peuvent aussi être utilisées une boucle infinie dans une balise asynchrone.

Exemple

Le type [XMLStream] accepte des données XML comme entrée et les traite ( parse) en balises ouvrantes, balises fermantes et valeurs "texte". La balise [XMLStream->Next] est utilisée pour avancer le premier stream XML plus loin. Cette balise renvoit true (vrai) si le stream peut être avancé et false (faux) si le dernier élément du stream a déjà été sélectionné. Dans l'exemples suivant la balise [While] est utilisée pour appeler de façon répétitive [XMLStream->Next] jusqu'à ce que la fin du stream soit atteinte.

[Variable: 'stream' = (XMLStream: $xml)]
[While: $stream->Next]
  [Output: 'Node Type: ' + $stream->Nodetype]<br>
  [Output: 'Tag Name: ' + $stream->Name]<br>
  ...
[/While]

Ce code fonctionne parce que nous sommes sûrs que la balise [XMLStream->Next] va retourner une valeur fausse lorsque le dernier élément du stream sera atteint.

Notes

- Il est vital que les boucles [While] ... [/While] soit garanties de finir. Si une boucle while ne finit jamais alors la page ne sera jamais servie au visiteur du site. Les codes incluant des boucles while doivent être débuggés soigneusement.

- Pour débugger un test peut être inséré sur une boucle while pour détecter si elle se répète plus de fois qu'escompté. Le code suivant va vérifier que le code ne s'exécute pas plus de 1000 fois et le cas échéant l'arrêtera et affichera un message de débuggage.

[While: $condition]
  ...
  [If: Loop_Count >= 1000]
    [Output: 'Erreur: Plus de 1000 Loops!']
    [Log_Critical: 'Erreur: Plus de 1000 Loops!']
    [Loop_Abort]
  [/If]
[/While]

- Dans les expressions composées et les balises asynchones une balise [While: True] peut être utilisée pour créer une boucle infinie qui s'exécutera infiniement.

Conclusion

Espérons que ce bref aperçu des trois balises conteneur de boucles vous aidera à les utiliser de la manière la plus efficiente possible. Des détails complémentaires sur ces balises peuvent être trouvés dans le manuel Lasso Language Guide ou en ligne sur LDML Reference.

Produits:    Lasso Professional, Lasso Studio for GoLive, Lasso Studio for Dreamweaver
Plateformes:    Mac OS X, Windows 2000, Windows XP, Windows 2003, Red Hat Linux
Versions:    5.x, 6.x, 7.x
Auteur:    Fletcher Sandbeck (Blue World)


     
Retour accueil
Lasso Studio
Lasso Professional
Communiqués Presse
Tutoriaux
Lasso & Filemaker
Evaluation gratuite
Hébergement Lasso/MySQL
Revendeurs
Historique logiciel
Tarifs - Commander
Nous contacter
     

Notre numéro de téléphone : +33 5 57 22 89 35

Hébergement mutualisé Lasso




Hébergement et location de baies de serveurs et Transit IP par ELIDEE


-  Accueil  -  Développer avec Lasso Studio  -  Déployer avec Lasso Professional  --
Administration du site webmaster@elidee.com | Copyright 2004-2010, Elidée SARL. Tous droits réservés
Toutes les marques citées sont déposées par leur propriétaire respectif