SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 321 visiteurs en ce moment

Accueil > Administration et BDD > Gestion des documents > Médiathèque > Utiliser la médiathèque dans vos plugins « objet »

Utiliser la médiathèque dans vos plugins « objet »

2 décembre 2010 – par Guytarr – commentaire

22 votes

Attention, cette contribution est EN CHANTIER : elle n’est peut-être pas fonctionnelle.

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

Certains plugins ajoutant de nouveaux objets utilisent le core de spip pour gérer l’ajout de documents. Médiathèque étant une API de gestion de documents voici quelques astuces pour l’utiliser au mieux sans s’embêter..

/ !\ Avertissement / !\

On documente ici des points d’entrées qui sont suceptibles d’être modifiés lorsque la médiathèque sera intégrée au core pour la prochaine mise à jour majeure de SPIP.
Mais a priori, on pourra toujours le faire, peut-être d’une manière différente, voilà tout. Je tacherai de mettre à jour cette documentation si c’est le cas.

Pré-requis

La 1re chose à faire, c’est de dire à votre plugin qu’il doit utiliser la médiathèque :

  • Soit votre plugin peut fonctionner "en mode dégradé (ie, pas de gestion de documents), vous pouvez indiquez la directive dans votre plugin.xml [1] :
    1. <utilise id="medias" version='[1.5;]'/>
  • Soit c’est essentiel, et votre plugin ne doit pas s’installer sans elle :
    1. <necessite id="medias" version='[1.5;]'/>

Ensuite, pour disposer de la gestion de documents dans votre page d’édition, le plus simple est de nommer votre exec d’edition NomDeVotreObjets_edit.php

Par exemple, avec l’objet patate, il faudra l’appeler patates_edit.php dans le dossier exec de votre plugin. Donc attention au « s », qui permet à spip de déduire le nom de votre objet. Il est toutefois possible d’utiliser un autre nom d’objet si vous déclarez la correspondance entre le nom d’objet et sa table SQL via le pipeline declarer_tables_objets_surnoms.

Par exemple, si votre objet s’appelle hibou, il est probable que sa table sql s’appellera hiboux et non pas hibous. Il suffira alors d’utiliser ce pipeline pour que la mediathèque de la sorte :

  1. function hiboux_declarer_tables_objets_surnoms($surnoms) {
  2. $surnoms['hibou'] = 'hiboux';
  3. return $surnoms;
  4. }

Télécharger

Ainsi, vous pourrez nommer votre page hiboux_edit et médiathèque (ou plutôt la fonction objet_type($table) de spip qu’utilise médiathèque pour obtenir le nom de l’objet) pourra gérer ça très bien.

Un pipeline, une variable dispo dans le contexte global et c’est bon !

Afficher la gestion de documents

Votre plugin devra appeler le pipeline affiche_gauche, et... C’est presque tout. En une ligne supplémentaire, soit pour l’objet patate :

  1. $GLOBALS['medias_exec_colonne_document'][] = 'patates_edit';

Votre plugin délègue la gestion des documents à la médiathèque. Génial non ?

Détecter les documents à lier à l’objet

Spip dispose d’une superbe fonction, marquer_doublons_docs, qui permet de repérer dans un texte ou un chapo les documents qui sont appelés par l’objet via et les liés à l’objet s’il n’y sont pas déjà.
Il suffit d’appeler le pipeline post_edition dans votre plugin, et c’est bon ! Sauf que si votre champ s’appelle descriptif, ça ne fonctionne pas... Eh bien, pour ça aussi, la médiathèque gère pour vous !
Bien sûr, si vous voulez nommer votre champ autrement que chapo ou texte, ça ne fonctionnera pas. Alors, la médiathèque a pensé à vous une fois de plus. En ajoutant :

  1. $GLOBALS['medias_liste_champs'][] = 'descriptif';

La fonction sera chargée également pour les champs descriptif (et ce, quelque soit l’objet). A personnaliser selon les noms de vos champs, mais pour plus de simplicité, utiliser donc chapo et / ou texte !

Récapitulatif

Soit un plugin patates, avec un champ descriptif, qui veut gérer impeccablement les documents : le plugin.xml comporte en plus des autres instructions (si votre fichier de pipeline s’appelle patates_pipeline.php et qu’il se trouve à la racine du plugin et qu’il n’utilise pas déjà les pipelines ci-dessous) :

  1. <pipeline>
  2. <nom>post_edition</nom>
  3. <inclure>patates_pipelines.php</inclure>
  4. </pipeline>
  5. <pipeline>
  6. <nom>affiche_gauche</nom>
  7. <inclure>patates_pipelines.php</inclure>
  8. </pipeline>
  9. <necessite id="medias" version='[1.5;]'/>

Télécharger

Votre fichier patates_pipelines.php comportera :

  1. $GLOBALS['medias_exec_colonne_document'][] = ' patates_edit';
  2. $GLOBALS['medias_liste_champs'][] = 'descriptif';
  3. function patate_post_edition($flux){}
  4. function patate_affiche_gauche($flux){}

Télécharger

Ceci est parfaitement applicable sur pas mal de plugins d’objet. Je l’ai utilisé pour ma part sur Agenda2, et ça m’a bien rendu service ! Vous pouvez voir comment sur la zone dans ce petit plugin qui ajoute en plus des documents la gestion des logos sur les évènements d’Agenda2 docs_logos_agenda2. Pour le moment, il ne les gère qu’une fois qu’ils ont un id_evenement, donc après un premier enregistrement.

Notes

[1c’est à partir de la version 1.3.5 de mediathèque que ce qui va suivre fonctionne, toutefois le plugin mediathèque ayant changé de préfix (anciennement gestdoc, nouvellement medias) nous prendrons la version « medias » soit la 1.5 !

Dernière modification de cette page le 4 octobre 2011

Retour en haut de la page

Vos commentaires

  • Le 29 juillet 2011 à 03:02, par severo En réponse à : Utiliser la médiathèque dans vos plugins « objet »

    Avec SPIP 3.0.0-alpha, pour un plugin avec le prefixe monobjet :

    • dans monobjet_autoriser.php, inserer une fonction :
      1. function autoriser_monobjet_joindredocument_dist($faire, $type, $id, $qui, $opt) {
    • dans la page privé de l’objet (prive/squelettes/contenu/monobjet.html), ajouter :
      1. #PIPELINE{afficher_complement_objet,
      2. #ARRAY{args,#ARRAY{
      3. type,monobjet,
      4. id,#ID_MONOBJET},
      5. data,'<div class="nettoyeur"></div>'}}

      Télécharger

    Et c’est tout : on a accès a l’ajout de documents sur monobjet.

    Attention, pour que ca soit bien propre, dans la fonction de nettoyage de la base de donnée en cas de désinstallation du plugin monobjet, ne pas oublier d’effacer les lignes dans spip_documents_liens :

    1. function monobjet_vider_tables($nom_meta_base_version) {
    2. sql_delete(
    3. 'spip_documents_liens',
    4. 'objet='.sql_quote('monobjet')
    5. );

    Télécharger

    Et sinon, depuis l’espace public on peut utiliser

    • #FORMULAIRE_JOINDRE_DOCUMENT
    • [(#INCLURE{fond=inclure/documents_monobjet,id_monobjet})], en prenant bien soin de creer le fichier de portfolio inclure/documents_monobjet

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Métas +

    3 décembre – 12 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Acces Restreint 3.0

    11 décembre 2008 – 785 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Compositions 2 et 3

    25 mars 2011 – 176 commentaires

    Ce plugin vous permet de définir plusieurs variantes de squelettes (nommées compositions) pour un même type d’objet SPIP. Dans l’espace privé, il est alors possible de choisir, dans un menu déroulant, la composition qu’on veut attribuer à chaque (...)

  • Configurer Sparkpost

    25 avril – 18 commentaires

    N’hésitez pas à relire le préambule de cette rubrique avant de créer un compte sur une plateforme tierce . Présentation Sparkpost est une société d’envoi de mailing https://www.sparkpost.com/ Sur les petits volumes ( <100.000 emails / mois), (...)

  • Mode portail Communiquant pour SoyezCréateurs

    29 septembre 2010 – 21 commentaires

    5e mode d’affichage de la page d’accueil, ce mode se distingue des autres par une animation proposant un fondu/enchaîné des logos des articles à la une. Zonage Configuration Zone d’entête Nom du site Slogan si plugin bandeau présent (...)

Ça spipe par là