Finalement voici ce que j’ai fait :
- dans \manager\includes\tmplvars.commands.inc.php, ajout d’un categorie ’SELECT_IN_EVAL’ dans $BINDINGS :
$BINDINGS = array('FILE','CHUNK','DOCUMENT','SELECT_IN_EVAL','SELECT','EVAL','INHERIT','DIRECTORY');
- dans \manager\includes\tmplvars.commands.inc.php, ajout d’un case "SELECT_IN_EVAL" avant le case "SELECT" :
case "SELECT_IN_EVAL": // - Permet de faire comme un @SELECT, mais en obtenant la requete depuis un eval
// - Généralement on mettra dans le Default Value du TV une instruction du type :
// @SELECT_IN_EVAL return $modx->runSnippet('SNIPPET_QUI_RETOURNE_UN_SELECT');
// - Ce case "SELECT_IN_EVAL" permet par exemple d'executer une requete SELECT dont la
// clause WHERE est constituée dynamiquement a l'execution, en tenant compte, par exemple,
// de $_GET dans le SNIPPET_QUI_RETOURNE_UN_SELECT
// - Ce case "SELECT_IN_EVAL" doit obligatoirement précéder le case "SELECT", et il ne doit
// pas contenir de break a la fin, afin qu'il passe la main au case "SELECT" apres son execution
$param = eval($param);
$param = substr($param,6);
// break;
- ensuite je crée une page.php dans laquelle je place un template variable [*tvLISTE*]
- ce tvLISTE a comme parametres significatifs :
Default Value: @SELECT_IN_EVAL return $modx->runSnippet(’snpTEST’);
Widget: Datagrid
Column Names: Champ 1, Champ 2
Field Names: CHAMP1, CHAMP2
- et enfin je crée un snippet snpTEST dont le code est :
<?php
return 'SELECT CHAMP1, CHAMP2 FROM TABLE WHERE CHAMP3='.$_GET['CHAMP3'];
?>
- ainsi, si j’affiche l’url
http://modxsite/page.php?CHAMP3=’toto’, je recupere un datagrid avec une unique ligne correpondant à la requete SELECT CHAMP1, CHAMP2 FROM TABLE WHERE CHAMP3=’toto’
voila, c’est du bricolage, mais j’espere que ca me suffira en attendant que la v1 de MODx permette le meme resultat, mais plus proprement ;-)
anthony
NB1 : bien sur, dans mon exemple, il est possible de modifier snpTEST pour qu’il genere une requete SELECT :
- sans clause WHERE, lorsque $_GET[’CHAMP3’] est vide,
- ou avec une clause WHERE de la forme LIKE, lorsque $_GET[’CHAMP3’] contient des caracteres %,
- etc .....
NB2 : pour que mon exemple fonctionne (utilisation de $_GET), il faut activer les friendly urls, de facon à obtenir des pages modx dont l’url est du style
http://modxsite/xx.php,
et non pas
http://modxsite/index.php?id=yy, comme par défaut
NB3 : pour info, pour activer les friendly urls, je me suis servi des 2 pages d’explications suivantes :
conf de MODx :
http://wiki.modxcms.com/index.php/Friendly_Url%27s_Guide
conf de Apache :
http://www.webmaster-hub.com/publication/Mod-rewrite-ou-la-reecriture-des.html