Dotclear

Ticket #801 (closed enhancement: fixed)

Opened 15 years ago

Last modified 14 years ago

Ajout behaviour dans urlhandler:p404

Reported by: bruno Owned by: xave
Priority: normal Milestone: 2.2
Component: module:public Version: 2.1
Severity: normal Keywords:
Cc:

Description

Actuellement, il n'est pas possible d'avoir plusieurs urlhandlers pour le même profil d'url (par exemple, difficile d'intercepter un /post/mon-post-a-moi).

Cela pourrait être intéressant d'avoir des mécanismes de "failback-mode" dans le cas où un URLhandler ne sait pas quoi faire d'une URL qu'il ne comprend pas (ex: un post_url qui a changé, mais qui est déjà pointé par d'autres sites).

Une solution intéressante serait de permettre à des plugins tiers de pouvoir s'insérer au moment du p404 pour voir s'il n'y a vraiment pas de solutions alternatives à un 404, en passant par l'appel d'un behavior avant de servir le 404. Un plugin pourrait par exemple servir un redirect vers le bon billet.

Change History

comment:1 Changed 15 years ago by xave

Est-ce que ce n'est pas exactement ce que fait le plugin  HTTP Redirect ?

comment:2 Changed 15 years ago by bruno

Pas tout à fait : httpredirect permet de définir une URL de redirection (vers une url quelconque) pour un billet donné. Mais il court-circuite complètement l'affichage du billet. Autre détail, il ne fonctionne que pour les billets de type "post".

Une évolution de ce plugin pourrait faire l'affaire, mais :

  • Cela suppose une requête supplémentaire (pour vérifier s'il y a une redirection) avant la requête principale du billet. Le plugin court-circuite l'urlhandler "post" en le rappelant si ce n'est pas une redirection. Je voyais plutôt dans mon contexte un traitement a posteriori : l'URL du billet n'est pas trouvée, soit, on fait une requête en plus en base pour rediriger vers le bon post_url.
  • On a une relation 1-1 entre le post_url et la redirection : on ne peut pas faire plusieurs alias pour le même post.

Concrètement, on pourrait presque envisager un plugin "intelligent", qui essaye de deviner le billet qui correspond le mieux à l'url transmise.

comment:3 Changed 15 years ago by pep

On pourrait regarder s'il ne serait pas plus judicieux de commencer par proposer un jeu d'exceptions pouvant être levées par les URLHandlers et voir ce qu'il serait alors possible de faire ensuite.

comment:4 Changed 15 years ago by bruno

pep: ça peut effectivement être une solution élégante : si tous les urlhandlers lèvent une exception pour une url donnée, alors on renvoit sur un p404.

Juste un détail : on peut prioriser les urlhandlers les uns par rapport aux autres, s'ils répondent aux mêmes regexp ?

comment:5 follow-up: ↓ 6 Changed 15 years ago by JcDenis

Et si on faisait un plugin avec une haute priorité, en utilisant le behavior "tplBeforeData" ainsi que $core->tpl->type tu peux intercepter les erreurs 404 et faire une redirection?

comment:6 in reply to: ↑ 5 Changed 15 years ago by JcDenis

Replying to JcDenis:

Et si on faisait un plugin avec une haute priorité, en utilisant le behavior "tplBeforeData" ainsi que $core->tpl->type tu peux intercepter les erreurs 404 et faire une redirection?

Faitre comme si je n'avais rien dit je crois que le header(404...) et déjà envoyer à ce moment la...

comment:7 Changed 14 years ago by bruno

(In [3041]) Added exception handling for error pages, addresses #801

comment:8 Changed 14 years ago by xave

  • Status changed from new to closed
  • Resolution set to fixed

(In [3044]) Merging changes from Bazar. Closes #676, #786, #801.

comment:9 Changed 14 years ago by bruno

(In [3079]) Restored exception being thrown if not a "not found" exception. May be changed later to a more generic "internal error" page. Addresses #801

comment:10 Changed 14 years ago by xave

(In [3083]) Merged last changes from Bazar. -Fixed stoopid error in [3042], fixes #676 (Thanks Zeiram) -Restored exception being thrown if not a "not found" exception. May be changed later to a more generic "internal error" page. Fixes #801

Note: See TracTickets for help on using tickets.

Sites map