Personnaliser les URL Pages Pour avoir des adresses /choseXX.html

, par Matthieu Marcillaud

Un besoin qui se fait parfois sentir, c’est d’avoir des urls qui ne soient pas de la forme spip.php?page=chose&id_chose=XX.

J’ai eu besoin d’adresses choseXX.html. Voici ma démarche utilisant les urls de type « page », pour les générer.

Cet exemple a été codé pour SPIP 2.0 et ne s’adresse donc pas aux versions antérieures (et pourrait ne pas fonctionner avec les versions futures !)

Parametrer le jeu d’url « page »

Il faut commencer par activer les urls « page » dans la configuration avancée du site, puis régler leurs parametres dans le fichier d’options, pour avoir l’extension en .html :

  1. <?php
  2. define ('_terminaison_urls_page', '.html');
  3. define ('_separateur_urls_page', '');
  4. define ('_debut_urls_page','');
  5. ?>

Télécharger

Créer la balise #URL_CHOSE

Il faut ensuite creer la balise #URL_CHOSE qui gérèrera l’url demandée. Pour mon besoin l’url devait récupérer l’identifiant de rubrique. La déclaration de la fonction est à mettre dans son fichier de fonctions :

  1. <?php
  2. function balise_URL_CHOSE_dist($p) {
  3. $_id = interprete_argument_balise(1,$p);
  4. if (!$_id) $_id = champ_sql('id_rubrique', $p);
  5. $p->code = "vider_url(generer_url_entite($_id, 'chose'))";
  6. $p->interdire_scripts = false;
  7. return $p;
  8. }
  9. ?>

Télécharger

Détaillons chaque ligne de la fonction :

  1. la fonction interprete_argument_balise récupère et stocke dans la variable $_id le premier argument passé à la balise, par exemple « 8 » si l’on appelle #URL_CHOSE{8}.
  2. en cas d’absence de valeur dans $_id, on demande à récupérer le champ SQL id_rubrique de la boucle en cours de lecture (Exemple : <BOUCLE_art(ARTICLES)>#URL_CHOSE...), ou de l’environnement (présence de #ENV{id_rubrique}) et on l’affecte a $_id.
  3. $p->code va contenir le php qui sera utilisé lors de la compilation du squelette (lorsque SPIP va lire une #URL_CHOSE, son code sera remplacé par le contenu de $p->code). Ici, on appelle la fonction generer_url_entite qui va renvoyer la valeur de l’url pour le type d’url spécifié. On lui passe 2 parametres : l’identifiant récupéré ($_id) ainsi que le nom de la page souhaité (’chose’).
  4. le parametre interdire_script lorsqu’il vaut true n’execute pas le code PHP, mais l’echappe pour qu’il soit affiché sur la page (pratique pour les balises qui affichent des contenus saisis par les rédacteurs !).
  5. retour de l’ensemble des parametres.

Informer le fichier .htaccess des redirections

Pour que les redirections soient effectives vers le bon squelette, il faut les déclarer dans le fichier .htaccess à la racine du site. On ajoutera dans les « réglages personnalisés » la ligne suivante :

Utiliser les url « page » standard de SPIP

Pour utiliser les urls pages standard (spip.php?choseXX) il faut s’adapter un peu :

  • inutile de définir de parametres pour le jeu d’url (enlever les déclarations de constantes (define))
  • inutile de modifier le fichier .htaccess
  • surcharger le fichier ecrire/urls/page.php et modifier les lignes suivantes pour ajouter |chose :
  1. /* Compatibilite urls-page avec formulaire en get !!! */
  2. else if (preg_match(
  3. ',[?/&](article|breve|rubrique|mot|auteur|site)[=]?([0-9]+),',
  4. $url, $regs)) {

Télécharger

P.-S.

Ces exemples ont été testé avec SPIP 2.0 beta 2 [13132]. On remarquera qu’il est necessaire d’effectuer quelques actions sur le fichier d’origine d’url pour pouvoir supporter d’autres noms que ceux prévus par defaut. Il faudra certainement trouver une solution plus ouverte dans l’avenir pour provoquer de nouvelles urls sans avoir besoin de modifier ce fichier.

Coup de pouce

Pour me maintenir en éveil et en pleine forme physique et mentale, vous pouvez me faire le cadeau d'un jus de fruit pressé.

En plus de m'hydrater, de m'offrir une alimentation saine crudivore et frugivore, cela peut aussi me motiver à produire d'autres documentations ou peut-être à prendre des vacances ! :)

Vous pouvez également me « Flattrer » si vous utilisez le service en ligne très malin Flattr de microdonations qui permet d'allouer un budget mensuel à des créateurs de contenu. Votre budget est partagé chaque mois entre toutes les personnes que vous avez flattées ce mois là.