Des mots clefs partout

Voici une nouvelle interface pour ajouter des mots clefs sur les tables spip que l’on veut.

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.

archive d’installation SPIP 1.8

pour les versions 1.8.2, il faut télécharger les fichiers disponibles ici puis les installer comme indiquer ci dessous.

Installation

  1. décompresser l’archive,
  2. placer mots_partout.php dans le répertoire ecrire,
  3. 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 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/

Discussion

37 discussions

  • 9

    Ça ne marche pas ici :
    installation spip 1.8.1, extensions .php3 installé en local sur mac os X panther.

    fait :
    -  ajouté la table spip_mot_document - qui exsitait déjà
    -  modifié mes_fonctions.php3 comme indiqué
    -  modifié la table spip_group_mots deux fois
    -  téléchargé le gz et installé les fichiers

    Mais dans la partie écrire du site, aucun choix n’aparaît pour les documents ; pas de jolie interface pour ajouter des mot-clés aux documents.

    Que faire ? Installer spip en version php ? Transférer le php de la contrib en php3 ? Ajouter - comme mentionné ensuite - des attributs à mes_option.php3 ?

    Je suis nouveau sur spip et php et je ne comprends pas toutes les subtilités de cette contrib. Mais elle à l’air fabuleuse.

    De l’aide.

    • Il faut aller sur la page ecrire/mots_partout.php pour voir l’interface. Il n’y a pas de lien depuis l’interface « normale » de spip pour ne pas modifier le code source de SPIP.

    • antoine

      merci, mais j’obtiens une page blanche !

      Pas de crash, pas de message d’erreur. Rien.

    • bien, il y a clairement une erreur quelque part.

      est que dans ton fichier de logs (probablement /var/log/httpd/error_log) il y a des choses suspectes (error) ?

    • antoine

      Mortimer,

      après plusieurs spip réinstallations je n’obtiens toujours rien (page blanche) quand je vais sur la page ecrire/mots_partout.php sur plusieurs installations de spip. Pour information, voici les erreurs que j’obtiens :

      -  en ligne :

      Fatal error: Cannot redeclare class link in /xxxxxxx/public_html/spip/ecrire/inc_version.php3 on line 0

      -  et en local sur mac os x, PHP Version 5.0.4
      (www.entropy.ch Release 1) dans /var/log/httpd/error.log :

      PHP Fatal error:  Cannot redeclare define_once() (previously declared in /Users/xxxxx/Sites/spip/ecrire/inc_version.php3:19) in /Users/xxxxx/Sites/spip/ecrire/inc_version.php3 on line 21

      J’espère que cela pourra t’aider.
      Je souhaite être le seul à être affecté par ce problème.
      Merci en tout cas pour ton travail.

    • Bon, c’est pas normal. Enfin, essais d’enlever la ligne :

      include_ecrire ("inc_version.php3");

      tout au début du fichier mots_partout.php pour voir si ça va mieux après.

    • J’avais le même problème en local avec OSX.4 Tiger et c’est résolu en enlevant la ligne. Par contre, pour Spip 1.8.2.d, j’ai pris mots_partout.php disponible ici :
      http://zone.spip.org/trac/spip-zone/file/_contribs_/_ecrire_/mots_partout/trunk/mots_partout.php?rev=765&format=raw
      puisqu’on m’avait dit de le faire…
      Il ne reste plus qu’à tester.

    • Essai peut être la version dans :
      http://zone.spip.org/trac/spip-zone...

      celle du trunk devrait marcher, mais il y a des « fonctionalités » encore très alpha :D

    • Effectivement la version précédente ne fonctionne pas et le lien ci-dessus est inaccessible (message d’erreur) « Ooops etc. »

    Répondre à ce message

  • 1

    Votre contrib semble être ce que je cherchais (?)

    Attribuer 20 ou 30 mots clefs à une brève prend plus de temps que la rédaction d’icelle, si l’on utilise les menus déroulants (4 clics pour ajouter un mot, plus la lecture du menu déroulant, plus carrément inutilisable si on a « trop » de mots dans une catégorie !). C’est un vrai pensum.

    Maintenant, s’il faut que j’apprenne MsSQL... :((

    Alors, comme je ne suis pas sûr de tout avoir compris, si je me passe (hélas) de mettre des mots clefs partout (uniquement brèves et articles), est-ce que je peux me contenter d’ajouter les .php3 dans ./ecrire et ne pas toucher aux tables ?

    Merci...

    • non, pas besoin de creer les tables pour les éléments spip qui prennent déjà des mots, je sais juste plus si l’affichage est implémenté pour les brèves, mais rien de grâve en tout cas, tu peux tjs t’en sortir avec l’id au pire :-/.

      remarque que la version « stable » sur la zone prend une option dans l’url (?install=oui) qui crée les tables suplémentaires (donc pour les éléments qui ne prennent pas par défaut de mots) tout seul, à peut pret correctement.

    Répondre à ce message

  • Fabuleux, génial, fantastique, excellent, sensationnel... un gain de temps exceptionnel...

    je devais rajouter des dizaine qe mots clés sur mes articles (soit une centaine)... je commençais à galèrer a ajouter les mots clés un par un sur chaque article qd je suis tombé sur cette contrib... Inutile de vous dire que tout mes mot clés sont maintenant a jouté... el tout en 2 minutes...

    si c’est pas génial...

    vous venez de sauver ma soirée...

    arnold

    Répondre à ce message

  • 2

    Bonjour,

    après une installation de SPIP 1.8.1 d et de la version de la contrib depuis la zone (version du 24 juillet), la page mots_partout.php affiche les raccourcis comme mots_partout:enlever au lieu de l’équivalent du raccourci.

    Y a-t-il une manipulation particulière à effectuer en plus de copier les trois fichiers de langue dans ecrire/lang ?

    • il faut peut être les renomer en « .php3 » au lieu de « .php ».

      c’est peut être cela qui pose le problème.

    • Merci pour tout,

      c’était exactement ça.

      Cordialement,

    Répondre à ce message

  • 3

    Salut,
    cette magnifique contrib ne marche malheureusement plus avec la CVS.
    Voici les 2 modifs à faire (j’ai pas les lignes, j’ai modifié le haut du fichier) :
    -  order est maintenant un tableau :

    (recherche des choses.)
    -  $order = '';
    +  $order = array();
    ...
    - $order = 'tot DESC';
    + $order = array('tot DESC');
    ...
    - $order = 'tot DESC';
    + $order = array('tot DESC');
    ...
    // affichage de mots clefs.
    $select = array('*');
    $from = array('spip_groupes_mots');
    - $order = 'titre';
    + $order = array('titre');

    -  les noms des colonnes ont changé dans spip_groupes_mots (0minirezo=>minirezo et 1comite=>comite) :

    while ($row_groupes = spip_abstract_fetch($result_groupes)) {
      $id_groupe = $row_groupes['id_groupe'];
      $titre_groupe = typo($row_groupes['titre']);
      $unseul = $row_groupes['unseul'];
    -  $acces_admin =  $row_groupes['0minirezo'];
    -  $acces_redacteur = $row_groupes['1comite'];
    +  $acces_admin =  $row_groupes['minirezo'];
    +  $acces_redacteur = $row_groupes['comite'];
    • J’ai failli oublier : merci pour cette contrib geniale !

      J’essayerais bien de la generaliser à toute relation n->n (remplacer mots par $machin), qu’en penses tu ?

    • Salut,

      merci pour les modifs, il faudrait les passer sur la zone (le projet y est)

      effectivement, on pourrait avoir des tables $truc_$chose (comme par exemple l’histoire des liens qui se discutent sur la zone), j’y avais pensé, mais c’est pas dans mes priorités.

      Enfin c’est sur la zone, qui est ouverte à tous pour participer, tu es le bienvenu !

    • Héhéhé, tu l’as déplacé et je ne l’avais pas vu.

      Comme je l’ai modifié depuis son ancienne place, il m’annoncait un conflit et la suppression en face.

      OK, je fais la modif sur le SVN.

    Répondre à ce message

  • 1

    Bonjour,
    cette contribution a l’air pleine de promesses. Je cherchais une solution pour un système de mots-clés sur les auteurs. Je vais donc essayer vitre contribution sur mon prochain site cet été. Cependant, votre présentation ne spécifie pas comment utiliser les mots clés générés dans les squelettes. Est-il nécessaire d’avoir recours aux requêtes SQL en PHP dans le squelette ou bien la déclaration réalisée dans mes_fonctions.php3 permet-elle de réalisée une boucle auteurs avec le critère id_mot ?

    En vous remerciant par avance pour votre réponse,

    Répondre à ce message

  • Bonjour,

    La contrib a l’air sérieuse … Les possibilités intéressantes …
    Beau travail.

    @lexandre

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom