Avec la nouvelle version de spip3 il est possible de boucler sur des tableaux [1].
Un bon exemple pour récuperer des tableaux multidimensionnels est la table spip_meta. Les plugins insèrent souvent des données sous forme de tableaux multidimensionnels sérialisés [2] pour sauvegarder leur configuration.
La boucle ci-dessous va récupérer le tableau php stocké en bdd.
Ce tableau va être affecté à la variable tabMetaAuteur, puis passé en "critère" de boucle.
On effectue une boucle sur les valeurs puis une boucle récursive [3] a l’intérieur de celle-ci qui va descendre dans toute la profondeur du tableau.
- [(#REM)<!-- Récupération d'un tableau en bdd-->]
- <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
- #SET{tabMetaAuteur,#VALEUR}
- </BOUCLE_recup_tableau>
- [(#REM)<!-- Boucle sur le tableau -->]
- <ul>
- <BOUCLE_data_tab(DATA){source table, #GET{tabMetaAuteur}}>
- <li>#CLEF
- <B_data>
- <ul>
- [(#REM)<!-- Boucle sur le tableau et toute sa profondeur -->]
- <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
- <li>\[#CLE\] => #VALEUR
- <BOUCLE_recursive_data(BOUCLE_data)>
- </BOUCLE_recursive_data>
- </li>
- </BOUCLE_data>
- </ul>
- </B_data>
- </li>
- </BOUCLE_data_tab>
- </ul>
Noter l’écriture raccourcie de la boucle de calcul :
- <BOUCLE_recursive_data(BOUCLE_data)/>
Il est possible d’éviter une boucle et d’arriver au même résultat avec le code ci-dessous.
- <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
- <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
- \[#CLE\] => #VALEUR
- <BOUCLE_recursive_data(BOUCLE_data)/>
- </BOUCLE_data>
- </BOUCLE_recup_tableau>
Une solution encore plus rapide et d’utiliser print_r($array) de php en guise de filtre :’).
[(#GET{tabMetaAuteur}|unserialize|print_r{1})]
À noter que le tableau doit être désérialisé contrairement au critère de boucle DATA qui accepte les 2 formats.