Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste : article1

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,

  1. l'écriture d'URLs “Jelixiennes”
  2. 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 :

<a href="/mon/chemin/vers/mon/lien/interne" title="mon lien tout pas beau">MonBeauSite</a>

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 :

<a href="{jurl 'news~default:index',array('parm1'=>'value1')}">MonBeauSite</a>

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

<a href="{$monurl}">MonBeauSite</a>

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 =
	"<script type=\"text/javascript\">"."\n".
	"//<![CDATA["."\n".
	"$().ready(function() {"."\n".
	"\t"."$(\"#hfnu_q\").autocomplete('".$url."', {"."\n".
	"\t\t"."width: 300,"."\n".
	"\t\t"."multiple: true,"."\n".
	"\t\t"."matchContains: true,"."\n".
	"\t"."});"."\n".
	"});"."\n".
	"//]]>"."\n".
	"</script>"."\n";
$tpl->assign('javascript',$javascript);

le template

{$javascript}
...

ce qui donnera dans la page html :

<script type="text/javascript">
//<![CDATA[
$().ready(function() {
    $("#hfnu_q").autocomplete('http://localhost/index.php?module=hfnusearch&action=default:queryajax', {
        width: 300,
        multiple: true,
        matchContains: true,
    });
});
//]]>
</script>

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 à :

<?xml version="1.0" encoding="UTF-8"?>
<urls xmlns="http://jelix.org/ns/urls/1.0">  
    <classicentrypoint name="index" default="true" noentrypoint="true">
        <url pathinfo="/news/:parm1" module="news" action="default:index">
           <param name="parm1" type="string"/>
        </url>
    </classicentrypoint>
</urls>

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.

en savoir plus sur jURL

fr/tutoriels/jurl/article1.txt · Dernière modification : 2010/04/25 09:12 de goofy

Fils rss des changements récents dans le wiki Creative Commons License