Bonjour,
on en a déjà parlé plusieurs fois, et j'avais fait une bidouille pas
très propre pour arriver à un résultat partiel, il serait très utile
de connaître tous les liens internes entre éléments gérés par SPIP.
Par exemple, voir sur la page d'une rubrique quels sont les éléments
(autres rubriques, articles, brèves, etc.) qui contiennent des liens
vers cette rubrique sous la forme [texte->rub#] ...
J'ai fais ça plus proprement avec un script supplémentaire et il n'y a
plus qu'à appeler une fonction aux endroits nécessaires là où on met à
jour des contenus.
Voici déjà la table à créer pour stocker ces informations :
CREATE TABLE spip_liens_internes (
id_depuis varchar(10) NOT NULL default '',
id_vers varchar(10) NOT NULL default '',
PRIMARY KEY (id_depuis,id_vers)
);
Copier maintenant le fichier 'inc_liens_internes.php3' ci-joint dans
'ecrire/'.
Ensuite, pour traiter le cas des liens pointant des articles vers
d'autres éléments, éditer le fichier 'ecrire/articles.php3', et
insérer entre les lignes 205 et 206 suivantes :
------8<--------------------------------------------------
calculer_rubriques();
if ($statut_article == 'publie') $reindexer = true;
------8<--------------------------------------------------
Les trois lignes suivantes :
calculer_rubriques();
------8<--------------------------------------------------
include_ecrire('inc_liens_internes.php3');
$contenu = $surtitre.$titre.$soustitre.$descriptif.$chapo.$texte.$ps;
update_liens_internes($contenu, 'art-'.$id_article);
------8<--------------------------------------------------
if ($statut_article == 'publie') $reindexer = true;
Ensuite, dès qu'un article est modifié, les liens sont mis à jour.
Il reste à traiter le cas des autres éléments (3 lignes à ajouter par
ci par là), à ajouter dans la page de chaque élément la liste des
autres éléments qui pointent vers lui, et éventuellement ajouter des
impossibilités ou alertes en cas de (tentative de) suppression d'un
élément vers lequel d'autres pointent ...
Yapluka !!!
-Nicolas
inc_liens_internes.zip (1.07 KB)