Carnet Wiki

astuces Tableaux SPIP 3

Version 8 — Mai 2017 — 78.242.xx.xx

Les Balises de référence


-  #LISTE
-  #ARRAY
-  #GET
-  #SET

Alléger l’écriture en utilisant #LISTE
Utiliser <code>#LISTEarticle,rubrique,breve,syndic</code > (cf code>#LISTEarticle,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 vérifier 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 :

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
#GET{idart}, 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.


Les filtres dédiés

Les suffixes de balises : * et **

http://www.spip.net/fr_article4572.html
http://www.spip.net/fr_article4575.html