Carnet Wiki

Mots-clés enSPIP 3

Version 1 — Octobre 2012 YannX — Version initiale

L’utilisation des mots-clés etait devenue classique en SPIP 2 ; mais le passage a SPIP 3 oblige a revoir l’implantation etle code d’accès aux tables avec mots-clés.

Il peut s’avérer interessant de bien comprendre l’utilisation de l’interface API Editer_liens.

La nouvelle référence des API SPIP 3 propose un vocabulaire unifié pour gérer les objets, et en particulier les liens entre objets (pas seulement les mots-clés).

Tables desMots-clés

Comme traditionnellement, les mots-clés sont définis dans une table MOTS, avec une gestion des GROUPES_MOTS (pas de changement à ce niveau).

Mais pour les liens, c’est plus simple : les diverses tables de liens avec les mots-clés de SPIP2 sont remplacées par une seule table de lien : un triplet depuis la clé du mot, vers un objet précisé par sa nature et sa propre clé !
On trouve donc une table spip_mots_liens qui contient donc les trois champs suivants :

  • id_mot : le code-clé du mot-clé
  • objet : la nature de l’objet pointé (associé) à ce mot
  • id_objet : la clé identifiant l’enregistrement objectif dans sa table

C ’est la traduction de la documentation de référence :

<blockquote class="spip">

Pour être associable en tant que source, un objet bidibule stocké dans une table spip_bidibules doit posséder une table spip_bidibules_liens qui possèdera un champ id_bidibule (même nom que la clé primaire de spip_bidibules) et deux champs id_objet et objet.

</blockquote>

Si vous aviez l’habitude de penser aux liens des articles vers les mots, il va falloir changer votre vocabulaire : chaque mot peut porter :
-  un lien vers un article (donc vers tout/tous articles)
-  et un lien vers toute occurrence de tout autre objet...

Ce n’est pas l’article qui porte un lien vers le mot-clé !

Cette petite précision prendra toute son importance pour bien utiliser les deux tableaux $objets_source (ici les mots), et $objets_lies,qui seront d’abord les articles, puis dans un second temps les message de forum.

La Gestion des accès

SPIP sait toujours générer les bonnes jointures (voir l’article rappelant les jointures automatiques) dans vos squelettes ; il ne semble donc pas y avoir de changement..

Par contre, tout le code php éventuellement écrit pour suivre des formulaires CVT personnalisés, vadevoir suivre uen refonte, et peut gagner a être utiliser avec les nouvelles API ; en particulier les sélections peuvent devenir plus faciles à traiter...

Appliquons par exemple la nouvelle fonction de sélection

objet_trouver_liens<code>
<quote>
objet_trouver_liens($objets_source,$objets_lies) permet de retrouver tous les liens de $objets_source vers $objets_lies.</quote>

Plus besoin d'écrire une série de filtres SQL avec des clauses Where[[Les clauses SQL , qui doivent être chaines decaractères, posent souvent des difficultés entre les champs texte, les champs numériques à interpréter, et les nomsde champs...]]... Il suffit d'insérer  dans les définitions de tableaux associatifs, les bonnes valeurs !

- en spip 2 <code>        $where = " id_forum = ".sql_quote($id_forum); 
                              = sql_allfetsel('id_mot', "spip_mots_forum",  $where );<code>
devient <code> = sql_allfetsel('id_mot', "spip_mots_liens",  $where );

.
Il vous est suggéré d’utiliser directement
objet_trouver_liens( array('mot'=>'*'), array('forum'=>$id_forum));.

Autre avantage, vous récupérer automatiquement l’ensemble des champs ....