ayant besoin dans des squelettes (de l'espace privé et
de l'espace public) de passer faire des boucles du
style:
<BOUCLE_liste_mots(MOTS){id_groupe IN (#GET{toto})}>
avec toto tiré d'un #SET qui récupère une valeur à
partir de $GLOBALS['toto']
et
<BOUCLE_plugs(SYNDIC_ARTICLES){tags LIKE
'%>#ENV{titi}<%'}>
avec #ENV{titi} récupéré depuis un paramètre GET
je bute sur l'impossibilité d'utiliser des critères #TRUC dans le LIKE ou le IN (ça doit être idem avec
ORDER BY et tous les cas où on utilise un critère de
boucle qui "injecte" directement du SQL ?)
Une première soluce pour le LIKE (puisque #ENV{titi}
n'a que 4 valeurs possible) était de passer par un
INCLURE qui appelle un fichier parmi 4 différents,
chacun ayant la boucle avec le critère du LIKE "en
dur" => peu satisfaisant mais ça fonctionne.
En revanche pour le IN, il n'est pas possible
d'utiliser ce contournement puisque la valeur à passer
n'est pas "prévisible"...
J'ai donc trouvé le contournement suivant:
dans le fichier options du plugin en question, je fais
créer "à la volée" un fichier de squelette dans /tmp
qui contient les boucles avec les paramètres en dur
récupérés depuis $GLOBALS ou _request()
Ca fonctionne très bien tant dans le public
(?page=fichier_genere) que dans le privé avec
recuperer_fond('../'._NOM_TEMPORAIRES_INACCESSIBLES.'/fichier_genere',
$contexte); ) mais j'ai quand même l'impression que
cette bidouille ne doit pas être au top du point de
vue du compilo...
ayant besoin dans des squelettes (de l'espace privé et
de l'espace public) de passer faire des boucles du
style:
<BOUCLE_liste_mots(MOTS){id_groupe IN (#GET{toto})}> avec toto tiré d'un #SET qui récupère une valeur à
partir de $GLOBALS['toto']
et
<BOUCLE_plugs(SYNDIC_ARTICLES){tags LIKE
'%>#ENV{titi}<%'}>
avec #ENV{titi} récupéré depuis un paramètre GET
je bute sur l'impossibilité d'utiliser des critères #TRUC dans le LIKE ou le IN (ça doit être idem avec
ORDER BY et tous les cas où on utilise un critère de
boucle qui "injecte" directement du SQL ?)
Une première soluce pour le LIKE (puisque #ENV{titi}
n'a que 4 valeurs possible) était de passer par un
INCLURE qui appelle un fichier parmi 4 différents,
chacun ayant la boucle avec le critère du LIKE "en
dur" => peu satisfaisant mais ça fonctionne.
En revanche pour le IN, il n'est pas possible
d'utiliser ce contournement puisque la valeur à passer
n'est pas "prévisible"...
J'ai donc trouvé le contournement suivant:
dans le fichier options du plugin en question, je fais
créer "à la volée" un fichier de squelette dans /tmp
qui contient les boucles avec les paramètres en dur
récupérés depuis $GLOBALS ou _request()
Ca fonctionne très bien tant dans le public
(?page=fichier_genere) que dans le privé avec
recuperer_fond('../'._NOM_TEMPORAIRES_INACCESSIBLES.'/fichier_genere',
$contexte); ) mais j'ai quand même l'impression que
cette bidouille ne doit pas être au top du point de
vue du compilo...
=> y'aurait il moyen de faire autrement / mieux ?
merci de vos lumières !
D'après la doc : #ENV** pour un IN :
Bon, www.spip.net/@ ne répond pas, désolé, pas de lien.
oui, effectivement #ENV** fonctionne pour le critère
IN. Malheureusement, dans la boucle en question c'est
un #GET ou un #CONFIG qu'il faut que je récupère pour
le IN... et eux ne fonctionnent pas.
Dans le même ordre d'idée, #ENV** ne fonctionne pas un
critère LIKE
J'utilises une boucle comme :
<BOUCLE_readings(READINGS){lang IN
(#ENV{lang}|makearray)}>
avec, dans mes_options.php :
function makearray($liste) {
return explode(',', $liste);
}
cela permet de donner au critère IN une liste
d'arguments qui proviennent de
l'URL dans un format qu'il peut digérer.
S'agit-il de cela ?
oui, exactement ça...
et du coup avec ta soluce pour les IN qui fonctionne
(suffit de savoir que le IN attend un array comme
paramètre), j'ai retrifouillé avec LIKE pour finir
avec:
<BOUCLE_truc(SYNDIC_ARTICLES){tags LIKE #CONFIG{pref_plug/param}|makelike}>
et dans le options.php :
function makelike($ch) {
return '%'.$ch.'%';
}
Donc ça résoud bien le problème initial: on peut
passer des paramètres #ENV, #CONFIG ou #GET dans les
critères IN et LIKE
Merci pour le coup de main qui permet d'éliminer la
mauvaise bidouille de génération "à la volée" du squelette.