Carnet Wiki

astuces Tableaux SPIP 3

Version 4 — May 2014 — erf consult

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 :

+---+---+------------------+
!  !  ! 1                !
!   ! 1 ! titre article 1  !
+---+---+------------------+
! 1 !  ! 2                !
!   ! 1 ! titre article 2  !
+---+---+------------------+
! 2 !  ! 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»

Un 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
<
code>#GETidart</code >,
#
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.