Mieux que ça même, Jelix vous génère l'url correspondante à une action donnée. Indiquez simplement un nom d'action et de module à Jelix, avec éventuellement des paramètres, et Jelix vous génère l'url correspondante.

$string_url = jUrl::get("news~view@classic", array("id_news"=>"54"));

Ici, on demande l'url qui correspond à l'action view du module news, avec un paramètre id_news. jUrl renverra l'url correspondante définie dans un fichier xml centralisant le "mapping". Il y a bien sûr un plugin correspondant "à la smarty" pour le moteur de template.

Ce système permet ainsi de réutiliser un module ou un template dans plusieurs applications, sans avoir à modifier d'url dans le code. Tout se fait automatiquement. Il n'y a plus besoin de mettre des urls en dur dans les templates ou le code.

C'est quelque chose d'assez complexe à mettre en place. Pour tester ce moteur d'url, et éviter des régressions plus tard quand j'effectuerai des modifications, j'ai écris une serie de tests unitaires, qui teste plusieurs cas différents, tant pour l'analyse d'un url pour en déduire une action et un module, que pour la génération d'url à partir d'une action.

J'ai utilisé pour cela la bibliothèque SimpleTest, qui facilite la mise en place de tests unitaires. Elle est particulièrement bien foutu, et codée proprement. Un de ses avantages est de pouvoir indiquer un "moteur" d'affichage des résultats. Ce qui m'a permis de l'intégrer trés facilement dans un module Jelix et de réutiliser le système d'affichage de Jelix.

J'ai du toutefois hacker Simpletest pour supprimer des erreurs de notification PHP de type "strict". Simpletest est compatible PHP5, mais il y a toutefois quelques trucs qui provoquent ces "notices" (genre des $foo = & new bar(), le & étant obsolète pour ce cas de figure dans PHP5). Ce qui est déplaisant car dans Jelix, j'active la prise en charge de **toutes** les erreurs PHP et elles s'affichent donc dans la page HTML résultat. Bref, si vous voulez une version non officielle "spéciale" PHP5 (qui ne fonctionne plus dans PHP4, sans toutefois être optimisée pour PHP5), vous pouvez la récupérer dans le dépot subversion de Jelix (trunk/lib/simpletest).