====== jUrl, le moteur d'URLs Automatiques de Jelix. ====== //(version de Jelix supportée 1.1.x)// Ce petit article aborde 2 points du moteur d'URLs, - l'écriture d'URLs "Jelixiennes" - les moteurs d'URLs de Jelix ===== 1 - Introduction ===== Classiquement, pour ajouter un lien dans une page, on se contente de faire des URLs manuellement comme suit : MonBeauSite Ce pendant si vous installez cette application dans un environnement dont le chemin est différent, un clic sur le lien aboutira sur une page 404. ===== 2 - Ecriture d'URLs "Jelixiennes" ===== Pour éviter l'avatar précédent, __jUrl__ fait son oeuvre de façon tout à fait simple, comme suit : MonBeauSite où __news__ est mon __module__, __default__ est mon __contrôleur__, et __index__ ma __méthode__. ce qui génèrera l'url http://localhost/index.php?module=news&action=default:index&parm1=value1 Mais il y a bien évidemment moyen d'avoir des URLs beaucoup plus "propres" (voir ci-dessous) Une autre façon de procéder est d'utiliser jUrl dans son contrôleur et d'assigner le résultat au template : ==== le contrôleur ==== function index() { $rep = $this->getResponse('html'); $monUrl = jurl::get('module~controlleur:action',array('parm1'=>'value1')); $tpl = new jTpl(); $tpl->assign('monurl',$monurl); $rep->body->assign('MAIN', $tpl->fetch('mon_template'); return $rep; } ==== le template ==== MonBeauSite Cas concret de cette utilisation au travers du controleur : l'utilisation de script AJAX ayant bien évidemment besoin d'une url pour envoyer les données au serveur. Dans le template quand nous codons le javascript nous mettons entre {literal}...{/literal} le code javascript que jelix ne doit pas interpreter. Par conséquent l'URL ne peut être dynamiquement allouée à notre template, il faut donc générer le code javascript dans sa méthode avec l'URL qui elle sera bien issue de jUrl(). voici ce que cela donne par exemple pour un champ de recherche dynamique : ==== le controleur ==== $url = jUrl::get('hfnusearch~default:queryajax'); $javascript = ""."\n"; $tpl->assign('javascript',$javascript); ==== le template ==== {$javascript} ... ce qui donnera dans la page html : ===== 3 - Les moteurs d'URLs de Jelix ===== A présent un autre aspect du moteur d'URLs de Jelix est son type. Le type de moteur __''simple''__ produit des URLS de la forme (pour reprendre l'exemple précédant) http://localhost/index.php?module=news&action=default:index&parm1=value1 Le type de moteur __''basic_significant'' __produit des URLs à la ''Cake'' exemple : http://localhost/index.php/news/default/index?parm1=value1 c'est-à-dire : http://localhost/index.php/module/contrôleur/methode?parm1=value1 Le dernier type de moteur existant est le type __''significant''__ produisant l'url suivante : http://localhost/news/value1 résultat beaucoup plus concis et clair pour trouver la news "value1" ;) Le dernier (significant) utilise, de plus, un fichier ursl.xml permettant d'indiquer à Jelix la concordance entre une URLs et les modules. Ainsi pour l'url : http://localhost/news/value1, le fichier urls.xml ressemblerait à : ===== 4 - Conclusion ===== * le générateur d'URLs permet justement de __ne jamais rien avoir en dur dans le code__ et de __ne rien figer__ concernant le choix et la gestion des URLs. * le moteur __''basic_significant''__ représente un très bon ratio temps passé / qualité des URLs générées * le moteur __''significant''__ est un peu plus délicat à gérer car il faut écrire TOUTES les urls, au risque de voir certaines complétement inopérantes jUrl est donc l'outil indispensable pour la portabilité de ses applications dans des environnements hétérogènes et d'une très grande souplesse de mis en oeuvre. [[http://jelix.org/articles/fr/manuel-1.1/urls|en savoir plus sur jURL]]