Rôles de documents

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 4ème 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
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
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 :

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

Trier les documents par roles puis par titre :

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

Afficher les rôles d´un document :

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

Déclarer de nouveaux rôles

Tout est expliqué dans la documentation de l’API des rôles, mais reprenons les grandes lignes avec quelques exemples.

Les rôles se manipulent au moyen du pipeline declarer_tables_objets_sql.
Les 2 clés roles_titres et roles_objets permettent d’indiquer les chaînes de langues des nouveaux rôles, ainsi que les rôles possibles pour chaque type d’objet éditorial.

La clé roles_objets est un tableau associatif, vous avez donc la possibilité d’ajouter des valeurs à celles existantes, ou bien de remplacer complètement certaines entrées.

Gardez également bien en tête les priorités de l’API des rôles : il y a des rôles déclarés par défaut pour tous les objets, et optionnellement des rôles pour chaque type d’objet, ces derniers sont pris en priorité.
Le plugin ne déclare que les rôles par défaut pour tous les objets, dès que vous ajoutez des rôles pour un type d’objet en particulier, ils prendront le dessus, dans ce cas pensez à inclure le rôle « logo ».

Voici quelques exemples :

1) Compléter les rôles par défaut

On veut ajouter des rôles à tous les objets, tout en conservant ceux déclarés par le plugin : on fait un merge.

function monplugin_declarer_tables_objets_sql($tables){
 
  $tables['spip_documents'] = array_merge_recursive(
    $tables['spip_documents'],
    array(
      'roles_titres' => array(
        'alpha' => 'monplugin:role_alpha',
        'beta'  => 'monplugin:role_beta'
      ),
      'roles_objets' => array(
        '*' => array(
          'choix' => array('alpha', 'beta'),
        ),
      ),
    )
  );
 
  return $tables;
}

2) Remplacer complètement les rôles par défaut

On veut avoir complètement la main sur les rôles, pas de merge.
Dans ce cas, il faut penser à mettre le rôle « logo », et indiquer le choix par défaut.

function monplugin_declarer_tables_objets_sql($tables){
 
  $tables['spip_documents']['roles_titres'] = array(
    'alpha' => 'monplugin:role_alpha',
    'beta'    => 'monplugin:role_beta'
  );
  $tables['spip_documents']['roles_objets'] = array(
    '*' => array(
      'choix'  => array('logo','alpha', 'beta'),
      'defaut' => 'alpha',
    ),
  );
 
  return $tables;
}

3) Avec des rôles par types d’objets

Un dernier exemple pour ajouter des rôles aux articles et aux brèves, tout en conservant les rôles par défaut pour les autres types d’objets.
Là on fait un merge pour garder la clé '*', et ajouter 2 clés 'articles' et 'breves'.
Comme dans l’exemple précédent, pour ces 2 objets il faut remettre le rôle « logo » et le choix par défaut.

$tables['spip_documents'] = array_merge_recursive(
  $tables['spip_documents'],
  array(
    'roles_titres' => array(
      'alpha'  => 'monplugin:role_alpha',
      'beta'   => 'monplugin:role_beta',
    ),
    'roles_objets' => array(
      'articles' => array(
        'choix' => array('document', 'logo', 'alpha'),
        'defaut' => 'document',
      ),
      'breves' => array(
        'choix' => array('document', 'logo', 'beta'),
        'defaut' => 'document',
      ),
    ),
  )
);

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.

Portfolio

updated on 2 October 2019

Discussion

11 discussions

  • 1

    Bonjour,

    Est-ce que Rôles de documents sera compatible avec SPIP 3.3 ?
    En local je constate qu’avec SPIP 3.3.0-dev le menu de choix du rôle ne se déplie pas. À moins que ce ne soit un souci avec Chosen ?

    Merci,
    françois

    • Ça le sera forcément plus tard mais pour l’instant ce n’est pas du tout le cas et il ne faut pas essayer de l’utiliser avec (sauf pour dev pour aider à en faire une branche compatible :p). Il y a plein de changement des images avec les nouveaux logos en documents, et donc il y a possiblement pas mal de choses à revoir.

    Reply to this message

  • 18

    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 ?

    • 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.

    • 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.

    • 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 ?

    • 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. :-(

    • 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).

    • 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 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)

    • 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...

    • 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’ ?

    • 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....

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

    • 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).

    • 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...

    • 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)

    • Erreur 1068 de mysql : Multiple primary key defined

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

    • 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...

    • il y a aussi cette erreur...

      Erreur 1068 de mysql : Multiple primary key defined
    • J’ai eu le même soucis
      l’installation de roles_auteurs a réglé le problème

    Reply to this message

  • Bonjour et merci pour ce plugin,

    j’utilise celui-ci avec “logo par role” et “logo svg” pour proposer aux administrateurs d’un site une base de logo svg pour illustrer des articles.

    Puisque ce plugin modifie la médiathèque en surchargeant :

    • prive/squelettes/inclure/mediatheque-galerie
    • prive/squelettes/inclure/mediatheque-choisir

    Serait-il possible de rendre visibles les logos svg de document, en modifiant, par exemple, le code ligne 94 de mediatheque_galerie par :

    [(#MEDIA|=={image}|oui|et{#EXTENSION|=={svg}|non})[
    	<a href="#URL_DOCUMENT" type="#MIME_TYPE"[ title="(#GET{fichier})"]>(#LOGO_DOCUMENT{apercu,250,70}|inserer_attribut{alt,[(#TITRE|couper{60}|texte_backend)]})</a>
    ]]
    [(#EXTENSION|=={svg}|oui)[
    	<a href="#URL_DOCUMENT" type="#MIME_TYPE"[ title="(#GET{fichier})"]>
    		<img src="(#URL_DOCUMENT)"[  alt="(#TITRE|couper{60}|texte_backend)"] height="70" />
    	</a>
    ]]

    Reply to this message

  • Bonjour, je poste ici ne sachant pas vraiment quel est le meilleur lieu, pour la suggestion suivante : pouvoir sélectionner la vignette d’un logo (je dis bien, la vignette, ie. l’encart tout en bas du formulaire “Editer le logo”) via la Médiathèque, en plus de ce qui est proposé actuellement (au choix depuis l’ordinateur ou depuis internet). Ce serait super d’avoir l’option “depuis la médiathèque” de façon à éviter un enregistrement préalable sur son ordinateur d’un document qui est déjà dans la Médiathèque. Je crois que cela hérite de la fonctionnalité historique des Logos, et n’est peut-être pas (encore) implémenté. Si c’est possible avec des versions récentes de plugins, je remercie d’avance le contributeur de me l’indiquer! Sinon, les plugins “rôles de document” et “logos par rôle” sont vraiment super, merci.

    Reply to this message

  • 3

    hello, j’utilisais le téléchargement de documents en public de la manière suivante
    <INCLURE{fond=plugins-dist/medias/prive/objets/editer/colonne_document,objet=article,id_objet=#ID_ARTICLE,env} />
    avec roles de documents activé, le rechargement ajax du bloc documents ne fonctionne plus mais mouline, y a t’il une syntaxe particuliçre pour telecharger un doc en public? merci

    • hello,
      quelle version ?

    • testé les deux versions disponibles 1.1.8 et 1.2.23 SPIP 3.2.3 [24211]
      notes que l’upload du fichier fonctionne, c’est le rechargement ajax qui pouiche

      aussi la désinstallation du plugin ne se passe pas bien, après vidage des caches, j’ai une erreur à la suppression d’un doc, il cherche toujours action/dissocier_document_role

    • erratum : la désinstallation se passe bien, en vidant bien le cache navigateur...

    Reply to this message

  • 9
    Liberté

    Bonjour,

    J’espère que je frappe à la bonne porte.

    Sous Spip 3.2.3
    Lors de la rédaction ou la modification d’un article, je n’ai plus la proposition d’ajouter un logo (chez moi sur la colonne de gauche).

    Par contre, j’ai le choix (chez moi sous l’article) d’utiliser en tant que logo, une photo déjà publiée dans cet article. J’ai cliqué et c’est une autre image qui est devenue le logo.

    Où puis-je chercher?

    • Tu as bien la fonctionnalité des logos activés dans la config du site (Configuration => Contenu) ?

    • liberté

      Merci pour ta réponse.
      J’avais uniquement uniquement utiliser les logos d’activé.
      J’ai autorisé les logos de survol et j’ai maintenant la proposition d’ajouter un logo a gauche.
      C’est quand même curieux.

    • Euh oui ce n’est pas normal, et je ne reproduis pas. Ça te fait pareil sur un site sans aucun plugin à part Rôles de doc et ses dépendances ?

    • Liberté

      Je ne savais quels étaient les dépendances (à indiquer dans contrib?). J’ai donc tout coché et décoché uniquement Rôles de documents. Puis j’ai désactivé tout ce qui était coché. Rôles de documents a été désactivé lui aussi.
      J’ai donc réactivé Rôles de documents , ce qui a activé Chosen et Rôles. J’ai décoché la gestion des logos par survol et tout marchait bien … J’ai alors réactivé Logos par rôle et le problème est réapparu (ca revient à la normale en cochant logo survol).

    • Donc c’est un problème de cet autre plugin Logo par rôle. :)

    • Si cela peut apporter une quelconque aide : en conservant l’ancienne version 0.8.4 de “logos par role”, l’encart du logo en colonne de gauche est conservé (perte avec la nouvelle version du plugin, qui est dommageable car “scroller” tout en bas d’un article pour savoir quel est son logo n’est pas pratique, c’est le moins qu’on puisse dire..) Pour ma part, je conserve cette (ancienne) version du plugin, même avec SPIP 3.2.3 (plugin qui est par ailleurs extrêmement utile).

    • liberte

      Bonjour,
      Merci pour l’info.
      J‘utilise Logo par rôle 0.9.2 et j’ai bien la proposition de choisir un logo dans la colonne de gauche.
      Le problème est que je dois cocher la case logo de survol. Je vais poster ce souci dans le plugin concerné.

    • liberte

      Je ne sais pas comment contacter l’auteur du plugin qui est sur la zone.

    • Hello,
      Si tu as un compte sur ce site, tu peux lui laisser un message via le forum privé de l’article de documentation du plugin, qui n’est pas encore publié : https://contrib.spip.net/ecrire/?exec=article&id_article=4976

    Reply to this message

  • 5

    Merci pour ce plugin ! C’est vraiment top de pouvoir choisir le logo avec tous ses attributs et via la médiathèque. Je me permets une remarque et une suggestion: l’absence de limitation dans l’usage d’un même logo pour plusieurs documents est au contraire excellente, car dans le cas des articles multilingues, on souhaite garder le même logo pour l’article original et sa traduction - donc qu’un même document serve de logo plusieurs fois est très bien. Une suggestion: avoir la possibilité de renseigner le titre de l’image en utilisant les balises multilingues (de manière à afficher par ex. une légende de l’image dans la langue de l’article). C’est vraiment du détail mais au cas où... Merci encore.

    • Ben en quoi tu ne pourras pas utiliser de balises multi ? Tu peux en mettre dans n’importe quel champ.

    • L’utilisation des balises multi n’est pas prise en compte. Essayez et vous constaterez également.

    • Pour faire suite, j’utilise également le (double) plugin “image_responsive” & “media_responsive”. Il se peut qu’il y ait une incompatibilité sur la gestion des légendes avec les rôles de document, car dans un squelette l’ajout d’une balise multi sur un élément de légende crée un bug. Je ne saurais dire lequel des plugins en est à l’origine mais je vous le soumets pour investigation si vous voulez.

    • Mais Rôles de documents n’a aucun rapport avec les champs de contenu, il ne fait qu’ajouter un champ de rôle sur la table de liaisons avec les autres contenus. Après ce sont des documents, rien de différents d’avant qu’il y ait les rôles, avec leurs champs de titres, descriptifs etc, ce plugin ne fait rien d’autre.

    • Merci pour ces explications et le suivi. Pour information je ne constate plus l’anomalie (possiblement un problème de vidage de cache?). Tout fonctionne normalement.

    Reply to this message

  • 13

    Re-salut,

    je n’arrive pas à sortir les documents qui n’ont pas de rôles {role=''} ou qui n’ont pas un rôle précis {role!='role_exclu'} (affiche tous les documents dans les 2 cas) alors que j’arrive à afficher uniquement ceux qui ont un rôle {role!=''} ou qui ont un rôle précis {role='role_exclu'}.

    Ca doit venir du fait que dans spip_documents_liens, les documents ayant un lien apparaissent 2 fois (avec et sans leur rôle).

    Y’a t’il une solution ?

    Merci

    Ma boucle :

    <BOUCLE_roles(documents){id_article}{role=''}{' / '}>
    #ID_DOCUMENT
    </BOUCLE_roles>
    • Hello,

      L’API des rôles impose de mettre un rôle par défaut, elle n’accepte pas les rôles vides. Le rôle par défaut c’est «document», donc pour sélectionner les docs sans rôle : {role = document} .

      Je vais ajouter cette précision dans la doc, à l’occasion de la prochaine mise à jour.

    • Mmmh j’ai un doute sur ce point, cher ami, car un document peut très bien avoir le rôle par défaut ET d’autres rôles en plus, ce n’est pas exclusif. Donc sélectionner les choses avec le role=document ne veut pas dire qu’ils n’ont pas d’autres rôles par ailleurs.

    • M’est-avis qu’on devrait peut-être avoir un ou deux critères dédiés aux rôles pour faciliter tout cela. (Et si c’est possible, générique dans le plugin Rôles, pas juste pour ceux des documents.)

    • Ah oui exact cher confrère, c’est vrai qu’un doc peut avoir le rôle par défaut mais aussi d’autres rôles éventuels.
      Mais impossible de choisir ceux qui n’ont que le rôle par défaut.

      Donc @jeanmarie, pour l’instant ce n’est pas possible à moins d’écrire un nouveau critère.
      À réfléchir. Un truc du genre {role_unique} ?

    • ok, merci pour la réponse.

      Pour ce qui est de mon problème de documents sans rôle, je crois que ça vient de ma déclaration de nouveaux rôles qui supprime le rôle “document” mais je n’arrive pas à trouver ce que je rate :

      Je souhaite ajouter 2 rôles (visuel grille et visuel présentation) aux documents liés aux articles.
      J’ai donc repris et adapté l’exemple de la doc ci dessus, mais ça ne fonctionne pas (message à l’activation du plugin : L’installation du plugin « Squelette Bord à Bord » (version : 0.2.0) a échoué) et le rôle documents n’est plus disponible.

      Mon code :

      <?php
       
      function bordabord_declarer_tables_objets_sql($tables){
       
      	// les nouveaux rôle
      	$nouveaux_roles_titres = array(
      		'visuelgrille'  => 'bordabord:visuel_grille',
      		'visuelpresentation' => 'bordabord:visuel_presentation'
      	);
      	$nouveaux_roles_objets = array(
      		'articles' => array(
      			'choix' =>  array_keys($nouveaux_roles_titres),
      			'defaut' => ''
      		)
      	);
       
      	// les anciens rôles
      	$anciens_roles_titres = is_array($tables['spip_documents']['roles_titres']) ? $tables['spip_documents']['roles_titres'] : array();
      	$anciens_roles_objets = is_array($tables['spip_documents']['roles_objets']) ? $tables['spip_documents']['roles_objets'] : array();
       
      	// On mélange le tout
      	$roles_titres = array_merge($nouveaux_roles_titres, $anciens_roles_titres);
      	$roles_objets = array_merge($nouveaux_roles_objets, $anciens_roles_objets);
      	array_set_merge($tables, 'spip_documents', array(
      		"roles_titres" => $roles_titres,
      		"roles_objets" => $roles_objets
      	));
       
      	return $tables;
      }

      Qu’est-ce que je rate ?

    • Ben 1) tu surcharges les rôles pour les articles (par défaut ça prend la config *) et dedans t’as pas le rôle “document” et 2) en plus dans tous les cas pour ta config spécifique aux articles tu mets defaut => “” donc aucun rôle par défaut alors qu’il faut en donner un.

      Tu peux ne pas avoir de rôle “document” pour les articles si vraiment c’est ce que tu veux, mais par contre il faut dire quel rôle sera mis par défaut lors des ajouts.

    • 1) Faut pas surcharger ? J’ai repris bêtement l’exemple en modifiant les rôles et l’objet en me disant que la partie sur les anciens rôles ($anciens_roles_titres et $anciens_roles_objets) servaient justement à récupérer les rôles déjà existant pour ne pas les perdre.

      2) j’ai ajouté le rôle par défaut “document”.

      Ça donne :

      <?php
       
      function bordabord_declarer_tables_objets_sql($tables){
       
      	// les nouveaux rôle
      	$nouveaux_roles_titres = array(
      		'document'  => 'Document',
      		'visuelgrille'  => 'bordabord:visuel_grille',
      		'visuelpresentation' => 'bordabord:visuel_presentation'
      	);
      	$nouveaux_roles_objets = array(
      		'articles' => array(
      			'choix' =>  array_keys($nouveaux_roles_titres),
      			'defaut' => 'document'
      		)
      	);
       
      	// les anciens rôles
      	$anciens_roles_titres = is_array($tables['spip_documents']['roles_titres']) ? $tables['spip_documents']['roles_titres'] : array();
      	$anciens_roles_objets = is_array($tables['spip_documents']['roles_objets']) ? $tables['spip_documents']['roles_objets'] : array();
       
      	// On mélange le tout
      	$roles_titres = array_merge($nouveaux_roles_titres, $anciens_roles_titres);
      	$roles_objets = array_merge($nouveaux_roles_objets, $anciens_roles_objets);
      	array_set_merge($tables, 'spip_documents', array(
      		"roles_titres" => $roles_titres,
      		"roles_objets" => $roles_objets
      	));
       
      	return $tables;
      }

      J’ai bien le rôle document ainsi que mes 2 autres rôles et plus de rôles vide dans la base. Ça semble fonctionner.

      Par contre, à l’installation de mon plugin, j’ai toujours “L’installation du plugin « Squelette Bord à Bord » (version : 0.2.0) a échoué”.

    • Quand je parle de surcharge, je parle pour la liste qui définit les rôles par objet.

      Par défaut ça prend la configuration définit dans la clé “*” (étoile), SAUF s’il existe un clé pour tel objet, et dans ce cas ça prend cette liste là. Par défaut il n’y a pas de définition pour “article” par exemple, ça c’est toi qui l’ajoute donc qui surcharge l’étoile.

      Donc tu peux le faire, c’est justement prévu pour ça, mais c’est fait pour le définir pour un objet précis (là que pour les articles). Et à l’intérieur de ce que tu définis TOI pour les articles, bah là c’était uniquement ta liste perso, ça ne reprenait pas l’existant. Et donc pas le rôle “document” et la définition du défaut.

      Pour ce qui est de l’installation ça doit être autre chose. Tu as bien une fonction d’installation dans un fichier d’administrations ? Et dans cette fonction tu utilises bien l’api pour enregistrer le numéro de schéma de ton plugin ? (cf n’importe quel autre plugin qui a une install)

    • Ok, merci pour tes retours, c’est plus clair à présent.

      Pour l’installation qui échoue, effectivement, je n’avais pas de fichier d’administration. Je n’ai pas trouvé de doc là dessus, donc j’ai copié celui d’un plugin qui parait simple (identité extra).
      Ça n’échoue plus mais je ne maitrise pas trop ce que j’ai fait :)

    • Enfin, j’ai trouvé de la doc, mais pour des plugins créant des tables ou des métas, ce qui n’est pas mon cas.
      Bref ...

    • Le fichier d’installation est optionnel (plugin_administrations.php).
      Si tu n’en as pas besoin, il faut enlever schema dans paquet.xml.

    • Ça marche, merci.

    • Bon, dans la bataille, j’avais également perdu le rôle de logo.

      Donc ça donne au final :

      <?php
       
      function bordabord_declarer_tables_objets_sql($tables){
       
      	// les nouveaux rôle
      	$nouveaux_roles_titres = array(
      		// Les rôles par defaut
      		'logo'  => 'roles_documents:role_logo',
      		'document'  => 'roles_documents:role_document',
      		// Mes nouveaux rôles
      		'visuelfourchette'  => 'bordabord:visuel_fourchette',
      		'visuelgrille'  => 'bordabord:visuel_grille',
      		'visuelpresentation' => 'bordabord:visuel_presentation'
      	);
      	$nouveaux_roles_objets = array(
      		'articles' => array(
      			'choix' =>  array_keys($nouveaux_roles_titres),
      			'defaut' => 'document',
      			'principaux' => array(
      				'logo',
      			),
      		)
      	);
       
      	// les anciens rôles
      	$anciens_roles_titres = is_array($tables['spip_documents']['roles_titres']) ? $tables['spip_documents']['roles_titres'] : array();
      	$anciens_roles_objets = is_array($tables['spip_documents']['roles_objets']) ? $tables['spip_documents']['roles_objets'] : array();
       
      	// On mélange le tout
      	$roles_titres = array_merge($nouveaux_roles_titres, $anciens_roles_titres);
      	$roles_objets = array_merge($nouveaux_roles_objets, $anciens_roles_objets);
      	array_set_merge($tables, 'spip_documents', array(
      		"roles_titres" => $roles_titres,
      		"roles_objets" => $roles_objets
      	));
       
      	return $tables;
      }

      Par contre, le rôle par défaut n’a pas l’air d’être pris en compte : c’est le 1er rôle de la liste qui est coché par défaut (il se trouve que c’est document).

      Et il me manque un truc : si j’ajoute le rôle logo_survol (que je mets dans principaux pour le lier au logo), il apparait toujours dans le formulaire d’envoi de logo, même si j’ai désactivé les logos au survol dans la config de SPIP.

      Bon, je ne l’utilise pas, donc je l’ai viré mais ça serait plus propre :)

    Reply to this message

  • 7

    Bonjour,

    Mon commentaire est en lien avec le plugin roles_logos, mais je le poste ici car l’article dédié n’existe pas encore sur contrib, et ce dernier est intimement lié à roles_documents.

    Je cherchais à désactiver le rôle logo_survol qui occasionne des effet indésirables.
    La balise #LOGO_TRUC génère une balise img avec des attributs onmouseout et onmouseover, non seulement inutiles dans mon cas, mais qui cassent l’affichage dans l’éditeur markItUp lorsqu’on insère un modèle contenant un logo, à cause du code javascript inline)

    • Le réglage Contenu du site > Les logos >*Ne pas utiliser les logos de survol* n’est, pour l’instant (v1.1.8), pas pris en compte avec cette nouvelle gestion des logos.

    Du coup j’ai tenté d’utiliser la panoplie de pipelines disponibles

    function foo_declarer_tables_objets_sql($tables) {
       if (is_array($tables)) {
        unset($tables['roles_titres']['logo_survol']);
        unset($tables['roles_objets']['*']['choix']['logo_survol']);
       }
       return $tables;
    }
     
    function foo_roles_logos($logos) {
      unset($logos['logo_survol']);
      return $logos;
    }
     
    function foo_quete_logo_objet($infos_logo) {
        include_spip('inc/config');
        if ( lire_config('activer_logos_survol') === 'non' 
              AND  $infos_logo['args']['mode'] === 'off') {
            return array();
        }
        else return $infos_logo;
    }

    Seul l’emploi du pipeline quete_logo_objet m’a permis de désactiver de force l’insertion des attributs onmouseout, onmouseover sur les images.
    Toutefois, dans l’espace privé, le choix de liaison “logo de survol” est toujours disponible pour les rédacteurs.

    1) Peut-on intégrer prendre en compte la désactivation des logos de survol au sein du plugin ? (C’est peut être déjà en place ou prévu sur la branche de dev, je n’ai pas testé)
    2) Comment ne pas afficher le choix de liaison “logo de survol” dans l’interface rédacteur, lorsque l’on souhaite désactiver cette option ?

    Merci

    • Salut placido,

      Dans le trunk, la gestion des logos a été complétée.
      Pour les logos de survol, ça prend en compte la configuration : quand c’est désactivé dans «Contenu du site» ce rôle n’est pas proposé.
      En revanche, on ne touche pas au code produit par la balise #LOGO_SURVOL, donc si c’est activé il y aura toujours onmouseout et cie.

      À noter qu’on a un peu étendu la notion de logo : on est plutôt parti sur une notion de « documents principaux ». Donc quand on définit les rôles, il y a une option supplémentaire pour dire « les rôles suivant correspondent à des rôles principaux » (autant qu’on veut), et ils sont utilisés par le formulaire de logo.
      Et par défaut bien sûr, ce sont les rôles « logo » et « logo_survol ».

      Il faudra peut-être étendre la balise #LOGO_PATATE pour prendre en compte les nouveaux rôles principaux : role « banniere » → #LOGO_PATATE_BANNIERE par exemple.

      Il reste 2/3 trucs à finir et le trunk pourra repasser en test (et documentation à mettre à jour aussi).

    • Sur les conseils de Rastapopoulos, je suis passé à la version de dev, en désinstallant logos_roles (qui semble être devenu superflu). Le résultat est très satisfaisant, (seule la conversion du logo site en document semble inopérante).
      Pour le reste, c’est vraiment bien. Merci !

    • Super, n’hésite pas à faire des retours. Comme l’a dit tcharlss il y a encore quelques trucs à peaufiner avant de le passer en test et stable.

    • Alors, voici quelques retours supplémentaires:

      À la suite du passage logos_roles [0.8.4] + roles_documents [1.1.8] -> roles_documents [1.2.13] plutôt réussi en local, j’ai fait la même chose sur le site distant.

      Cette fois ci, le comportement fût un peu différent : j’ai perdu l’information de liaison “logo” sur la table spip_documents_liens lors de la mise à jour ; seule la liason “document” persistait. J’ai pu récupérer mes liaisons typées “logo” avec une requête SQL, plus quelques éditions dans l’espace privé.
      Je n’avais pas connu cela en local. Peut-être est-ce la cause d’un mauvais enchainement installation/désinstallation entre les différentes versions des plugins.

      Le reste semble OK.

      Il subsiste pour l’instant un point noir : le formulaire de choix du logo des “sélections” (plugin sélections éditoriales) ne propose pas de piocher dans la médiathèque. J’en suis réduit à déclarer une liaison manuellement avec un document existant dans la table spip_documents_liens.

    • Merci ! Super pour les tests dans divers cas comme les contenus sélectionnés, à vérifier donc (pourtant ça utilise #FORMULAIRE_LOGO et Rôles de doc le surcharge normalement…)

    • Pour ce qui est du logo des sélections éditoriales, je ne reproduis pas : https://pic.infini.fr/9YFPpdGs/ZTd1pF0y.png

      Tu n’as même pas le sélecteur de rôle dans ta capture d’écran, ni l’intitulé «logo de ce contenu sélectionné», c’est d’autant plus étrange. Quelle version du plugin ?

      Pour la perte des infos de liaison, tu as juste désactivé roles_logos ou fait une désinstallation ?

    • Sélections éditoriales [1.7.11] | SPIP [3.2.1]

      Mais je viens de trouver le problème, qui n’est pas lié à roles_documents mais à LIM. L’affichage du bloc de sélection de logo était désactivé pour les «Contenus sélectionnés», (je n’ai pas tilté tout de suite, car, malgré ce réglage, je disposais quand même d’une version basique d’un formulaire pour choisir un logo, cf : impr. écran).

      Donc, pas de soucis sur ce point en fin de compte.

      Pour la perte des infos de liaison, tu as juste désactivé roles_logos ou fait une désinstallation ?

      Cela a été un peu chaotique car la compatibilité max du necessite de logos_roles pour roles_documents s’arrête à 1.1.*, ce qui a rendu la simple montée de version problématique. J’ai dû désactiver logos_roles, désactiver roles_documents, puis installer la version dev de ce dernier...

      En attendant d’autres résultats de tests...

      Merci

    Reply to this message

  • 2

    Salut,

    dans la partie “Intégration dans les squelettes”, le code de Afficher les rôles d´un document semble ne pas focntionner à cause des critères {objet}{id_objet}
    de la boucle <BOUCLE_roles>.

    En fait, une seule boucle semble suffire, pas besoin de la boucle <BOUCLE_docs> :

    <BOUCLE_roles(documents){id_article}{par role}{role!=''}{", "}>
    #TITRE
    Rôle(s) : [(#ROLE|role{documents})]
    </BOUCLE_roles>
    • Hop,

      Ah oui, il faut peut-être préciser {objet = patate} {id_objet = N}, à tester.
      Par contre il faut forcément une boucle séparée pour les rôles, avec une seule boucle ça ne te sortira qu’un seul rôle.

    • Ah ben oui, il faut 2 rôles bien sûr, j’étais parti sur des documents qui n’ont qu’un rôle !

      Pour la boucle, il faut effectivement rajouter objet = patate id_objet = N :

      <BOUCLE_docs(DOCUMENTS) {id_article}>
      	<B_roles>
      	#TITRE
      	Rôle(s) :
      	<BOUCLE_roles(documents_liens){id_document}{objet=article}{id_objet=#ID_ARTICLE}{par role}{role!=''}{" / "}>[(#ROLE|role{documents})]</BOUCLE_roles>
      </BOUCLE_docs>

      Avec un <B_roles> avant le #TITRE pour ne pas l’afficher si pas de rôle (ce qui ne doit pas arriver, mais on ne sait jamais, moi , ça m’est arrivé :) )

      PS: ne pas tenir compte le capture d’écran, elle est restée coincée là et je ne trouve pas comment la supprimer

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom