Programmer une URL dans SPIP

La navigation dans les pages de SPIP se commande par le clic sur une URL 2. La plupart des URL de SPIP sont prêts calculés par des balises, fixes comme #URL_SITE_SPIP #URL_ARTICLE #URL_ÉCRIRE, #URL_PAGE .....
Mais certaines doivent-être programmées en PHP, la plus oubliée palliant la définition historique d’un champ URL_SITE ou bien pour définir la valeur de redirect pour la page à appeler en sortie d’un formulaire...

Article publié le 19 février 2020, et actualisé en février 2022

 
 
 
 
 
 
 
 
 
 
Attention, cette page est encore en  

 Les balises natives de SPIP

La fonction de base d’un lien dans un squelette SPIP est obtenue en écrivant l’instruction HTML de lien <a href="..">..</a> en faisant calculer à SPIP la référence-cible du lien dans l’espace public du site, par la balise #URL_PAGE{squelette}, avec le nom du squelette et éventuellement des paramètres complémentaires, comme par exemple :
<a href="#URL{arbo,id_rubrique=33} title="Accès à l'arborescence">Arbo</a>
De même pour accéder à une page de l’espace privé, on dispose de l’équivalent #URL_ECRIRE{article_edit,id_article=22} pour éditer l’article, et #URL_ACTION_AUTEUR.
Dans le cas des objets éditoriaux natifs de SPIP, sont proposées les balises de raccourci public correspondantes, #URL_... pour les page rubrique, article, auteur, voire aussi #URL_SITE_SPIP, mais attention au cas des sites (pour une raison historique : présence de champs nommés ’url_site’ dans les tables ARTICLES ou SITES) !

 Accès à la page interne descriptive d’un site référencé

La table des (SYNDICS) [1] comporte un champ correspondant à la balise #URL_SITE .... qui n’est donc valable QUE dans ce contexte ; or cette URL <code>#URL_SITE{id_site=..} serait, en cohérence avec les autres URL d’objets, l’appel à cette page !
Dans ce cas dérogatoire, il faut utiliser, ou utiliser la ’vraie’ balise native #URL_SYNDIC [2], ou introduire le codage proposé par exemple dans la page de recherche :
<a href="[(#ID_SYNDIC|generer_url_entite{site,'','',#CONNECT})]">#NOM_SITE</a> ou bien [3] ou bien ce code [4]

  1. /* Permet dans un texte de faire [->refsite12] qui fera un lien vers la page du site en cours décrivant ce site (et non pas un lien direct vers le site de destination) */
  2. function generer_url_refsite($id, $args, $ancre) {
  3.   return array('site', $id);
  4. }

Télécharger

...
Ou bien vous pouvez toujours reprendre (dans l’espace public) la syntaxe #URL_PAGE{nom_squelette}{id_syndic=...},ou tout autre argument que vous aurez prévu dans la boucle principale de votre squelette...

 Les accès disponibles par PHP

Le premier source à explorer est bien sûr ./ecrire/balise/url_.php qui reprend les fonctions correspondantes aux balises ci-dessus.
On découvre deux fonctions utilitaires :
- generer_generer_url($type, $p)
- generer_generer_url_arg($type, ..)

L’autre piste a regarder porte de meme sur ./ecrire/inc/utils.php avec les diverses fonctions generer_url...() ..

A partir de SPIP 4.1
Bien noter que generer_url_entite() sera déprécié par generer_objet_lien()


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1Ancien nom des (SITES) référencés, vous savez bien...

[2Mais on y pense pas toujours... d’où cet article !

[3En effet, le raccourci [->site12] est le seul raccourci typo dérogatoire de SPIP ayant un traitement qui amène directement sur le site référencé au lieu de conduire à la page sur notre site qui affiche la description du site (et le flux RSS syndiqué).

[4fourni par ESJ à l’époque (à écrire dans un mes_fonctions.php) !


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 19 février 2020, et actualisé en février 2022 Provisoire (à compléter...) .

Répondre à cet article