OptionSplit en Typoscript - explications et exemples en français
De Typo3 CMS / Documentation Typo3 / Support Typo3.
Comme il est dit dans le Tsref, optionSplit est une fonction « délicate » ;-)
Sommaire |
Utilisation de |*| seul
Au départ le principe en est assez simple, les parties sont divisées en « first », « middle », « last ». Par exemple, imaginons un menu ou nous définirions des couleurs, comme ceci :
rouge |*| vert |*| bleu
C'est surtout le nombre de pages qui va déterminer le comportement de cette fonction :
Avec 6 pages, cela donnera ceci :
Page 1 : rouge Page 2 : vert Page 3 : vert Page 4 : vert Page 5 : vert Page 6 : bleu
Si l'on a que deux pages, comme la priorité est ainsi définie : last, first, middle, on obtient ce résultat :
Page 1 : rouge Page 2 : bleu
Et donc, avec une seule page :
Page 1 : bleu
Utilisation de || seul
Cette syntaxe est assez différente, elle fonctionne dans l'ordre donné (de gauche à droite) ; de plus on peut en utiliser autant qu'on veut, alors qu'avec la syntaxe |*| on sépare bien les items en 3 parties.
On prend les mêmes (presque) et on recommence : rouge || vert || bleu || orange || rose
Ici le résultat est différent, sur le cas des 6 pages ou plus on obtient ceci :
Page 1 : rouge Page 2 : vert Page 3 : bleu Page 4 : orange Page 5 : rose Page 6 : rose Page 7 : rose Page 8 : rose
La dernière valeur est reprise, il n'y a pas d'effet de boucle comme avec |*|
Avec 2 items, on obtient ceci :
Page 1 : rouge Page 2 : vert
et avec un seul item :
Page 1 : rouge
Utilisation avancée : les 4 règles d'OptionSplit
Jusque là, tout va bien, après ça se complique ; en effet en utilisant les 2 séparateurs ensemble ça devient assez rapidement un casse-tête.
La fonction optionSplit est pensée au départ pour être utilisée comme ceci :
- on divise d'abord les éléments en 3 parties : first, middle, last avec |*|
- dans chacune de ces 3 parties on définit des sous-parties avec ||
C'est ici qu'interviennent les notions de règles et de priorité.
Voici ce qui est dit dans TSRef :
- La priorité est : last, first, middle
- Si la partie « middle » est vide, la dernière sous-partie de « first » est répétée
- Si les parties « first » et « middle » sont vides, la première sous-partie de « last » est répétée
- La partie « middle » boucle à l'intérieur d'elle-même
La priorité est : last, first, middle
Ceci concerne le séparateur |*|, comme dans l'exemple donné ci-avant (Utilisation de |*| seul).
Si la partie « middle » est vide, la dernière sous-partie de « first » est répétée
Un exemple avec :
rouge || vert || bleu |*||*| rose
donne ceci :
Page 1: rouge Page 2: vert Page 3: bleu Page 4: bleu Page 5: bleu Page 6: bleu Page 7: bleu Page 8: bleu Page 9: bleu Page 10: rose
Attention : ici il ne faut pas mettre d'espace entre les séparateurs |*|.
Par exemple, si on utilise une propriété allWrap pour un menu item et qu'on met un espace entre les |*|, optionSplit considère que la saisie est équivalente à un séparateur vide, comme dans cet exemple :
1.NO.allWrap = <li class= c1>|</li> || <li class= c2>|</li> || <li class= c3>|</li> |*| |*| <li class= c4>|</li>
le code HTML généré sera celui-ci :
<li class= c1><a href="index.php?id=1">Page 1</a></li> <li class= c2><a href="index.php?id=2">Page 2</a></li> <li class= c3><a href="index.php?id=3">Page 3</a></li> <a href="index.php?id=4">Page 4</a> <a href="index.php?id=5">Page 5</a> <a href="index.php?id=6">Page 6</a> <a href="index.php?id=7">Page 7</a> <a href="index.php?id=8">Page 8</a> <a href="index.php?id=9">Page 9</a> <li class= c4><a href="index.php?id=10">Page 10</a></li>
alors qu'avec ce code (l'espace en moins)
1.NO.allWrap = <li class= c1>|</li> || <li class= c2>|</li> || <li class= c3>|</li> |*||*| <li class= c4>|</li>
le code généré est le suivant :
<li class= c1><a href="index.php?id=1">Page 1</a></li> <li class= c2><a href="index.php?id=2">Page 2</a></li> <li class= c3><a href="index.php?id=3">Page 3</a></li> <li class= c3><a href="index.php?id=4">Page 4</a></li> <li class= c3><a href="index.php?id=5">Page 5</a></li> <li class= c3><a href="index.php?id=6">Page 6</a></li> <li class= c3><a href="index.php?id=7">Page 7</a></li> <li class= c3><a href="index.php?id=8">Page 8</a></li> <li class= c3><a href="index.php?id=9">Page 9</a></li> <li class= c4><a href="index.php?id=10">Page 10</a></li>
Si les parties « first » et « middle » sont vides, la première sous-partie de « last » est répétée
Dans le TSRef il est dit : « If the first- or middle value is empty, the first part of the last-value is repeated before the last value » ; cela dit l'exemple proposé l'est bien avec les 2 parties vides.
Cet exemple simple :
|*||*| orange|| bleu
donne ceci :
Page 1: orange Page 2: orange Page 3: orange Page 4: orange Page 5: orange Page 6: bleu
Avec 2 pages, le résultat est normal (priorité = last) :
Page 1: orange Page 2: bleu
Cette méthode est très pratique, notamment pour les menus de type Ariane, le dernier lien du menu utilisé étant la plupart du temps la page courante est différencié des autres.
Attention : ici, comme dans la règle précédente il ne faut pas mettre d'espace entre les séparateurs |*|
La partie « middle » boucle à l'intérieur d'elle-même
C'est la plus simple :
en utilisant || à l'intérieur de la partie « middle », comme ceci :
rouge |*| vert || bleu || orange |*| rose
on obtient ce résultat (exemple avec 10 pages) :
Page 1 : rouge Page 2 : vert Page 3 : bleu Page 4 : orange Page 5 : vert Page 6 : bleu Page 7 : orange Page 8 : vert Page 9 : bleu Page 10 : rose
Cas d'utilisation simple
Menu « ariane »
Dans ce type de menu, on ajoute un séparateur entre les liens, on veut juste que le dernier ne l'affiche pas pour obtenir ce résultat :
Accueil > Produits > Frigos
et non celui-ci :
Accueil > Produits > Frigos >
Ce premier exemple est très simple, pour ce menu on utilise la fonction optionSplit sur la propriété « wrap » de l'item de menu, comme ceci :
lib.menuAriane.1.NO.allWrap= | > |*| | > |*| |
Résultat : le premier lien affiche le séparateur, tous les liens suivants affichent le même séparateur que le premier lien, seul le dernier ne l'affiche pas.
On peut encore simplifier celui-ci, comme ceci :
lib.menuAriane.1.NO.allWrap = |*||*| | > || |
Ceci utilise la règle :
« Si les parties « first » et « middle » sont vides, la première sous-partie de « last » est répétée »
