Bonjour,
Pour répondre à un besoin d'ordonnancement de présentation d'une liste d'articles, j'ai essayé une boucle du genre :
<BOUCLE_articles(ARTICLES MOTS){id_article IN ...}}{par FIELD(id_article,...)}>
...
</BOUCLE_articles>
J'ai constaté que "FIELD(id_article,...)" était bien pris en considération (reproduit tel que dans la clause ORDER BY de la requête), et ça répondait donc à mon besoin.
Du moins en codant "en dur" la liste "..." dans "FIELD(id_article,...)".
La réalité du besoin, c'est que cette liste est calculée en dynamique au préalable.
Et là, problème...
J'ai essayé plusieurs choses :
{par FIELD(id_article,#EVAL{ma_fonction_qui_renvoie_la_liste()})}
--> arrête l'interprétation (erreur "Critère inconnu : par FIELD(id_article,")
{par FIELD(#EVAL{ma_fonction_qui_renvoie_la_liste_avec_id_article_avant()})}
--> c'est la requête qui n'est pas alimentée : "ORDER BY FIELD", sans plus
{par #EVAL{ma_fonction_qui_renvoie_carrément_FIELD(id_article_et_la_liste)()}}
--> la requête est alimentée, mais en supprimant parenthèses et virgules : "ORDER BY FIELDid_article123456..."
J'ai aussi essayé d'utiliser plutôt #SET{var,#EVAL{...}} en amont, suivi de {par #GET{var}}, dans les mêmes combinaisons --> mêmes résultats
(nota : #EVAL{...} tout seul affiche bien le contenu attendu, issu de la fonction)
Enfin j'ai même essayé #EVAL{ma_fonction()}, avec ma_fonction qui génère carrément toute la boucle --> c'est encore pire, puisque la boucle est simplement considérée comme texte.
(j'en déduis que les #EVAL sont juste interprétés "au passage", alors qu'on aurait pu espérer qu'ils le soient dans un premier balayage du script, suivi d'un second pour interprétation des boucles...)
Au passage, j'ai du mal à comprendre pourquoi l'interprétation est aussi disparate, d'un genre de codage à l'autre.
Mais surtout, quel moyen y a-t-il de contourner cette difficulté ?
Merci d'avance
