La macro groupList permet l'ordonnancement d'une séquence en créant des groupes virtuels. En plaçant cette macro dans le contenu de groupList, il est possible, lors du parcours de la séquence ordonnée, de détecter lorsque l'élément courant est le premier élément d'un groupe, afin d'exécuter le contenu imbriqué de cette macro.
Cette macro peut être utilisée pour afficher des informations sur le groupe courant (son titre par exemple) avant d'afficher le contenu de l'élément courant.
Lors du parcours de la séquence ordonnée, le contenu imbriqué de cette macro ne d'exécutera qu'une fois par groupe : lorsque l'élément courant est le premier du groupe.
Par exemple
<#assign seqData = [{"name": "mary", "age": 18}, {"name": "Lucy", "age": 19}, {"name": "Mark", "age": 19}, {"name": "Charlie", "age": 17}, {"name": "Aaron", "age": 18}, {"name": "Tess", "age": 16}, {"name": "Isaac", "age": 16} ]/> <#assign orderingCriteria = {"name": "original_order_by_age", "colName": "age", "order":"o"} /> <@hardisAdv.groupList .data_model.seqData orderingCriteria; aPerson> <@hardisAdv.groupHeader "original_order_by_age"> Here is a new age group: </@hardisAdv.groupHeader> ${ aPerson.name} has ${ aPerson.age } </@hardisAdv.groupList>
a pour résultat :
Here is a new age group:
Mary has 18
Here is a new age group:
Lucy has 19
Mark has 19
Here is a new age group:
Charlie has 17
Here is a new age group:
Aaron has 18
Here is a new age group:
Tess has 16
Isaac has 16
De plus, il est possible d'accéder aux informations du groupe de l'élément courant, en passant à la macro une variable de boucle qui sera alimentée par celle-ci et pourra être utilisée dans son contenu imbriqué. Cette variable est un objet Hash qui regroupe les informations sur le groupe via les attributs suivants :
- label : titre du groupe,
- startRow : numéro de ligne dans la séquence ordonnée du premier élément du groupe,
- endRow : numéro de ligne dans la séquence ordonnée du dernier élément du groupe,
- namedGroup : nom du groupe nommé si le groupe de l'élément courant est un groupe nommé.
Par exemple
<#assign seqData = [{"name": "mary", "age": 18}, {"name": "Lucy", "age": 19}, {"name": "Mark", "age": 19}, {"name": "Charlie", "age": 17}, {"name": "Aaron", "age": 18}, {"name": "Tess", "age": 16}, {"name": "Isaac", "age": 16} ]/> <#assign orderingCriteria = {"name": "original_order_by_age", "colName": "age", "order":"o"} /> <@hardisAdv.groupList .data_model.seqData orderingCriteria; aPerson> <@hardisAdv.groupHeader "original_order_by_age"; infoGroupOriginalOrderByAge> Group of ${ infoGroupOriginalOrderByAge .label}: ${ infoGroupOriginalOrderByAge .endRow - infoGroupOriginalOrderByAge .startRow } people </@hardisAdv.groupHeader> ${ aPerson.name} has ${ aPerson.age } </@hardisAdv.groupList>
a pour résultat :
Group of 18: 1 people
Mary has 18
Group of 19: 2 people
Lucy has 19
Mark has 19
Group of 17: 1 people
Charlie has 17
Group of 18: 1 people
Aaron has 18
Group of 16: 2 people
Tess has 16
Isaac has 16
Directive vide : Non
Paramètres
String |
groupName |
Nom du groupe dont on veut détecter l'entrée lors du parcours |
Obligatoire |
Par exemple
<@hardisAdv.groupList .data_model.seqItems orderingCriteria; aItem> <@hardisAdv.groupHeader "orderGroup1"; infoGroup> Beginning of group ${ infoGroup.label } </@hardisAdv.groupHeader> … ${ aItem.fooAttribute} … <@hardisAdv.groupFooter "orderGroup1"; infoGroup> End of group ${ infoGroup.label } </@hardisAdv.groupFooter> </@hardisAdv.groupList>