Carnet Wiki

astuces Tableaux SPIP 3

Version 9 — Juin 2017 — 78.242.xx.xx

Les Balises de référence

-  #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 :

  1. #SET{idart, #ARRAY}
  2. <BOUCLE_art(ARTICLES){id_rubrique=2}>
  3.     #SET{idart, #GET{idart}|push{#ID_ARTICLE}}
  4. </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 :

  1. #SET{tab, #ARRAY}
  2. <BOUCLE_u(ARTICLES) {tout}>
  3.    [(#SET{tab, #GET{tab}|push{#LISTE{#ID_ARTICLE, #TITRE}}})]
  4. </BOUCLE_u>
  5.    

À 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  !
+---+---+------------------+

Accéder aux informations de ce tableau avec le slash (à partir de SPIP3) :

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

Avant SPIP3 il faut passer par Utiliser les informations de ce tableau ( avec le filtre < < code>|table_valeur</code>  :
>
) :

  1. [(#GET{tab}|table_valeur{1/1})]  affichera «titre article 2»
  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&lt;/code {<code>explode&lt;/code >}} 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}  **}}


[|table_valeur ->http://www.spip.net/fr_article4572.html]
[|find ->http://www.spip.net/fr_article4575.html]


----


{{{Syntaxe simplifiée avec slash}}}


Dans un squelette SPIP, on peut accéder à une valeur d'un tableau par sa clé avec la syntaxe <code class='spip'>{tableau/cle}

. Plus besoin de table_valeur

Exemple : #CONFIG{dimensions/hauteur} #GET{mon_tableau/cle1}

En php, la fonction _request ne fait pas ce traitement. On peut néanmoins bénéficier de ce décodage en définissant une autre fonction __request à ajouter dans mes_options :

  1. function  __request($nom, $c=false) {
  2.   $x = explode('/', $nom);
  3.   $n = array_shift($x);
  4.   $val = _request($n, $c);
  5.   return count($x) ? table_valeur($val, implode('/', $x)) : $val;
  6. }

Télécharger