SPIP 1.9.2

Plugin Attributs

Divers

Le plugin Attributs permet de dupliquer les mots-clés afin de distinguer clairement les mots-clés sémantiques des mots-clés fonctionnels.

Vous trouverez ci-dessous la documentation initiale de ce plugin. La doc mise à jour reprenant les différentes évolutions de ce plugin est accessible sur SPIP-Contrib.

I. Le pourquoi de ce plugin.

De nombreux squelettes ont recours aux mots-clés pour proposer des options d’affichage : choix d’un squelette, mise en avant de certains articles ou brèves, ... Il s’agit d’un usage fonctionnel des mots-clés.
Dans le même temps, les mots-clés servent également et principalement à donner du sens aux différents éléments et permettre une navigation transversale au sein d’un site (usage sémantique ou navigationnel).

Lorsque l’on utilise les mots-clés pour ces deux usages, il importe de les distinguer afin de n’afficher sur le site public que les mots-clés sémantiques. Une des solutions parmi d’autres consistent à préfixer les noms des groupes de mots-clés fonctionnels par un même préfixe ( par exemple) et de filtrer les mots-clés préfixés dans le site public.
Le présent plugin repose sur un autre principe. Il s’agit de distinguer les mots-clés fonctionnels des mot-clés sémantiques en les plaçant dans une autre table. Autrement dit, le présent plugin duplique les mots clés en créant une nouvelle table spip_attributs destinée à recevoir les mots-clés fonctionnels, les mots-clés usuels de SPIP n’étant alors utilisés que pour les mots-clés sémantiques.
Nous appellerons alors les mots-clés fonctionnels des attributs.

II. Installation du plugin.

Récupérez la dernière version du fichier zip sur SPIP-Zone.
Ce plugin s’installe selon la procédure habituelle (Voir la documentation sur SPIP.net et sur SPIP-Contrib).

III. Créer un attribut.

Une fois installé, une nouvelle icône en forme de roue dentée est disponible dans le menu Édition. Cliquez sur cet icône pour accéder à la page de gestion des attributs.

Cliquez sur Créer un nouvel attribut. Par défaut, seul un administrateur général peut créer, supprimer ou modifier un attribut.

[|

|]

Comme pour un mot-clé, spécifiez le nom de l’attribut, un descriptif et si besoin un texte plus long. Contrairement aux mots-clés, il n’y a pas de groupes d’attributs. Il faut donc spécifier pour chaque attribut à quels objets il peut être associé. Pour le moment, il est possible de lier un attribut aux :
 articles,
 rubriques,
 brèves,
 auteurs,
 et sites.

De plus vous pouvez préciser si un rédacteur est autorisé ou non à associer cet attribut au type d’objets en question. Les administrateurs ont, eux, toujours le droit d’associer ou non un attribut.

Validez.

[|

|]

La liste des attributs affiche le nombre d’éléments liés à chaque attribut ainsi que les types d’objets auxquels il peut être lié.

Si vous essayez de supprimer un attribut actuellement lié à un ou plusieurs objets, vous devrez confirmer votre décision.

[|

|]

IV. Associer un attribut à un objet.

Comme pour les mots-clés, une boite intitulée ATTRIBUTS apparaitra sur la page d’édition d’un objet si des attributs peuvent lui être liés.

[|

|]

Il suffit alors de sélectionner l’attribut à associer et de valider. Pour retirer un attribut, il suffit de cliquer sur le lien Retirer affiché à côté de l’attribut actuellement associé à l’objet.

Pour pouvoir associer ou retirer un attribut, deux conditions sont nécessaires. D’une part, il faut être autoriser à modifier l’objet concerné. D’autre part, il faut soit être administrateur, soit que l’attribut puisse être associé par un rédacteur.

V. Utiliser les attributs dans ses squelettes.

Deux nouveaux critères sont disponibles dans les boucles ARTICLES, RUBRIQUES, BREVES, SITES et AUTEURS :
 id_attribut qui sélectionne les objets associés à l’attribut en question,
 titre_attribut qui sélectionne les objets associés à un attribut dont le nom est celui passé à titre_attribut.

Ces deux critères fonctionne comme les autres critères de SPIP. Il est donc possible d’utiliser != ou bien des expressions régulières.

Par ailleurs, si besoin on peut avoir recours à une boucle ATTRIBUTS associée aux balises #ID_ATTRIBUTS, #TITRE, #DESCRIPTIF, #TEXTE et #NOTES. Les balises #ARTICLES, #RUBRIQUES, #BREVES, #AUTEURS et #SYNDIC indiquent si un attribut peut être associé à l’objet en question. Elles renvoient oui ou non. De la même manière, #REDACTEURS vaudra oui si l’attribut peut être associé par un rédacteur.

Les critères usuels sont utilisables avec la boucle ATTRIBUTS, ainsi que id_article, id_rubrique, id_breve, id_syndic et id_auteur.

VI. Empêcher la modification des attributs.

Supposons que nous réalisions un ensemble de squelettes complet, nommé SQ, distribué sous la forme de la forme d’un plugin. Ce squelette utilise des attributs.
Pour faciliter l’installation de ce squelette, il est possible d’écrirer un script appelé par la balise du fichier plugin.xml et installant automatiquement dans la table spip_attributs les attributs utilisé par SQ. Afin de distinguer ces attributs d’autres attributs qui auraient été créés par l’administrateur du site, les attributs de SQ sont préfixés avec sq_.

Afin, d’éviter qu’un administrateur général du site modifie le réglage de ces attributs, il est possible d’interdire que les attributs préfixés par sq_ soit modifiables ou supprimables tant que le plugin SQ est activé.

Pour cela, il suffit de définir les deux fonctions suivantes dans le fichier mes_options.php du plugin SQ : autoriser_attribut_supprimer et autoriser_attribut_modifier. Ces deux fonctions utilisent l’API d’autorisation de SPIP.

Elles pourront être de la forme suivante :

function autoriser_attribut_supprimer($faire, $type, $id, $qui, $opt) {
  if (_q($id)) {
    $s = spip_query("SELECT titre FROM spip_attributs WHERE id_attribut="._q($id));
    $r = spip_fetch_array($s);
    if( substr($r['titre'],0,3)=='sq_' && $qui['statut'] == '0minirezo' && !$qui['restreint'])
      return true;        
  }
  return false;
}

function autoriser_attribut_modifier($faire, $type, $id, $qui, $opt) {
  if (_q($id)) {
    $s = spip_query("SELECT titre FROM spip_attributs WHERE id_attribut="._q($id));
    $r = spip_fetch_array($s);
    if( substr($r['titre'],0,3)=='sq_' && $qui['statut'] == '0minirezo' && !$qui['restreint'])
      return true;        
  }
  //Si $id=0, seul un admin général peut créer un attribut
  else if $qui['statut'] == '0minirezo' && !$qui['restreint']
    return true
  return false;
}

Bien sur, ce code est à adapter au cas par cas.