[spip-dev] Nouveau raccourci typo en SPIP 2.0

Hello,

Y a-t-il un moyen simple de créer un nouveau raccourcis typographique en SPIP 2.0 ? Je sais que Emmanuel a travaillé dessus alors je demande. Par exemple, j'aimerai (cocher le plus simple)

[ ] --- [->trac:ecrire/base/serial.php]
[ ] --- [@trac:ecrire/base/serial.php]
[ ] --- [trac@ecrire/base/serial.php]
[ ] --- autre : préciser ____________

Et aussi ...

[ ] --- [->doc:recuperer_fond]
[ ] --- [@doc:recuperer_fond]
[ ] --- [@recuperer_fond] ...
[ ] --- autre : préciser ____________

Comment serait-ce réalisable donc ?
Dois-je passer par les pipelines (pre|post)_propre ou y a t-il plus simple ?

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

En fait c'est pas très bon comme exemple d'objet interne,
c'est le moins qu'on puisse dire, mais le mécanisme d'appel est le même.

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

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" : '');
}

En fait c'est pas très bon comme exemple d'objet interne,
c'est le moins qu'on puisse dire, mais le mécanisme d'appel est le même.

OUi, et grand merci pour tes réponses.

J'essaie [->trac200#ecrire/base/serial.php], écriture qui ne me convient pas (jaurais préféré [->trac200|ecrire/base/serial.php] par exemple, mais c'est pas pris en compte), mais on fait avec ce qu'on a :slight_smile: ...

Sauf que çe ne rentre pas dans ma fonction generer_url_trac() parce que http://trac.rezo.net/trac/spip/browser/branches/spip-2.0/ecrire/inc/utils.php#L770 retourne une valeur $res. Cette valeur est calculée, avec les urls 'page' sans chercher de fonction generer_url_trac()...

Le "sinon c'est un raccourci" http://trac.rezo.net/trac/spip/browser/branches/spip-2.0/ecrire/inc/utils.php#L774 4 ligne en dessous n'est pas appelé car un return est effectué juste avant.

Normal ou pas finalement ?

J'essaie [->trac200#ecrire/base/serial.php], écriture qui ne me convient pas (jaurais préféré [->trac200|ecrire/base/serial.php] par exemple, mais c'est pas pris en compte), mais on fait avec ce qu'on a :slight_smile: ...

A quoi sert ce 200 ? Si la réponse est "à rien", je recommande la stratégie glossaire:

[?ecrire/base/serial.php#trac] sera interprété par glossaire_trac

D'ailleurs s'il sert à qqch aussi:

[?ecrire/base/serial.php#trac200] donne la revision 200 de ce fichier ?

Sauf que çe ne rentre pas dans ma fonction generer_url_trac() parce que http://trac.rezo.net/trac/spip/browser/branches/spip-2.0/ecrire/inc/utils.php#L770 retourne une valeur $res. Cette valeur est calculée, avec les urls 'page' sans chercher de fonction generer_url_trac()...

Le "sinon c'est un raccourci" http://trac.rezo.net/trac/spip/browser/branches/spip-2.0/ecrire/inc/utils.php#L774 4 ligne en dessous n'est pas appelé car un return est effectué juste avant.

Bah non, il y a un "if" devant ce return.

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

J'essaie [->trac200#ecrire/base/serial.php], écriture qui ne me convient pas (jaurais préféré [->trac200|ecrire/base/serial.php] par exemple, mais c'est pas pris en compte), mais on fait avec ce qu'on a :slight_smile: ...

A quoi sert ce 200 ? Si la réponse est "à rien", je recommande la stratégie glossaire:

La réponse est pas spécialement à rien : je voulais avoir la possibilité d'indiquer dev, ou branche2.0 (ici 200 était 2.0.0 en gros) trac0 pour dev, trac192 pour branche 2.0... mais ça peut se faire différemment.

[?ecrire/base/serial.php#trac200] donne la revision 200 de ce fichier ?

Ou le numéro de la ligne pourquoi pas...

Sauf que çe ne rentre pas dans ma fonction generer_url_trac() parce que http://trac.rezo.net/trac/spip/browser/branches/spip-2.0/ecrire/inc/utils.php#L770 retourne une valeur $res.

Bah non, il y a un "if" devant ce return.

Oui, mais $res n'est pas vide justement... c'est là le binz il vaut : "spip.php?trac200#ecrire/base/serial.php"

Committo,Ergo:sum a écrit :

[?ecrire/base/serial.php#trac] sera interprété par glossaire_trac

Bon, effectivement ça peut marcher aussi (en perdant la notion des différentes branches) :

[?ecrire/base/serial.php#trac] [?ecrire/base/serial.php#trac10]

avec :

@define(URL_TRAC, 'http://trac.rezo.net/trac/spip/browser/spip/');

function glossaire_trac($texte, $id=0) {
  return URL_TRAC . $texte . ($id ? '#L'.$id : '');
}

Merci beaucoup.
Je vais documenter tout ça de ce pas :slight_smile:

Oui, euh, si je n'ai jamais documenté ça ni publié mes exemples,
c'est que ça me parait encore assez bricolée comme interface,
pour moi ce n'est pas une interface stabilisés.

Sinon, comme meilleur exemple de raccourci interne,
il y a les raccourcis spip192 etc utilisés dans la doc spipnet et qui tiennent compte de la globale spip_lang :

http://zone.spip.org/trac/spip-zone/browser/galaxie/www.spip.net/squelettes/mes_options.php#L23

mais là aussi un autre hack: ça renvoie un tableau qui est une espèce de redirection traitée au niveau de calculer_url.

Regarder aussi juste en-dessous la surcharge inc_lien qui fait la même chose mais en tenant compte du hreflang.

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

Par exemple, j'ai ça:

#[text->rfcNNN]†url du RFC NNN, avec "rfcNNN" comme texte par defaut

...
tant qu'on est sur le sujet :
est ce qu'il y a moyen, pour de nouvelles tables/pages,
de gérer des raccourcis ... raccourcis, comme pour ->article ou ->breve
qui s'écrivent aussi bien ->art ou ->br ?

JLuc

il faut surcharger inc_lien afin de pré-traiter son premier argument.

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

est ce qu'il y a moyen, pour de nouvelles tables/pages,
de gérer des raccourcis ... raccourcis, comme pour ->article ou ->breve
qui s'écrivent aussi bien ->art ou ->br ?

il faut surcharger inc_lien afin de pré-traiter son premier argument.

ok merci : c'est très sympa ces raccourcis raccourcis.
JLuc