Je n'ai pour l'instant regardé que le cas des URLs "page", mais ligne 64 les objets sont déclarés en dur :
// Decoder l'url html, page ou standard
$objets = 'article|breve|rubrique|mot|auteur|site|syndic';
Ce qui fait que dans le sens "id vers url" on peut générer une bonne adresse "spip.php?truc35" mais dans l'autre sens on tombe sur 404 tout le temps.
J'ai essayé de modifier l'expression régulière, mais comme il est indiqué "Decoder l'url html, page ou standard" je ne sais pas l'ensemble des cas qu'elle doit être capable de capturer.
Du coup ça risque forcément de casser quelque chose.
Je vois deux solutions :
- soit modifier l'expression pour capturer n'importe quel "spip.php?[TRUC][NUMERO] sachant que le truc peut contenir un numéro lui-même (dans mon cas il y a l'expression "3d" dans le type de l'objet.
- soit le $objets doit aller chercher tous les surnoms du pipeline adéquat et les joindre avec "|". Ça c'est assez simple à mettre en œuvre sans casser l'expression telle qu'elle est. Par contre il faut aller déplacer ce pipeline dans une fonction, pour pouvoir l'appeler à la fois dans table_objet() et autre part sans doublonner.
J'ai essayé de modifier l'expression régulière, mais comme il est indiqué
"Decoder l'url html, page ou standard" je ne sais pas l'ensemble des cas
qu'elle doit être capable de capturer.
Du coup ça risque forcément de casser quelque chose.
Il faudrait vraiment créer un jeu de tests car on en a soûpé des bugs
sur les URLs...
Je vois deux solutions :
- soit modifier l'expression pour capturer n'importe quel
"spip.php?[TRUC][NUMERO] sachant que le truc peut contenir un numéro
lui-même (dans mon cas il y a l'expression "3d" dans le type de l'objet.
attention car en urls propres_qs c'est spip.php?Titre-de-l-article
- soit le $objets doit aller chercher tous les surnoms du pipeline adéquat
et les joindre avec "|". Ça c'est assez simple à mettre en œuvre sans casser
l'expression telle qu'elle est. Par contre il faut aller déplacer ce
pipeline dans une fonction, pour pouvoir l'appeler à la fois dans
table_objet() et autre part sans doublonner.
============================================
- $objets = 'article|breve|rubrique|mot|auteur|site|syndic';
+ include_spip('base/connect_sql.php');
+ $objets = join('|', array_flip(tables_objets_surnoms()));
Oui ça paraît plus fin comme cela
-- Fil