[spip-dev] Référencement des liens internes entre éléments gérés par SPIP

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 !!! :wink:

-Nicolas

inc_liens_internes.zip (1.07 KB)

de connaître tous les liens internes entre éléments gérés par SPIP.

Pourquoi seulement internes ? Il serait aussi vachement utile de dresser la
liste des liens externes (ça peut se faire en même temps), pour donner à
manger à d'autres contribs qui veulent vérifier ceux-là justement...

Ensuite, penses-tu faire des "alertes" quand un lien pointe ers une
ressource que tu mets hors-ligne, ou simplement un tableau récapitulatif des
liens cassés ? (Le concept d'alerte risque d'être pénible à l'usage, car soit
elle est obstrusive, et elle t'empêche de faire tes modifs (quand tu en fais
plusieurs à la fois), soit elle n'est pas obstrusive et tu peux la louper.)

-- Fil

elle est obstrusive

Oups! En français : obstruante, voire obstructive ; en français
compréhensible, gênante. Désolé Me Capello.

-- Fil

Bonjour,

de connaître tous les liens internes entre éléments gérés par SPIP.

Pourquoi seulement internes ? Il serait aussi vachement utile de
dresser la liste des liens externes (ça peut se faire en même temps)

En effet, je vais aussi le faire, d'accord ... :wink:

Ensuite, penses-tu faire des "alertes" quand un lien pointe ers une
ressource que tu mets hors-ligne, ou simplement un tableau
récapitulatif des liens cassés ?

D'abord le récapitulatif, puis éventuellement les alertes, mais ça
pourrait être désactivable ...

Je sens un intérêt, je continue ? :wink:

-Nicolas

Hello,

le boulot sur les liens avance ...
cf http://listes.rezo.net/archives/spip-dev/2003-06/msg00518.html

Le schéma de la table a été modifié :

CREATE TABLE spip_liens (
  contenant varchar(10) NOT NULL default '',
  lien_interne varchar(10) NOT NULL default '',
  lien_externe varchar(255) NOT NULL default '',
  PRIMARY KEY (contenant,lien_interne,lien_externe)
);

Copiez le fichier 'inc_liens.php3' ci-joint dans 'ecrire/'

Pour traiter le cas des liens pointant des articles vers d'autres
éléments, éditer le fichier 'ecrire/articles.php3'

Au début, après le

------8<--------------------------------------------------
include_ecrire ("inc_documents.php3");
------8<--------------------------------------------------

ajouter la ligne suivante

------8<--------------------------------------------------
include_ecrire('inc_sondages.php3');
------8<--------------------------------------------------

De même, rechercher les lignes suivantes

------8<--------------------------------------------------
calculer_rubriques();
if ($statut_article == 'publie') $reindexer = true;
------8<--------------------------------------------------

Et y insérer les trois lignes suivantes

calculer_rubriques();
------8<--------------------------------------------------
$contenu = $surtitre.$titre.$soustitre.$descriptif.$chapo.$texte.$ps;
if ($champs_extra) $contenu .= addslashes(extra_recup_saisie('article', $id_secteur));
update_liens($contenu, 'art-'.$id_article);
------8<--------------------------------------------------
if ($statut_article == 'publie') $reindexer = true;

Ensuite, rechercher la ligne suivante

------8<--------------------------------------------------
afficher_documents_non_inclus($id_article, "article", $flag_editable);
------8<--------------------------------------------------

et ajouter à la suite la ligne suivante

------8<--------------------------------------------------
afficher_liens('art-'.$id_article);
------8<--------------------------------------------------

Dès qu'un article sera modifié, les liens seront mis à jour, et tous
les articles vers lesquels un article pointe auront cette information
affichée en bas de page.

Bon, c'est pas forcément très clair, mais si ça convient je fournirais
un vrai 'diff -u' pour que ce soit intégré proprement.

En attendant, c'est aussi en test là :

http://test.clever-age.org/spip/

Avec un compte admin restreint : demo / demo2003

-Nicolas

inc_liens.zip (1.88 KB)

J'ai oublié, il faut ajouter les lignes suivantes dans
'ecrire/lang/spip_fr.php3' :

'liens_internes' => 'D\'autres &eacute;l&eacute;ments pointent vers celui-ci',
'liens_depuis_rubriques' => 'Liens depuis des rubriques',
'liens_depuis_articles' => 'Liens depuis des articles',

-Nicolas