Recycler des documents

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Une fois un document associé à un article, il est copié sur le site, mais on ne peut le réutiliser qu’a travers une balise <docXXX|...>. Voici un petit outil qui permet d’associer des documents déjà sur le site à d’autre article, sans les introduire dans le texte.

Motivations

Avec les versions actuelles de SPIP, il est possible d’afficher des documents avec les articles de deux façons :
-  en les attachant à l’article (les documents sont alors juste affiché en bas de l’article [1]),
-  en utilisant les balises <docXXX|...> pour insérer un document directement dans le texte.

Cette dernière méthode permet d’utiliser n’importe quel document, même si il n’est pas à l’origine attaché à l’article. Plusieurs contribs permettent déjà de parcourir tous les documents du site, pour trouver le bon ID.

Malheureusement, il y a des cas où l’on ne veut pas insérer le document dans le texte. Dans ce cas, il n’y a pour l’instant aucun moyen de réutiliser un document déjà sur le site. Il faut alors le re-télécharger et avoir un fichier en double sur le serveur. Si l’on fait cela avec beaucoup de documents, le quota du fournisseur va vite exploser.

Par exemple, sur mon site, je gère une galerie d’image avec le squelette qui suppose que les images à afficher soit associées à l’article, mais pas dans le texte — il n’y a pas de texte à une galerie. Si je veux donc avoir une image dans plusieurs galerie, je dois la télécharger plusieurs fois.

Un deuxième cas est la gestion des traductions. Quand on fait une traduction sur SPIP, on aimerait dans certain cas utiliser les mêmes documents dans chaque langue de l’article. Si ces documents n’ont pas pour but d’être insérés dans le texte, alors on est encore confronté au problème discuté ici.

Solutions

SPIP gère l’association des documents à un article à travers une table mysql très simple :

id_document id_article
234 1
235 1
345 2
... ...

On peut donc facilement associer des documents à des articles en ajoutant une nouvelle ligne :

INSERT INTO spip_documents_articles (id_document, id_article) VALUES ($id_document, $id_article)

Utilisation

Cette nouvelle page s’intègre à l’interface privée de SPIP, vous pouvez y accéder à partir de l’adresse :
votre_site.net/ecrire/associer_document.php
une fois le fichier installé.

L’association se passe en deux temps :

choix des articles

vous devez d’abord choisir l’article où vous voulez prendre les documents et l’article où vous voulez les mettre.

choix des documents

Ensuite, vous choisissez les documents que vous souhaitez associer et validez.

Et VOILA.

ATTENTION

Il faut tout de même faire attention à deux choses :

  1. Les documents sont associés à d’autres articles et peuvent donc être effacé par d’autres personnes. SPIP est fait de tel façon que si l’on efface un document dans un article, il sera effacé dans tous les articles.
  2. Ces autres articles peuvent être mis à la poubelle. Ils ne seront pas physiquement effacés et les documents qui y sont attachés ne seront pas touchés. Vous pouvez donc mettre un article à la poubelle sans que les documents qu’il partage soient enlevés des autres articles.

Notes

[1en fonction du squelette.

Les fichiers fournis en .php3 et .php marchent pour des versions antérieures à la 1.8. Ils ont été testés sur la 1.6, la 1.7 et la 1.7.2. Mais attention, pour ces versions, la contrib ne marche que si il n’y a pas de modification du prefix des tables spip.

La version 1.8 fournie permet d’utiliser la contrib même si on a un autre prefix de tables.

Discussion

5 discussions

  • 2

    Premièrement bravo pour cette magnifique contribution !!!

    Sur la 1.8.3 j’ai utilisé cette contrib en y apportant les modifs mentionnées ci-dessous par thierrybo en août 2005.

    Par contre il me laisse une erreur concernant la variable texte_vignette_document à la ligne 104 du script. Ligne qui doit probablement afficher les vignettes des images.

    Il faudrait donc mettre à jour le fichier avec les modifications ci-dessous et ajuster ce problème à la ligne 104. Penser également à la version 1.9 et le système de plugins car cette contribution est très utile pour les sites en plusieurs langues.

    Moi j’ai simplement effacé cette ligne, cela ne m’a pas permis de voir les vignettes des images que je devais sélectionner mais pas grave il restait leur nom, et ca à marché !!! Merci

    • oui, la fonction d’affichage des vignettes à changer il y a qq temps.

      ça fait longtemps que je n’ai pas utilisé/mis à jour cette contrib.

      je regarderai à la passer en plugin comme certaines autres... j’attend un peu que la 1.9b se stabilise tout de même.

    • Bonjour,

      je viens d’avoir à nouveau besoin de cette contribution, et pour que çà marche sur la 1.8.3 avec affichage de toutes les images en vignettes, faire cette modif :

      Remplacer toutes les lignes de 90 (après le commentaire ’Récupérer le vignette’) à 119 (echo "</div>";) par cette ligne unique :

      echo integre_image($id_document, ’center’, ’IMG’) ;

    Répondre à ce message

  • 2

    Je viens de le tester sur SPIP 1.8.2, et... çà marche !

    Pourtant j’ai quand même cette erreur affichée une fois que je clique VALIDER :

    Warning : array_filter() : The first argument should be an array in h :\pf_normal\httpd\htdocs\spip-v1-8-2\ecrire\inc_abstract_sql.php3 on line 59

    Ce composant s’ajoute, mais ne remplace pas à mon avis le composant qui ajoute le bouton ’Galerie’ à la barre typographique qui lui insère la balise doc.

    Juste une petite remarque, quand l’article source comporte des images en ’images’ jointes et d’autres en ’documents’ (portfolio), sur votre écran, la distinction n’est pas faite, on ne sait plus d’où elles viennent.

    Je préfère quand même l’insertion d’une balise car tant que SPIP ne testera pas, lorsqu’on supprime un document, s’il est encore lié à d’autres (même par une balise ), votre méthode restera très risquée en environnement multi utilisateur (et même si on est seul à éditer les messages).

    Non obstant ma remarque ci-dessus, çà serait parfait si cela était directement intégré à SPIP...

    • Merci pour toutes ces remarques tout à fait pertinantes.

      Quand j’aurais un peu de temps, je ferais une vraie mise à jour de la contrib pour la dernière version de spip.

    • Ah, çà y est, j’ai travaillé dessus et maintenant çà marche avec SPIP 1.8.2. Voici les modifications à apporter :

      152c152
      <   $result2 = spip_abstract_select($select,$from,$where);
      ---
      >   $result2 = spip_abstract_select($select,$from,$where,'',array());
      
      176c176
      <   $result = spip_abstract_select($select,$from,$where);
      ---
      >   $result = spip_abstract_select($select,$from,$where,'',array());
      
      198c198
      <   $res = spip_abstract_select($select,$from,$where);
      ---
      >   $res = spip_abstract_select($select,$from,$where,'',array());
      
      227c227
      < $result = spip_abstract_select($select,$from,$where);
      ---
      > $result = spip_abstract_select($select,$from,$where,'',array());
      
      261c261
      < $order = 'num';
      ---
      > $order[] = 'num';
      
      313c313
      < $result = spip_abstract_select($select,$from,$where);
      ---
      > $result = spip_abstract_select($select,$from,$where,'',array());
      
      335c335
      < $order = 'num';
      ---
      > $order[] = 'num';
      
      398c398
      < $result = spip_abstract_select($select,$from);
      ---
      > $result = spip_abstract_select($select,$from,'','',array());
      
      407c407
      < 	  $result2 = spip_abstract_select($select2,$from2,$where2);
      ---
      > 	  $result2 = spip_abstract_select($select2,$from2,$where2,'',array());
      
      432c432
      < $result = spip_abstract_select($select,$from);
      ---
      > $result = spip_abstract_select($select,$from,'','',array());
      
      443c443
      < $result = spip_abstract_select($select,$from,$where);
      ---
      > $result = spip_abstract_select($select,$from,$where,'',array());

      Par exemple,

      152c152

      signifie remplacer l’ancienne ligne 152 (commençant par

      <

      ) par la nouvelle (commençant pas

      >

      ) à la ligne 152. Les anciennes lignes sont séparées des nouvelles par

      ---

      .

    Répondre à ce message

  • 1

    pas utilisable avec un prefixe de tables différents de spip contrairement à ce qui est dit (il reste des spip_types_documents dans le code par exemple) (le prefixe différent vient de l’installation de plusieurs spip sur la même base).

    • rebonjour, en fait avant de poster le message d’avant je voulais signaler que l’idée était bonne mais peu pratique à l’usage. Sur le site ou je voulais l’utiliser j’ai déjà 300 articles, ce qui ne me semble pas énorme, le choix dans le menu déroulant prend un temps fou.
      J’ai aussi constaté que parfois j’avais l’aperçu des images et parfois non (va comprendre...) mais bon ça on peut s’en sortir. Je vais réfléchir à ces questions pour voir si j’arrive à faire quelque chose pour améliorer l’ergonomie, faut déjà que je lise (et comprenne) le code.

    Répondre à ce message

  • Super...
    mais pourquoi personne ne l’avais fait avant...
    il ne manque plus que la gestions de points évoqués dans « Attention »... et intégrer ce type de gestionnaire en natif dans SPIP

    Répondre à ce message

  • World vtt

    Merci beaucoup pour cette conrib, c’est exactement ce que je cherchais pour mon site world vtt et mobcustom.

    En effet jusqu’à maintenant j’envoyais plusieurs fois des documents identiques.
    ça serait bien d’intégrer un gestionnaire de document sur une prochaine version de spip. Un tel gestionnaire permettrait d’envoyer ses documents puis de les joindre ensuite aux articles concernés.

    Qu’est ce que vous en pensez ?

    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