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 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 :

<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

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.

Par exemple si nous voulions par exemple ajouter 3 rôles pour un objet éditorial « livre » (en conservant les rôles déjà déclarés auparavant) :

function monplugin_declarer_tables_objets_sql($tables){
 
	/* On liste les nouveaux roles à utiliser pour un objet 'livre' */
	$nouveaux_roles_titres = array(
		'couverture'  => 'monplugin:role_couverture',
		'4couverture'  => 'monplugin:role_4couverture',
		'extrait' => 'monplugin:role_extrait'
	);
	$nouveaux_roles_objets = array(
		'livres' => array(
			'choix' =>  array_keys($nouveaux_roles_titres),
			'defaut' => ''
		)
	);
 
	/* On les ajoute aux rôles déjà présents */
	$tables['spip_documents'] = array_merge_recursive(
		$tables['spip_documents'],
		array(
			'roles_titres' => $nouveaux_roles_titres,
			'roles_objets' => $nouveaux_roles_objets
		)
	);
 
	return $tables;
}

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.

Discussion

6 discussions

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

    Répondre à ce 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 :)

    Répondre à ce 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

    Répondre à ce 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

    Répondre à ce message

  • 17

    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

    Répondre à ce message

  • 5

    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

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

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

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

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

    • 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

Ajouter un commentaire

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

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

Dernière modification de cette page le 27 juillet 2018