Des mots clefs sur tout ce qu’on veut
Cette contrib fournit une nouvelle page pour l’interface privée permettant d’ajouter facilement des mots sur les éléments spip que l’on veut.
Pour illustrer la contrib, on va prendre comme exemple l’extension de la base de donnée spip pour ajouter des mots clefs sur les documents.
Nouvelles tables
Le première chose à faire est de créer une nouvelle table dans la base de donnée SPIP. Pour suivre les règles de nomage des tables spip, on va l’appeler spip_mots_documents (pensez à remplacer spip_ par le préfixe de vos tables).
Il faut donc, depuis phpMyAdmin ou autre, déclarer une table qui fait un mapping des id_documents vers les id_mots :
CREATE TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9tb3RzX2RvY3VtZW50czwvY29kZT4="></span> (
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfZG9jdW1lbnQ8L2NvZGU+"></span> BIGINT( 21 ) NOT NULL ,
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfbW90PC9jb2RlPg=="></span> BIGINT( 21 ) NOT NULL
);
Il faut ensuite déclarer cette table à SPIP en ajoutant le code suivant dans votre fichier mes_fonctions :
global $tables_principales;
$tables_principales['spip_mots_documents']['field'] = array(
"id_mot" => "BIGINT (21) DEFAULT '0' NOT NULL",
"id_document" => "BIGINT (21) DEFAULT '0' NOT NULL");
$tables_principales['spip_mots_documents']['key'] = array(
"KEY id_mot" => "id_mot",
"KEY id_document" => "id_document");
global $tables_relations;
$tables_relations['mots']['id_document'] = 'mots_documents';
$tables_relations['documents']['id_mot'] = 'mots_documents';
On doit ensuite ajouter une colonne à la table des groupes de mots clefs pour qu’on puisse permettre l’ajout de mots clefs sur les documents :
ALTER TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9ncm91cGVzX21vdHM8L2NvZGU+"></span> ADD <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZG9jdW1lbnRzPC9jb2RlPg=="></span> CHAR( 3 ) NOT NULL DEFAULT 'non';
bientôt intégré à l’interface de cette contrib :
Il faut aussi modifier cette colonne dans la table pour le groupe de mots qui nous intéresse (e.g. « Photos) » puisse être ajouté aux documents :
UPDATE spip_groupes_mots SET documents='oui' WHERE titre='Photos';
Interface d’ajout
Une nouvelle page pour l’interface privée, permettant d’ajouter des mots sur à peu près n’importe quoi a été développée.
pour les versions 1.8.2, il faut télécharger les fichiers disponibles ici puis les installer comme indiquer ci dessous.
Installation
- décompresser l’archive,
- placer mots_partout.php dans le répertoire ecrire,
- placer les fichiers motspartout_*.php dans le répertoire ecrire/lang,
Utilisation
Il faut se rendre sur la page de l’espace privé : ecrire/mots_partout.php, puis :
- On peut limiter les documents affichés en spécifiant une liste — séparée par des virgules — de numéros de rubriques, d’articles ou de brèves.
Les mots sont affichés sur la gauche :
- Les mots en vert sont ceux associés à tous les documents qui sont actuellement affichés.
- Les mots en bleu sont ceux associés à une partie des documents affichés.
- On peut voir les documents associés à des mots en les sélectionnant et en faisant « voir ». On verra alors les documents avec au moins un de ces mots.
Si on veut voir les documents qui ont au moins tous ces mots, il faut alors cocher la case « stricte ».
- On peut exclure les documents associés à certains mots en cochant la case « sans » de ces mots.
- On peut voir les mots associés à certains documents en sélectionnant les documents et faisant « voir ».
- On peut ajouter des mots en les sélectionnant et en sélectionnant les documents. On fait ensuite « ajouter ».
- On peut enlever des mots en les sélectionnant et en sélectionnant les documents. On fait ensuite « enlever ».
Internationalisation
La contrib vient avec 3 fichiers de localisation :
- motspartout_fr.php pour l’interface en français,
- motspartout_en.php pour l’interface en anglais,
- motspartout_it.php pour l’interface en italien.
Si vous localisez ces fichiers dans d’autres langues, merci de me les faire parvenir (NdA : ou de les envoyer aux admins si vous n’avez pas de réponse de l’auteur, avec une petite explication), ils seront ajoutés à la contrib.
Des mots sur autre chose
En fait cette interface est faite pour mettre des mots sur n’importe quel objet spip.
On a pris l’exemple des documents et vous remarquerez qu’on peut déjà l’utiliser pour mettre des mots clefs sur les articles aussi.
On peut facilement étendre cette interface en ajoutant d’autres tables mots_documents comme expliqué plus haut. Il faut ensuite déclarer dans votre fichier mes_options certaines informations. Par exemple pour les brèves :
$choses_possibles['breves'] = array(
'titre_chose' => 'breves',
'id_chose' => 'id_breve',
'table_principale' => 'spip_breves',
'table_auth' => 'spip_auteurs_breves',
'tables_limite' => array(
'breves' => array(
'table' => 'spip_breves',
'nom_id' => 'id_breve'),
'rubriques' => array(
'table' => 'spip_articles',
'nom_id' => 'id_rubrique'),
'documents' => array(
'table' => 'spip_documents_breves',
'nom_id' => 'id_document'))
)
);
- L’index dans la table choses_possibles doit être le nom présent dans la table mots correspondante, par exemple : spip_mots_breves
- titre_chose est le nom de la chose sur laquelle on veut ajouter des mots, on peut localiser cette variable,
- id_chose est le nom de la colonne contenant l’id de la chose sur laquelle on veut ajouter des mots,
- table_principale est la table contenant toutes les choses sur lesquelles on veut ajouter des mots,
- table_auth est facultative. C’est la table qui lie les auteurs du site et la chose sur laquelle on veut ajouter des mots,
- tables_limite est un tableau de table que l’on peut utiliser pour limiter l’affichage (par exemple : les brèves de certaines rubriques, les brèves ayant certain documents) :
- table est le nom de la table,
- nom_id est le nom de la colonne sur laquelle on impose la limite.
affichage personnalisé
Au départ, l’interface va juste afficher une liste des identifiant, puisqu’elle ne sait pas comment afficher les nouveaux objets.
Si on veut un affichage adapté à l’objet sur lequel on travail, il faut ajouter dans mes_options sa propre fonction afficher_liste_choses où choses est le nom de la chose à afficher (i.e. le nom utilisé dans l’index de la table choses_possibles). Cette fonction prend un paramètre la liste des identifiant des choses à afficher.
Vous pouvez vous inspirer des articles ou des documents pour lesquels la table choses_possibles et les fonctions d’affichage sont fournies.
Version de développement
Cette contrib est gérée sur spip-zone, on peut récupérer la dernière version de développement grâce à :
svn checkout svn://zone.spip.org/spip-zone/_contrib_/_ecrire_/mots_partout/trunk/
Discussions par date d’activité
37 discussions
Une super contrib, mais il y a un bug (avec SPIP 1.9.2 [8782]) : quand on a beaucoup d’articles, et qu’on veut afficher les articles suivants, cela reste sur les premiers articles...
Par ailleurs, j’ai une suggestion d’amélioration : serait-il possible d’afficher non seulement le titre, mais aussi le texte de l’article, ou bien une partie... Encore mieux : mettre une troisième colonne permettant de visualiser l’article dont on survole le titre avec la souris... ou bien une popup avec l’article, etc. Bref, des choses qui permettent de voir le contenu de l’article sans devoir aller dedans en cliquant, car c’est plus long et quand on revient en arrière on a perdu les sélections effectuées avant...
Ouvre ton article dans un nouvel onglet, c’est très pratique !
Pour ceux qui ont un probleme avec la pagination, voici un quick&dirty patch :
dans ecrire/inc/presentation.php
function afficher_tranches_requete($num_rows, $colspan, $tmp_var, $url=’’, $nb_aff = 10)
static $ancre = 0 ;
global $spip_lang_right, $spip_display ;
$deb_aff = intval(_request($tmp_var)) ;
$ancre++ ;
$self = self() ;
// ======== DEBUT du rajout ===========
//MG OXYMIUM : q&d patch pour s’assrer que la pagination marche : on repasse certains parametres _POST les parametre en parametre de l’url de la page
if (isset($_POST))
ACCOLADE OUVRANTE
$Params=Array() ;
reset($_POST) ;
while (list($key, $val) = each($_POST))
ACCOLADE OUVRANTE
if ($key !=$tmp_var)
array_push($Params,« $key=$val ») ;
ACCOLADE FERMANTE
array_push($Params,$tmp_var) ;
$tmp_var=implode(« & »,$Params) ;
ACCOLADE FERMANTE ;
// ====== FIN du rajout ===========
$texte = ($spip_display == 4) ? ’’ : « \n
» ;Attention : absense d’effets de bord non garantis....
Répondre à ce message
Une idée de fonctionnalité : lorsqu’on installe ce plugin, on a souvent un site qui a bien vécu et qui a probablement déjà pas mal de mots clefs. Ce qui serait bien, ce serait de pouvoir attacher un groupe de mots clefs déjà existant à un groupe nouvellement créé.
Par exemple, dans mon site actuel, j’ai deux groupes : département et pays que je veux afficher ensemble. Je veux les grouper dans un « super-groupe » localisation. Mais il me faut normalement refaire tout (cad refaire mes mots clefs, les associer aux articles/rubriques etc.). La fonctionnalité « associer ce groupe de mots clefs à un groupe » serait donc bienvenue. Je vais néanmoins voir si je peux m’en sortir dans phpmyadmin.
C’est d’ailleurs tout simple, il suffit de changer l’id 0 du champ id_parent de la table groupe mots pour que ça marche !! Un grand merci.
Afficher des groupes et sous groupes de mots clefs dans partie publique : comment fait-on ?
Existe t’il une syntaxe de boucles qui permettrait celà ? J’ai beau lire la littérature un peu partout, je ne trouve rien. Faut il impérativement écrire un critère et l’implémenter Je ne suis pas assez calé en php pour celà.
Répondre à ce message
Bonjour
merci pour cette contribe que je teste sur une 1.9.2b [9381].
Dans édition/mots partout,
je veux afficher les documents (Ajouter des mots clefs sur : Documents - valider).
Résultat : Affichage des 20 premiers documents. Correct.
Lorsque je clique pour afficher documents 21 et suivant (lien sous Portfolio http://s0405700/NEWINTRACO/ecrire/?exec=mots_partout&debut=20#a1), affichage des articles au lieu des documents.
Merci
Répondre à ce message
salut les magiciens,
un petit mot pour vous signaler que dans sa version plugin, en 1.9.2a et b
ce programme rentre en conflit avec l’agenda évènement de cedric,
le champ auteur n’apparait pas à l’étape « les mots clés de ce groupe peuvent être attribués à »
regards, pierre
Une solution a été trouvée qui consiste à renommer le dossier plugin mots_partout en _mots_partout
deux autres incompatibilités
- le plugin « nuage », la différenciation de la taile des mots n’est pas prise en compte, je n’ai pas trouvé de solution
- « une arborescence dynamique et contextuelle » because les modif dans layer.php, je n’ai pas trouvé de soluce sauf à remplacer layer.php dans le plugin par le fichier original,
mais celà impacte t-il le fonctionnement de mots partout ?
- un autre problème apparait, tout autre plugin désacitvé, mots partout ne fonctionne pas avec la boucle auteur, le filtre id_mot ou titre_mot ne filtre rien et ramène tous les auteurs, spip 1.9.2a et b
après installation des toutes dernières versions de mots partout et de nuage,
tous mes problèmes sont résolus !!!!!!!
merci merci merci
Répondre à ce message
bonjour
moi je n’ai pas réussit a mettre la page j’ai tout fait a la lettre mais il me dit
Bonjour,
Une fois installé sur 2 sites Spip 1.9.1. differents le plug-in disponible depuis http://miroirspip.ventre.name/builds/spip-zone/ et installé le plug-in comme précisé http://www.spip-contrib.net/?Mise-en-place-du-plugin-mots-cles. Le message d’erreur suivant s’affiche lorsque j’accède au menu Edition > Mots partouts :
Warning : exec_mots_partout(../plugins//local/web/mon_site/spip_dvp/plugins/mots_partout_choses.php) [function.exec-mots-partout] : failed to open stream : Aucun fichier ou répertoire de ce type in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_partout.php on line 181
Warning : exec_mots_partout() [function.include] : Failed opening ’../plugins//local/web/mon_site/spip_dvp/plugins/mots_partout_choses.php’ for inclusion (include_path=’. :/usr/share/pear’) in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_partout.php on line 181
Warning : Variable passed to each() is not an array or object in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_partout.php on line 201
Warning : reset() [function.reset] : Passed variable is not an array or object in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_partout.php on line 202
Des vilains messages d’erreurs s’affichent aussi en regard de chaque goupe de mots clefs :
Warning : calculer_liens_mots(../plugins//local/web/mon_site/spip_dvp/plugins/mots_partout_choses.php) [function.calculer-liens-mots] : failed to open stream : Aucun fichier ou répertoire de ce type in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_tous.php on line 291
Warning : calculer_liens_mots() [function.include] : Failed opening ’../plugins//local/web/mon_site/spip_dvp/plugins/mots_partout_choses.php’ for inclusion (include_path=’. :/usr/share/pear’) in /local/web/mon_site/spip_dvp/plugins/mots_partout_1_9_1/exec/mots_tous.php on line 291
Répondre à ce message
J’utilise la version 192 0.2 du 28/03/07. Je n’arrive pas à attribuer des mots clefs aux auteurs, quoique j’ai configuré cela dans la Configuration justement.
Allo ? Il y a quelqu’un ?
Je continue, quelqu’un répondra peut-être...
- j’ai installé le plugin dans le bon répertoire et j’ai coché la case de validation du plugin.
- dans la configuration du site, j’ai demandé dans l’onglet « Configurer Mots partout » de configurer la base de données pour avoir des mots clés sur les évènements et les auteurs.
- dans les mots clés, je ne trouve pas la possibilité d’affecter des mots clés aux auteurs. Aux évènements, oui, mais pas les auteurs, la case à cocher n’existe tout simplement pas :
Les mots-clés de ce groupe peuvent être associés :
aux articles
aux brèves
aux rubriques
aux sites référencés ou syndiqués.
aux événements
Quel est le problème ?????
Merci d’une réponse...
Philippe
J’ai exactement le même problème... As-tu trouvé une solution ?
Répondre à ce message
J’ai installé ce plugin qui me semble idéal pour mes besoins, mais qd
j’essaye d’affecter un mot clé à un auteur j’ai le message
Warning : mysql_free_result() : supplied argument is not a valid MySQL result
resource in ............/ecrire/base/db_mysql.php on line 356
ça fait un moment que j’ai ce pb et ça commence à devenir urgent que j’avance... J’ai cherché sur google et le seul truc que j’ai trouvé sur ce sujet est mon propre mail sur la liste spip :-(
Est-ce un bug du plugin ? Est-il possible que ce soit lié au fait que mes tables sont préfixées ?
JE suis en 1.9.3.
Merci d’avance.
Répondre à ce message
Bonjour,
J’ai installé le plugin, et je l’ai configué pour avoir des mot clé sur les auteurs.
Ensuite, j’ai ajouté des mots clé sur des auteurs.
Tout se passe bien. Par contre, dans la partie publique du site, j’ai écrit cette boucle :
[(#NOM)]
Au lieu de renvoyer les auteurs qui ont le mot clé 11, elle me renvoie tous les auteurs du site.
Ai-je oublié quelque chose dans la configuration ?
Ah oui, je suis en spip 1.9.2a avec la version du plugin 0.2 (pr spip 1.9.2)
merci d’avance.
Je continue mes investigations.
Je suis donc passer en mode debug sur mon squelette et regarder le code généré pour cette boucle :
01
Répondre à ce message
tout d’abord merci pour cette contrib.
J’ai installé le plugin de la 1.9.1 ca a l’air de marcher mais je n’arrive pas a attribuer des mots clés aux documents, par exemple moi je veux afficher les 5 documents liés à un article et à qui j’aurai attribuer un mots clé comment faire dans ce cas la ??
autre chose qu’on veut naviguer sur les docments suivant ca arrive sur les articles
et pareil pour ces dernier on peut pas visualiser les articles suivant.
Répondre à ce message
En attendant une mise à jour de la documentation, un petit point par le développeur au 18 oct 2006, extrait de la liste spip-user
Mots-partout est désormais fonctionnel sous Spip 1.9.1, le lien de télechargement indiqué dans l’article à changé
J’ai installé le plugin sur une 1.9.1 [7502], ça marche effectivement nickel dans l’interface privée, par contre dans un squelette je n’arrive pas à obtenir le même résultat avec une boucle tu type :
Le résultat donne tous les auteurs (alors que dans l’interface privé le résultat de la requête est ok : un auteur par mot).
D’après ce que j’ai lu, les boucles doivent s’écrire un peu différemment mais le lien d’exemple ne fonctionne plus, pourrait-on en avoir un autre ?
Merci pour ce plugin magique (quand j’aurais compris comment ça marche)
Bon, j’ai ajouté un peu de code dans la version 1.9.1 du plugin qui permet de faire ce genre de boucle directement. Mets à jour le plugin et reesaie cette boucle, ça devrait marcher.
J’ai mis le plugin à jour depuis ici mais le résultat de la boucle est toujours le même : voir
C’est le bon endroit pour trouver la mise à jour. Mais j’ai oublié de préciser, apres avoir mis à jour les fichiers, il faut retourner sur la page de gestion des plugins pour que SPIP se rende compte qu’il y a eu des changements.
Il faudrait corriger la ligne :
$p=explode(basename(_DIR_PLUGINS).« / »,str_replace(’\’,’/’,realpath(dirname(__FILE__)))) ;
Ce serait préférable !!!
La boucle AUTEURS avec id_mot ne fonctionne toujours pas !!!
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |