Il y a deux types de raccourcis calculant des URL, ceux où on cherche en interne à partir d'un nombre,
et les autres.
Pour les premiers, ça rabat sur les URLs symboliques via generer_url_entite.
Par exemple, si j'écris [->bar34] et que je suis en url-propres,
urls_propre_dist va retourner l'URL de l'objet telle qu'indiquée par la table spip_urls pour l'objet 34 de la table bar,
qui doit exister. Si on clique sur le lien produit, SPIP va à nouveau appeler urls_propre_dist avec le mode d'appel inversé,
c'est-à-dire qu'elle reçoit l'URL et qu'elle retrouve le numéro et le nom de la table, ce nom donnant le nom du squelette
(en général le même, à "s" près pour les objets std de SPIP: article/articles etc). Si en plus la table bar contient un champ "titre",
le lien fourni aura ce titre comme zone de clic. Pour des tables moins ressemblantes à celles std de SPIP, il faut se définir un nouvea jeu
d'URL à partir de ceux existants, ou définir seulement un generer_url_RACCOURCI.
Par exemple, j'ai ça:
#[text->rfcNNN]†url du RFC NNN, avec "rfcNNN" comme texte par defaut
function generer_url_rfc($id, $param='', $ancre='') {
return _"http://www.faqs.org/rfcs/rfc" . $id . ".html" .
($ancre ? "#ancre" : '');
}
Pour les raccourcis non fondés sur un numéro, on est dans l'optique "glossaire".
La notation [?X] fournit l'URL de Wikipedia consacré à X,
mais [?X#G] fournit l'URL calculée par la fonction glossaire_G appliquée à X.
Subtilite supplémentaire, si G se termine par un numéro (ie \w+\d+),
on prend le début de ce nom, disons H, et on applique glossaire_H sur X et le numéro (en général une section du dit glossaire).
J'ai par exemple ça:
// [?f#css] reference l'entree f de la doc des CSS
function glossaire_css($texte, $id=0) {
return "http://www.w3.org/TR/REC-CSS2/’ . “visuren.html#” . $texte;
}
et ça
// [?f#phpN] reference l'entree f de la section N du manuel PHP
// par convention, la section O reference la doc de la fonction f
function glossaire_php($texte, $id=0) {
static $section = array('function.', 'getting-started.', 'install.', 'language.', 'security.', 'features.','ref.', 'zend.', 'streams.', 'faq.');
return _DOC_PHP5
. $section[intval($id)]
. htmlentities(str_replace('_','-',$texte)) . ".html$ancre";
}
Committo,Ergo:Sum