SPIP-Contrib

SPIP-Contrib

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

289 Plugins, 197 contribs sur SPIP-Zone, 104 visiteurs en ce moment

Accueil > Rédaction > Rôles sur les liaisons entre objets > Rôles de documents > Rôles de documents

Rôles de documents

21 février 2018 – par Matthieu Marcillaud, RastaPopoulos, tcharlss, touti – 24 commentaires

17 votes

Ce plugin permet d’attribuer un rôle aux documents liés aux contenus, et cerise sur le gâteau, rend possible la gestion des logos par le biais des documents-joints.

Principe

Les documents liés aux contenus n’ont pas forcément tous la même fonction, il est parfois utile de distinguer le rôle de chaque document : à quoi sert-il ? Quel est son sens ?

Prenons un exemple concret : pour une librairie nous avons un objet éditorial « livre », chaque livre doît être accompagné de sa couverture (le logo), du 4e de couverture, et d’une série d’extraits.
Le squelette correspondant a besoin d´afficher ces images en des endroits particuliers, il faut donc un moyen de les identifier dans des boucles différentes : c’est possible au moyen des rôles.

Rôles de documents : principe

Utilisation

La gestion des rôles s´effectue sur place, dans la liste des documents liés aux contenus.
Un même document peut avoir plusieurs rôles.
Le rôle attribué par défaut est le rôle générique « document ».

Modification des rôles d´un document

Gestion des logos

Le plugin fournit 2 rôles supplémentaires : « logo » et « logo de survol ».
Il est donc possible de s’affranchir de la gestion historique des logos et de profiter des avantages des documents : vous pouvez leur donner un titre, un descriptif, des crédits, les réutiliser, les faire pivoter, etc.

Les balises #LOGO_XXX voient leur fonctionnement étendu : si aucun logo « historique » n´est présent, elles vont chercher un document avec le rôle de logo .

Dans la médiathèque, un nouvel onglet permet de visualiser les documents avec le rôle de logo :

NB — Le plugin Logos par rôle va plus loin en remplaçant complètement la gestion des logos par celles des rôles de documents, le formulaire des logos est entièrement remplacé.

NB 2 — La roadmap de la prochaine version de SPIP (3.3) prévoit que les logos soient gérés via la table spip_documents.

Intégration dans les squelettes

Par défaut les boucles DOCUMENTS ressortent tous les rôles, même les logos : il faut les exclure explicitement si besoin.
Il est possible d’utiliser les critères {role} et {par role}.

Exemples :

Filtrer les documents par rôle :

  1. <BOUCLE_docs(DOCUMENTS documents_liens) {id_article} {role = bandeau}>
  2. #LOGO_DOCUMENT
  3. </BOUCLE_docs>

Télécharger

Trier les documents par roles puis par titre :

  1. <BOUCLE_docs(DOCUMENTS) {id_article} {par role,titre} >
  2. #LOGO_DOCUMENT
  3. </BOUCLE_docs>

Télécharger

Afficher les rôles d´un document :

  1. <BOUCLE_docs(DOCUMENTS) {id_article}>
  2. #TITRE
  3. Rôle(s) :
  4. <BOUCLE_roles(documents_liens){id_document}{objet}{id_objet}{par role}{role!=''}{", "}>[(#ROLE|role{documents})]</BOUCLE_roles>
  5. </BOUCLE_docs>

Télécharger

Déclarer de nouveaux rôles

La déclaration de nouveaux rôles s´opère au moyen du pipeline declarer_tables_objets_sql : il faut renseigner les 2 clés roles_titre et roles_objets de la table spip_documents, cf. documentation de l’API des rôles.

Si nous voulions par exemple ajouter 3 rôles pour un objet éditorial « livre » :

  1. function monplugin_declarer_tables_objets_sql($tables){
  2.  
  3.         /* On liste les nouveaux roles à utiliser pour un objet 'livre' */
  4.         $nouveaux_roles_titres = array(
  5.                 'couverture'  => 'monplugin:role_couverture',
  6.                 '4couverture'  => 'monplugin:role_4couverture',
  7.                 'extrait' => 'monplugin:role_extrait'
  8.         );
  9.         $nouveaux_roles_objets = array(
  10.                 'livres' => array(
  11.                         'choix' =>  array_keys($nouveaux_roles_titres),
  12.                         'defaut' => ''
  13.                 )
  14.         );
  15.  
  16.         /* On récupère les rôles actuels */
  17.         $anciens_roles_titres = is_array($tables['spip_documents']['roles_titres']) ? $tables['spip_documents']['roles_titres'] : array();
  18.         $anciens_roles_objets = is_array($tables['spip_documents']['roles_objets']) ? $tables['spip_documents']['roles_objets'] : array();
  19.  
  20.         /* On mélange le tout */
  21.         $roles_titres = array_merge($nouveaux_roles_titres, $anciens_roles_titres);
  22.         $roles_objets = array_merge($nouveaux_roles_objets, $anciens_roles_objets);
  23.         array_set_merge($tables, 'spip_documents', array(
  24.                 "roles_titres" => $roles_titres,
  25.                 "roles_objets" => $roles_objets
  26.         ));
  27.  
  28.         return $tables;
  29. }

Télécharger

Limitations

l´API des rôles ne permet pour l´instant pas de limiter le nombre de rôles utilisés pour un objet.
Il est impossible de dire qu´un rôle « logo » ne peut être utilisé qu´une seule fois pour un contenu, par conséquent c´est aux rédacteurs à veiller à ne l´attribuer qu´une fois.

Voir en ligne : https://plugins.spip.net/roles_documents

Dernière modification de cette page le 7 avril 2018

Retour en haut de la page

Vos commentaires

  • Le 24 février à 03:15, par philooo En réponse à : Rôles de documents

    C’est interessant, mais quel est l’interet de cette solution par rapport a l’utilisation d’un plugin comme mots cle partout, qui associe des mots cle aux documents ?

    c’est un peu le meme system, non ?

    • Le 24 février à 10:22, par RastaPopoulos En réponse à : Rôles de documents

      Euh ça n’a strictement, mais alors strictement aucun rapport.

      Le principe des rôles que ce soit pour les documents, auteurs, ou n’importe quoi, c’est d’être dans les liaisons. Un document n’EST pas « un logo » tout court, un document est un logo pour TEL contenu sur lequel il est lié et pas pour tel autre.

    • Le 6 mars à 13:22, par Eric En réponse à : Rôles de documents

      J’ai le message suivant qui apparaît dans l’interface privée, dans accueil...

      Erreur SQL 1054
      Unknown column 'liens.role' in 'field list'
      SELECT fichier, extension, titre, maj, liens.id_document, liens.role FROM spip_documents AS docs INNER JOIN spip_documents_liens AS liens ON liens.id_document = docs.id_document WHERE objet = 'site_spip' AND id_objet = -1 AND role = 'logo' AND ((role IN ('logo','logo_survol')))

      Spip 3.2[23778]

      Une idée d’où le problème pourrait provenir ?... C’est la première fois que j’essaie ce plugin, j’ai installé également le plugin « des rôles sur des liens »
      Merci.

    • Le 6 mars à 13:58, par tcharlss En réponse à : Rôles de documents

      Comment l’as tu installé ? Parce qu’apparemment tu utilises la version en développement (et donc ce genre d’erreurs peuvent arriver).
      Est-ce qu’il y a bien une colonne « role » sur la table spip_documents_liens ?

    • Le 6 mars à 14:43, par Eric En réponse à : Rôles de documents

      Bonjour Tcharlss, je l’ai installé en téléchargeant les plugins à partir de ’https://files.spip.net/spip-zone/roles_documents_v1.zip’ et de ’https://files.spip.net/spip-zone/roles.zip’ que j’ai installé à l’habitude dans ’plugins/auto’...

      Et non, la table ’spip_roles’ n’a pas été créée. :-(

    • Le 6 mars à 15:03, par tcharlss En réponse à : Rôles de documents

      C’est bizarre ça, le zip prend la version stable normalement. Peux-être as-tu récupéré le zip exactement au moment où on a changé la source ? Mais c’est très improbable quand même.
      Tu peux regarder le numéro de ta version installée stp ?

      Sinon je ne parlais pas de la table spip_roles, mais de spip_documents_liens, il doit y avoir une colonne qui s’appelle ’role’ dedans (à vérifier).

    • Le 6 mars à 15:15, par Eric En réponse à : Rôles de documents

      Ok, voici la version

      <revision>109163</revision>
      <commit>2018-02-26 19:36:24 +0100 </commit>

      Et non, pas de champ role dans la table spip_documents_liens.

      De plus, je n’ai plus accès au documents dans la médiathèque. Dans les articles, le bouton modifier existe mais je n’ai pas de liste dans la zone de liste déroulante.

    • Le 6 mars à 16:43, par tcharlss En réponse à : Rôles de documents

      Le numéro de commit que tu indiques correspond à la version stable (1.1.8), mais l’erreur renvoie à du code présent uniquement dans la version de dev. Je suis perplexe :)

      Je te conseille de désinstaller ta version actuelle, et de réinstaller la version 1.1.8 stable (lien en haut de la page)

    • Le 7 mars à 10:18, par Eric En réponse à : Rôles de documents

      Bonjour tcharlss...
      J’ai désinstallé et réinstallé....
      Mais j’ai toujours le même problème, et la table spip_documents_liens n’a toujours pas sa colonne ’role’.

      Message squelette boucle Ligne
      Erreur SQL 1054
      Unknown column ’l.role’ in ’where clause’
      SELECT fichier, extension FROM spip_documents as d inner join spip_documents_liens as l on d.id_document = l.id_document WHERE l.objet = ’site’ AND l.id_objet = 0 AND ((extension IN (’png’,’jpg’,’gif’))) AND l.role=’logo_survol’ ORDER BY 0+titre, titre
      D :\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\my portable files\spip-3.2\plugins\auto\roles_documents\roles_documents_pipelines.php roles_documents_quete_logo_objet() sql_fetsel() ; 199

      Il y a une ligne du tableau pour chaque documents référencé...

      Je n’y comprends rien...

    • Le 7 mars à 10:55, par tcharlss En réponse à : Rôles de documents

      Je n’y comprends rien...

      Moi non plus :) Mais on va trouver.

      C’est donc signe d’un problème à l’installation, il y a peut-être une trace de l’erreur dans les logs. Peux-tu regarder dans tmp/log/maj.log et tmp/log/mysql.log (ou sqlite.log) ? En recherchant des occurences de ’role’ et ’spip_documents_liens’.

      Est-ce que tu peux également essayer d’installer le plugin roles d’auteurs et regarder si la colonne ’role’ est ajoutée à la table ’spip_auteurs’ ?

    • Le 7 mars à 11:40, par Eric En réponse à : Rôles de documents

      Ok, voilà les résultats...
      maj.log, pas de références à roles_documents mais bien à roles_auteurs
      mysql.log,

      2018-03-07 11:13:26 127.0.0.1 (pid 10876) :Pri:ERREUR : Erreur 1068 de mysql : Multiple primary key defined
      in D :\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\my portable files\spip-3.2\ecrire\base\upgrade.php L462 [call_user_func_array(),serie_alter(),maj_while(),maj_plugin(),roles_auteurs_upgrade(),spip_plugin_install(),plugins_installer_dist(),installer_plugin(),do_install(),do_action(),one_action(),action_actionner_dist(),traiter_appels_actions()]
      ALTER TABLE `base`.spip_auteurs_liens ADD PRIMARY KEY (id_auteur,id_objet,objet,role)
      2018-03-07 11:25:41 127.0.0.1 (pid 10876) :Pri:ERREUR : Erreur 1054 de mysql : Unknown column ’l.role’ in ’where clause’
      in D :\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\my portable files\spip-3.2\plugins\auto\roles_documents\roles_documents_pipelines.php L199 [sql_fetsel(),roles_documents_quete_logo_objet(),call_user_func(),minipipe(),execute_pipeline_quete_logo_objet(),pipeline(),quete_logo_objet(),quete_logo(),html_5e979d1d3af38d78a8f3e4e306debbee(),public_parametrer_dist(),public_produire_page_dist(),inclure_page(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),include()]
      SELECT fichier, extension
      FROM `base`.spip_documents as d inner join `base`.spip_documents_liens as l on d.id_document = l.id_document
      WHERE l.objet = ’site’
      	AND l.id_objet = 0
      	AND ((extension  IN (’png’,’jpg’,’gif’)))
      	AND l.role=’logo_survol’
      ORDER BY 0+titre, titre

      J’espère que ça aidera....

    • Le 7 mars à 14:28, par Eric En réponse à : Rôles de documents

      Bon, finalement, je vais utiliser les mots clés sur les documents... Ce sera plus simple à mon sens.

    • Le 7 mars à 14:32, par RastaPopoulos En réponse à : Rôles de documents

      Ah non, clairement ça ne sera pas plus simple à l’utilisation et à la maintenance…

      Faut déjà bien avoir tout à jour et comprendre pourquoi juste toi tu as une merdouille à l’installation, sinon impossible à corriger (vu qu’on ne reproduit pas pour le moment).

    • Le 7 mars à 14:56, par Eric En réponse à : Rôles de documents

      Oui, je comprends mais je dois aussi avancer sur mon projet... Bien, est-il possible que ce soit parce que je travaille en local avec easyphp que la table ne s’inscrit pas ? Version PHP/5.5.8...

    • Le 7 mars à 17:08, par tcharlss En réponse à : Rôles de documents

      Ben si le problème se présente sur le plugin rôle d’auteur aussi (colonne ’role’ absente), ça montre qu’il y a un souci plus généralisé, pas juste sur rôles de documents. (Mais on sait pas, tu n’as pas répondu sur ce point :p)

    • Le 7 mars à 17:29, par tcharlss En réponse à : Rôles de documents

      Erreur 1068 de mysql : Multiple primary key defined

      Ah voilà, ça vient de là. Merci, je vais regarder de plus près.

    • Le 8 mars à 09:14, par Eric En réponse à : Rôles de documents

      Pour info, la colonne ’role’ dans la table spip_auteurs_liens est bien présente, j’avais omis de le mentionner :-D

      Merci pour le travaille de fouille...

    • Le 8 mars à 09:53, par Eric En réponse à : Rôles de documents

      il y a aussi cette erreur...

      Erreur 1068 de mysql : Multiple primary key defined

    Répondre à ce message

  • Le 22 février à 19:37, par graphie En réponse à : Rôles de documents

    Bonjour,

    Oh c’est bien joli cet outil : merci beaucoup ;-)))

    Les logos du site (siteon0 et siteoff0) ne sont pas compris dans cette revisitation de la gestion documents/logos via rôles : c’est à venir ou pas ?

    J’entends par là que l’on pourrait associer des documents de la médiathèque comme logos et/ou document à l’identité du site : donc 2, 3, 4,... potentiels logos pour les affichages RWD, par exemple.

    Merci,
    françois

    • Le 22 février à 20:57, par RastaPopoulos En réponse à : Rôles de documents

      Ce serait bien, mais comme expliqué il s’agit juste de documents liés à tel ou tel contenu. Or « le site » ce n’est pas un contenu, un objet SPIP, donc ya pas de liaison à faire. C’est un cas particulier et pour l’instant je ne sais pas comment ce pourrait être géré.

    • Le 23 février à 10:37, par tcharlss En réponse à : Rôles de documents

      Je crois que le plugin Logo par rôle le permet.

      Bon après, il y a une partie de ses fonctionnalités que je voulais mettre depuis le début dans rôles de documents (surtout la surcharge du formulaire d’édition de logo).
      Donc à terme, les 2 pourraient en partie être fusionnés, il faut qu’on en discute avec son auteur.

    • Le 23 février à 11:17, par graphie En réponse à : Rôles de documents

      En parlant de fusion, la possibilité d’ajouter des fichiers SVG pour les logos est très appréciable et rendue possible avec Logo SVG ;-)

    • Le 23 février à 11:51, par RastaPopoulos En réponse à : Rôles de documents

      Bah ya pas besoin puisque là justement on utilise les documents joints, donc on peut y mettre n’importe quel type de fichier, dont SVG évidemment. Le but c’est vraiment de supprimer totalement la gestion des anciens logos qui n’a plus du tout lieu d’être, et tout centraler avec spip_documents, une seule manière de gérer (et pouvoir réutiliser etc).

      @tcharlss oui pour la fusion totalement pour ce qui est de surcharger le formulaire de logo dans la colonne (en restant compatible avec bigup). Le reste c’est pour moi un sujet différent, et qui d’ailleurs ne devrait pas s’appeler « logo par rôle ». C’est plus une « configuration des rôles » plus précises, et d’ailleurs je vois pas pourquoi spécialement pour « logo », surtout que comme déjà évoqué à plusieurs réunion, ce terme de « logo » ne veut rien dire et ya plein de gens hors SPIP qui ne comprennent pas quand ils découvrent (c’est plutôt « image principale » ou ce genre de terme).

    • Le 23 février à 13:51, par graphie En réponse à : Rôles de documents

      Yes, but, pour le(s) logo(s) de site, on ne peut pas « y mettre n’importe quel type de fichier », d’où la question de peut-être revoir la gestion du logo site comme un spip_document et pour le coup, effectivement, ne pas avoir besoin d’une gestion SVG dédiée aux logos.

    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

  • Convertir un site SPIP 3 en utf-8 avec le plugin Grenier

    8 janvier 2014 – 21 commentaires

    SPIP 3 fonctionne nativement avec l’encodage universel unicode utf-8. Sur certains sites (par exemple sur une mise à jour), on peut avoir un site qui est resté en iso-latin ce qui n’est pas conseillé (source de bugs, d’incompatibilité, ...) . (...)

  • Twitter

    17 juin 2013 – 88 commentaires

    Un plugin qui facilite l’intégration de Twitter dans un site SPIP et permet : d’envoyer facilement des messages avec un ou plusieurs comptes Twitter d’afficher des Widgets standards dans le site public (qui respectent la vie privée des visiteurs) (...)

  • Story (HTML5UP)

    17 mai – 11 commentaires

    Squelette SPIP "onepage" pour intégrer le thème Story de HTML5UP https://html5up.net/story Ce squelette permet de réaliser très simplement des sites de type "one page" sans toucher une ligne de code. Site de démonstration Installation A (...)

  • Le Couteau Suisse

    4 mai 2007 – 1848 commentaires

    Ce plugin propose d’introduire facilement de simples fonctionnalités supplémentaires à SPIP et qui s’avèrent rapidement indispensables ! Par exemple : le contrôle de nombreuses variables « cachées » de SPIP, des améliorations ou facilités typographiques, (...)

  • LIM : alléger l’espace privé

    20 avril 2015 – 45 commentaires

    Ce plugin permet de désactiver l’affichage de blocs ou de boutons, présents par défaut dans SPIP mais qui peuvent devenir inutiles dans le cadre de votre projet. Il allège du coup l’interface d’édition et supprime d’éventuels risques de confusion dans (...)