0

Elgg: URL Rewriting ou comment faire de belles URL de base

Print Friendly, PDF & Email

[ A+ ] /[ A- ]

Article publié le 27 juillet 2011

Si vous avez besoin de personnaliser les URL de votre plugin et ne pas laisser des mod/plugin/fichier.php,vous devez les spécifier dans le fichier start.php de ce que vous êtes en train de développer.

Je ne parlerai pas des menus, je garde cette matière pour plus tard.

 

S’il s’agit d’une action qui est liée à un formulaire (c’est-à-dire au fichier qui traite les données de celui-ci), vous avez la fonction register_action().

register_action("grr/save", false, $CONFIG->pluginspath."grr/actions/save.php");

 

Il suffira d’indiquer dans votre balise form le code suivant:

<form action="<?php echo $vars['url']; ?>action/grr/save" method="post">

 

Si par contre, il s’agit d’une autre url, comme l’affichage d’une liste, l’affichage d’un formulaire ou tout autre chose, créez votre propre page_handler().

register_page_handler('grr','grr_page_handler'); //register_page_handler(nom_du_plugin, nom_de_la_fonction

 

Ensuite, plus loin, vous créez cette fameuse fonction:

function grr_page_handler($page) {

switch ($page[0]) {

//liste des ressources
case "ressources":
case "choix_ressource":
include(dirname(__FILE__) . "/list.php");
break;

//liste des réservations de l'utilisateur connecté
case "mes_reservations":
include(dirname(__FILE__) . "/my_reservations.php");
break;

//liste des réservations
case "reservations":
include(dirname(__FILE__) . "/list_reservation.php");
break;

//modifier une ressource
case "edit":
set_input('id', $page[1]);
include(dirname(__FILE__) . "/edit.php");
break;

//ajouter une ressource
case "add":
include(dirname(__FILE__) . "/add.php");
break;

//lien réserver dans la fiche ressource
case "reserver":
set_input('id', $page[1]);
include(dirname(__FILE__) . "/reservation.php");
break;

default:
return false;
}

return true;
}

 

  • $page[0] = ce qui vient après le nom du plugin (ex: pg/grr/add => add = $page[0])
  • C’est donc bien une comparaison du $page[0] et c’est donc bien les noms choisis qui iront dans les URL
  • $page[1] = ce qui suit page[0] (ex: pg/grr/edit/15 => $page[1] = 15)
  • on inclut le fichier qui est à la racine de votre plugin et qui contient les données ainsi que les inclusions des vues nécessaires
  • on peut parfaitement inclure des fichiers qui seraient dans d’autres dossiers à condition de bien renseigner le chemin
  • set_input(‘nom_input’,$page[1]) = indique que l’on envoie un paramètre permettant de retrouver ce dont on a besoin ($_GET en php) qui se trouve à la place de $page[1]
  • pour que set_input serve à quelque chose, vous devez avoir dans le fichier qui est inclus un get_input(« paramètre ») et l’utilisation de ce que vous récupérez permettant l’affichage de certaines données
  • il n’est pas interdit d’utiliser $page[2], $page[3], etc.., surtout si vous avez plus d’un objet.

Ensuite, à chaque lien, vous devrez changer en pg/nom_du_plugin/$page[0]/$page[1]:

[...]

<a href="<?php  echo $vars['url']?>pg/grr/edit/<?php echo $reservation->guid; ?>">
<?php echo elgg_echo("grr:edit");?>
</a>

[...]

 

Vous pouvez aussi pour la fiche de vos objets améliorer l’url (je prends l’exemple du module blog d’Elgg) grâce à register_entity_url_handler():

register_entity_url_handler('blog_url','object','blog');//nom de la fonction, type, nom

 

Vous devez créer ensuite la fonction:

function blog_url($blogpost) {

global $CONFIG;
$title = $blogpost->title;
$title = elgg_get_friendly_title($title);
return $CONFIG->url . "pg/blog/read/" . $blogpost->getGUID() . "/" . $title;
}

 

Comme vous le voyez, vous avez plusieurs possibilités de faire et une fois que vous avez compris le principe, ce qui vous semblait incompréhensible devient très clair (quoique certaines pages start.php restent nébuleuses dans Elgg).

Vous avez trouvé l'article intéressant? Partagez-le!

Vinciane

Conseillère pédagogique et développeuse PHP, passionnée de nouvelles technologies, de l'histoire (particulièrement l'Antiquité et la Second Guerre Mondiale) et des jeux vidéo, j'aime écrire, tester et partager.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

dix-huit + vingt =