Carnet Wiki

astuces Tableaux SPIP 3

Version 2 — Mai 2013 YannX

Les références :

#LISTE
#ARRAY
#GET
#SET

Alléger l’écriture en utilisant #LISTE

Utiliser #LISTE{article,rubrique,breve,syndic}(cf. #LISTE
au lieu de :
#ARRAY{0,'article',1,'rubrique',2,'breve',3,'syndic'}

Remplir un tableau dynamiquement

D’après la page : http://www.spip.net/fr_article4009.html et http://www.spip.net/fr_article4571.html
il y a « remplir un tableau dynamiquement » qui t’aidera particulièrement :

#SET{mon_tableau, #GET{mon_tableau}|push{#COMPTEUR_BOUCLE}}

Ce qui pourrait donner probablement :

#SET{idart, #ARRAY} 
<BOUCLE_art(ARTICLES){id_rubrique=2}>
    #SET{idart, #GET{idart}|push{#ID_ARTICLE}}
</BOUCLE_art> 

Pour verifier le résultat créé correctement avec |push, on peut obtenir la liste de cette façon :
[(#GET{idart}|implode{','})]

le paramètre de #VAL étant le séparateur entre chaque identifiant

Remplir un tableau de tableaux avec une boucle

On peut vouloir utiliser les résultats retournés par une BOUCLE en-dehors de cette BOUCLE (dans un tout autre endroit du squelette). L’exemple ci-dessous permet de disposer d’un tableau (array en php) dont on pourra extraire les informations souhaitées.

Déclarer le tableau et le remplir avec une boucle :

#SET{tab, #ARRAY}
<BOUCLE_u(ARTICLES) {tout}>
   [(#SET{tab, #GET{tab}|push{#LISTE{#ID_ARTICLE, #TITRE}}})]
</BOUCLE_u>
   

À ce stade, nous avons un tableau peuplé ainsi :

+---+---+------------------+
! 0 ! 0 ! 1                !
!   ! 1 ! titre article 1  !
+---+---+------------------+
! 1 ! 0 ! 2                !
!   ! 1 ! titre article 2  !
+---+---+------------------+
! 2 ! 0 ! 3                !
!   ! 1 ! titre article 4  !
+---+---+------------------+

Utiliser les informations de ce tableau (avec le filtre |table_valeur ) :

[(#GET{tab}|table_valeur{1/1})]  affichera «titre article 2»
[(#GET{tab}|table_valeur{2/0})]  affichera «3»

In tableau dans un critère IN

Avec l’opérateur IN dans un critère, SPIP attend soit une expression
« x,y,z » soit *un tableau* ! (cf. :
http://www.spip.net/fr_article4010.html )

Donc il ne faut pas lui transmettre un #GET qui contiendrait une liste (surtout en chaine de caractères).!
Il faut lui transmettre un tableau (#ARRAY)

Dans ton cas, tu n’as donc pas besoin de faire l’implode de
#GETidart, tu peux utiliser le tableau tel quel dans le critère avec
IN.

Si tu es obligé de manipuler une liste stockée dans une variable alors
il faudra « l’exploder » pour que cette liste soit transformée en
tableau et utilisée par le IN :

<BOUCLE_gis(ARTICLES){gis}{id_article IN #GET{variablephp}|explode{','}}>
voire
<BOUCLE_gis(ARTICLES){gis}[{id_article IN (#GET{variablephp})}]>

NB :
-  implode : transforme un tableau (#ARRAY) en liste (séparée par ce que tu lui donnes en argument).
-  explode fait l’inverse : transforme une
liste (séparée par ce que tu donne en argument) en tableau.