Version 15 — il y a 1 mois — JLuc
Les Balises de référence
- #LISTE
- #ARRAY
- #GET
- #SET
Critère de boucle : tester si un tableau n’est pas vide
Rq : empty
est une structure de contrôle PHP et non une fonction, et ne peut donc être utilisée comme filtre.
On peut tester directement avec |oui
:
<BOUCLE_pasvide(CONDITION){si #GET{sel_articles}|oui}> ...
ou bien avec une boucle DATA :
<B_A>
Avant, si contenus
<BOUCLE_A(DATA){source tableau, #GET{sel_articles}}>
- #CLE :: #VALEUR<br />
</BOUCLE_A>
Après, si contenus
</B_A>
Si tableau vide
<//B_A>
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 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 !
+---+---+------------------+
Accéder aux informations de ce tableau avec le slash (à partir de SPIP3) :
[(#GET{tab/1/1})] affichera «titre article 2»
[(#GET{tab/2/0})] affichera «3»
Avant SPIP3 il faut passer par 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.
- http://www.spip.net/fr_article4572.html
- http://www.spip.net/fr_article4575.html
Dans un squelette SPIP, on peut accéder à une valeur d’un tableau par sa clé avec la syntaxe {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
:
function __request($nom, $c=false) {
$x = explode('/', $nom);
$n = array_shift($x);
$val = _request($n, $c);
return count($x) ? table_valeur($val, implode('/', $x)) : $val;
}
<h3>Tables contenant 'mot'<h3>
<ul><BOUCLE_objets(POUR){tableau #REM|lister_tables_objets_sql}{cle==mot}>
<li>Nom MYSQL=#CLE / Descriptif : [(#VALEUR{texte_objets}|_T)] / Nom résumé : #VALEUR{table_objet}</li>
</BOUCLE_objets>
</ul>