Version 2 — Avril 2008 — Cyril Marion
’L\’exemple ci-dessous consiste à pouvoir sélectionner des valeurs provenant d\’une liste de mots-clé SPIP, puis à passer ces valeurs à une boucle permettant d\’afficher des articles SPIP liés aux mots clé sélectionnés... Version de SPIP : 1.8.3
- construire un formulaire qui propose une liste de cases à cocher, dont les valeurs proviennent d\’une table SPIP
- récupérer la liste des valeurs chochées
- faire passer la liste des valeurs cochées à une boucle SPIP
Imaginons une liste de pays, stockée en tant que mots-clé SPIP. Ces mots clé \« pays » font tous partie d\’un groupe de mots clé appelé \« pays » et portant le id_groupe = 2.
Imaginons proposer un formulaire qui permette au visiteur de sélectionner des pays :
<form name=\"choix_pays\" action=\"\" method=\"post\">
<BOUCLE_choix_pays(MOTS){id_groupe = 2}{par titre}>
<input type=\"checkbox\" name=\"pays[]\" /><label for=\"pays[]\">([#TITRE|supprimer_numero)]</label></br />
</BOUCLE_choix_pays>
<input type=\"submit\" name=\"OK\" value=\"OK\" />
</form>
Qui donnerait un formulaire de ce type :
Alors là... ?
On peut récupérer les données provenant du formulaire dans un tableau de variables php appelé pays[]. Mais après qu\’est-ce qu\’on en fait ? On les met dans une variable de type texte et on la passe par l\’url en get, pour en disposer dans une variable #ENV ?
Voici ce que j\’ai commencé à faire en php ; je cherche à confectionner une variable TEXTE que je voudrais ensuite passer à la boucle SPIP :
<ul><?<code>
<h2>Voici la liste des pays cochés (calculés en PHP) :</h2>
<ul><?php
$mes_pays = \"\";
$tab = $_GET[\'pays\'];
foreach ($tab as $k => $v) {
// je construis la liste séparée par des virgules
if ($k !== \'spip_recursions\') {
$mes_pays .= (($mes_pays==\'\')?\'\':\',\').$v;
echo \"<li>$v</li>\";
}
}
echo(\"La liste = (\" . $mes_pays . $v ;
echo \"< li>$v</li >\";
}
} echo $ mes_pays ; ? \").\"; ?>
</ul>
Qui donnerait une liste comme ceci :
La liste = (1, 2, 7, 12)
Maintenant, j\’ai bien une variable php qui s\’appelle $mes_pays... Comment la passer à la boucle SPIP ?
On en est au stade austade où il faut afficher la liste des articles ayant les mots clé correspondant aux pays sélectionnés se trouvant dans la variable $_mes_pays... Le mieux serait de faire une boucle ARTICLES avec comme critère les mots-clé correspondant à la sélection :
<ul>
<BOUCLE_pays(ARTICLES){id_mot IN (1 1,2 , 2 , 7, 12)}>
<li><h2>#TITRE</h2>#TEXTE</li>
</BOUCLE_pays>
</ul>
Problèmes :
- je n\’ai pas su passer une variable #ENV dans l\’url si elle contient des virgules, car les virgules sont codées
- je n\’ai pas pu créer une variable #ENV qui contienne une liste
Avez-vous des idées pour les 2 derniers points ?
PS. un plugin permettant de faire des boucles sans tables, puis d\’utiliser les balises SPIP #ARRAY existe, à tester (mais pour des versions de SPIP > 1.9
’