Committo,Ergo:sum a écrit :
Le 18 janv. 07 à 16:14, Fil a écrit :

-je ne peux pas automatiser le IN .. {id_article IN #ENV{array}}
mais si, il y a un filtre qui fait ça (le seul truc c'est que j'ai oublié
comment il s'appelle ... help).

??? J'ai  peut-etre pas compris la question mais ici:
http://www.spip.net/fr_article900.html
il est dit:

Avec SPIP 1.9, les balises sont admises dans les arguments de IN, et notamment la balise ENV, à laquelle sont appliqués les filtres d’analyse pour assurer que la requête SQL sera bien écrite. De manière dérogatoire, SPIP testera si l’argument de ENV désigne un tableau (venant par exemple de saisies de formulaire dont l’attribut name se termine par []). Si c’est le cas, et si les filtres d’analyse ont été désactivés en suffixant cette balise par une double étoile, alors chaque élément du tableau sera considéré comme argument de IN, SPIP appliquant les filtres de sécurité sur chacun d’eux.
J'ajouterai que, de memoire, pour passer la valeur dans un inclure, il faut la désécuriser :
<INCLURE{fond=toto}{xxx=#ENV**{montableau}}>

de memoire toujours, ca coincait en 1.9.1 (le passage à l'inclure, meme avec ** ) mais je crois qu'en 1.9.2 c'est bon.

Autre solution : passer par un fichier d'inclusion specifique qui prepare une regexp. C'est mieux qu'un IN si c'est pour gerer un filtre (pas de filtre=> on veut tout voir)

Voici ce que je faisais en 1.8.3 pour faire une selection multiple par mots clés (avec des checkbox => name="mots[]" value="#ID_MOT"):

$contexte_inclus['mots']='.*';
if (is_array($_REQUEST['mots']))
   $contexte_inclus['mots']=implode('|',$_REQUEST['mots']);
$contexte_inclus['mots_strict']='0';
if (is_array($_REQUEST['mots']))
   $contexte_inclus['mots_strict']=implode('|',$_REQUEST['mots']);

et dans la boucle :
{id_mot==^((#ENV{mots}))$}

ou, si tu ne veux rien afficher quand rien n'est selectionné :
{id_mot==^((#ENV{mots_strict}))$}

mes 2 sous.

@++

Répondre à