Nos objectifs
Nous nous donnons trois objectifs dans le cadre de cet article [1].
- Gérer la « fonction » des auteurs : des secrétaires rédaction et des traducteurs. [2] Différentes personnes contribuent au produit fini qu’est un article publié sur un site web. Nous identifions trois fonctions essentielles dans ce processus [3] : l’auteur, qui écrit l’article, le secrétaire de rédaction (ou éditeur), qui assure l’aspect technique de la mise en ligne et le traducteur [4]. Ce constat - qui tient de l’évidence dans la plupart des cas - peut cependant être perdu de vue quand on a recourt à un outil de publication collaborative comme SPIP.
- Des « secrétaires de rédaction ». Selon la définition que nous avons donnée du « secrétaire de rédaction » (ou « éditeur »), le site public ne rendra compte que des auteurs des textes et laissera ce qui concerne les secrétaires de rédaction à la gestion éditoriale interne du site. Une même identité dans SPIP ne pourra donc à la fois publier ses propres articles et encoder des articles écrits par d’autres.
On pourrait se contenter de ne pas conserver de liaison entre un article et la personne qui l’a mis en ligne, ce qui résoudrait le problème. Il nous semble pourtant que, dès que plusieurs personnes travaillent ensemble sur un même site web, il devient utile de conserver une telle liaison : pour permettre au « secrétaire » de revenir sur ses articles par exemple, ou pour permettre à l’administrateur du site de connaître l’activité de publication des différents secrétaires.
- Des traducteurs. Selon la même logique, nous souhaitons identifier le traducteur d’un article en le séparant clairement du ou des auteurs. Pour chaque article, nous souhaitons par exemple obtenir sur le site public un rendu de la forme suivante [5] :
Titre
jeudi 3 mars 2000,
par Boule et Bill,
traduit par Machin
- Permettre le classement alphabétique des auteurs. Par défaut, SPIP ne propose qu’un seul champ pour l’encodage des articles. Cela implique qu’il vous sera impossible de classer vos auteurs par ordre alphabétique si vous les encodez selon une forme
Prénom Nom
Inversément, si vous les encodez sous la forme :
Nom Prénom
vous pourrez les classer par ordre alphabétique mais l’affichage public sera détérioré. Nous proposons ici une méthode permettant de classer des auteurs tout en conservant la maîtrise de leur affichage.
- Uniformiser l’affichage et le rendre plus joli. Pour chaque article, nous souhaitons que la liste des auteurs soit présentée :
- par ordre alphébétique des noms de famille,
- précédée du mot "par",
- en séparant les noms par des virgules, sauf les deux derniers qui seront séparés par le mot "et",
- en affichant les prénoms en minuscules avec la première lettre en majuscule et les nom de familles en petites majuscules (« small caps ») avec la première lettre en majuscule.
Un exemple de ce que donnent les propositions faites dans ce texte est disponible sur le site http://tchouktchouk.eu.org/, une revue de presse ferroviaire [6]. Les squelettes de ce site sont librement consultables à l’adresse http://tchouktchouk.eu.org/skel/.
Avant d’en venir à la réalisation des objectifs proposés, il n’est pas inutile de souligner que la perspective dans laquelle est traitée, dans ce texte, la question de l’affichage des auteurs correspond sans doute un peu plus directement à un usage particulier de SPIP qui est par exemple celui fait par revue papier mettant ses articles sur le web : celui dans lequel une ou un nombre réduit de personnes font le travail de mettre en ligne des articles signés par un grand nombre d’auteurs (ceux-ci ne réalisant pas le travail d’encodage de leur(s) articles(s) ; ceci par opposition avec l’usage « natif » de spip qui est le webzine collaboratif, pour lequel un certain nombre de propositions faites ici sont sans doute peu pertinentes.
1. Des secrétaires de rédaction et des traducteurs
Par convention, nous allons encoder d’une façon particulière le nom des secrétaires de rédaction (dont la fonction a été définie plus haut) et celui des traducteurs : nous ferons respectivement précéder leur nom d’un « @
» et d’un « #
» [7], ce qui nous permettra aussi de les lister facilement dans l’interface privée [8].
En ajoutant un critère dans nos boucles AUTEURS
, nous pourrons sélectionner le type d’auteurs que nous voulons afficher. Par exemple, le critère {nom!==^@}
(littéralement : « ne commençant pas par "@" ») inséré dans tous les boucles AUTEURS
du site permettra d’éviter qu’il soit fait mention de nos secrétaires de rédaction sur le site public. Pour afficher les traducteurs d’un article, nous utiliserons le critère {nom==^#}
, etc.
Ainsi, la boucle suivante affiche les auteurs de l’article (et pas les traducteurs ni les secrétaires de rédaction).
<BOUCLE_signature(AUTEURS){id_article}{par nom}{nom!==^@}{nom!==^#}{", "}>#NOM</BOUCLE_signature>
Autre exemple, la boucle suivante affiche les traducteurs d’un article.
<BOUCLE_signature(AUTEURS){id_article}{par nom}{nom==^#}{", "}>#NOM</BOUCLE_signature>
2. Gérer le classement alphabétique
Par convention, nous supposons que nos les noms de nos auteurs sont composés d’un prénom (ou plusieurs) et d’un nom de famille. Nous considérons en outre que c’est en fonction de ce nom de famille qu’un classement alphabétique des auteurs est le plus pertinent. Nous supposons enfin qu’il est préférable de citer une personne en commençant par son prénom. Ces considérations culturelles étant acquises, nous pouvons passer à la mise en oeuvre.
La manière la plus facile d’ordonner une liste de données, c’est de s’adresser au système de gestion de la base de données. Par conséquent, les données doient y être stockées dans un format qui le permet sans trop se compliquer la vie. Autrement dit, notre champ « nom » doit commencer par le nom de famille.
Nous décidons donc, par convention, d’encoder systématiquement les noms de nos auteurs en commençant par le nom suivi d’une astérisque ("*
« ) puis du prénom et autres titres, seconds prénoms,... Ainsi, le nom »naturel" d’un auteur :
Pdt. William J. Clinton
devient, selon notre nouvelle norme d’encodage :
Clinton*Pdt. William J.
A moins que vous n’ayez de raison particulière de le faire (autre usage de la base de données), il n’est pas essentiel d’insister ici sur l’usage des majuscules et minuscules : nous harmoniserons tout cela lors de l’étape de l’affichage.
Dans l’espace privé de notre site, les articles de cet auteur seront attribués à l’auteur Clinton*William J.
; cela n’est pas forcément très élégant, mais tout de même parfaitement lisible.
Avantage immédiat, dans la liste des auteurs, nous récupérons un classement alphabétique parfait, de la forme :
Bush*George W.
Clinton*Hillary
Clinton*William J.
Sur le site public, une boucle AUTEURS
classée {par nom}
fournira donc un classement alphabétique correct (basé sur le nom de famille).
Pour remettre l’affichage « à l’endroit » sur le site public, il suffira d’utiliser un filtre - nous allons le créer tout de suite et l’appeler prenom_nom
- que nous appliquerons à la balise #NOM :
[(#NOM|prenom_nom)]
Tant qu’à faire, nous écrivons deux autres filtres pour afficher respectivement le nom ou le prénom seul. Nous obtenons donc trois filtres (et quelques fonctions subordonnées), à placer dans le fichier mes_fonctions.php3
(ou dans un autre fichier que vous chargerez dans mes_fonctions.php3
avec l’instruction require
) :
Notez que chacune des trois fonctions renvoie des chaînes nettoyées des « @-
» (ou « @_
» ou « @
» ou « @
») ainsi que des « #-
» (ou « #_
» ou « #
» ou « #
») qui les précèdent éventuellement. Cela permet d’utiliser le nom d’un secrétaire de rédaction ou d’un traducteur sur le site public sans se préoccuper de l’affichage [9].
Enfin, s’il n’y a pas de « *
» dans la chaîne :
- la fonction
prenom()
ne renvoie rien ; - la fonction
nom()
renvoie la chaîne sans rien changer (par exemple un pseudo) ; - la fonction
prenom_nom()
renvoie la chaîne sans rien changer ;
Cela permet d’introduire un peu de souplesse et d’afficher correctement le nom d’Aristote, d’Alain, du vengeur masqué ou de n’importe que pseudo, lesquels ne sont pas, contrairement à nos prémisses, composés d’un prénom suivi d’un nom [10].
3. Mise en forme
Ces trois fonctions, qu’il vous suffit d’ajouter dans votre fichier mes_fonctions.php3
[11] vont nous permettre de citer nos auteurs de façon beaucoup plus fine.
Par exemple, la ligne suivante, insérée dans un squelette, nous renverra le prénom suivi du nom, ce dernier étant mis en forme selon la classe CSS .nom
.
[(#NOM|prenom) ][<span class="nom">(#NOM|nom)</span>]
Cela nous permet, par exemple, d’afficher le nom en petites majuscules (small caps), simplement en le précisant dans la feuille de style [12] de la façon suivante :
.nom {
font-variant: small-caps;
}
Pour terminer, notez que ces filtres tels qu’ils sont proposés ici harmonisent l’affichage selon la norme suivante :
- prenom()
renvoie le prénom après l’avoir passé en minuscules puis avoir transformé en majuscule l’initiale de chaque mot (ainsi que l’initiale de chaque partie d’un mot composé).
- nom()
fait de même... avec le nom.
- prenom_nom()
concatène les résultats obtenus par prenom()
et par nom()
(séparés par un espace insécable) après avoir passé le nom en majuscules (ce qui par exemple utile pour me champ titre d’une page html où il n’est pas possible de créer des petites majuscules).
Par exemple, si la valeur de notre champ #NOM est « durant-DUBOIS*dr. anne-sophie », placé dans un squelette, le code
[(#NOM|prenom) ][(#NOM|nom)]
[13]
renverra
Dr. Anne-Sophie Durant-Dubois
tandis que le code
[(#NOM|prenom) ][(#NOM|majuscules|nom)]
[14]
renverra
Dr. Anne-Sophie DURANT-DUBOIS
Comme nous le disions plus haut, tout ceci nous permet de ne pas trop nous soucier de la précision de l’encodage des noms des auteurs : le rendu public sera de toute façon homogène.
4. Rendre la liste des auteurs plus jolie
Pour terminer, plutôt que comme une simple liste de noms séparés par des virgules, nous allons afficher la liste de nos auteurs sous la forme :
par Albert Durant, Claude Dubois et Jean Dupont
Une petite fonction php va nous y aider :
<?
/*
* Fonction auteur_et_auteur()
*
* Auteur : Philippe Rivière <fil@rezo.net>
*
* Copyright : GNU Public Licence
*
* Rajouter un "et" à la place de la virgule entre les deux derniers
* auteurs d'une liste
*
*/
function auteur_et_auteur($texte) {
return ereg_replace(", ([^,]*)$"," et \\1",$texte);
}
?>
Attention, cette fonction doit être placée dans le squelette (et non dans le fichier mes_fonctions.php3
ou ailleurs) : il doit en effet s’exécuter à chaque lecture de la page (et non uniquement lors du calcul de la page).
Si vous utilisez plusieurs boucles AUTEURS
dans un même squelette, veillez à ne pas répéter la fonction auteur_et_auteur
plusieurs fois, sans quoi vous aurez une erreur php [15].
Bref, voici les quelques lignes qui, placées dans un squelette, répondent à notre objectif initial [16] [17] :
<? $tous_auteurs = auteur_et_auteur('<BOUCLE_signature(AUTEURS){id_article}{par nom}{nom!==^@} {", "}>[(#NOM|prenom|texte_script) ][<span class="nom">(#NOM|nom|texte_script)</span>]</BOUCLE_signature>');
if ($tous_auteurs) echo " par ".$tous_auteurs;
?>
Nous avons bien renvoyé la liste des auteurs :
- classée par ordre alphébétique des noms de famille,
- précédée du mot « par »,
- en séparant les noms par des virgules, sauf les deux derniers qui seront séparés par le mot « et »,
- en affichant les prénoms en minuscules avec la première lettre en majuscule et les nom de familles en petites majuscules avec la première lettre en majuscule.
Encore une boucle pour le plaisir, voici l’affichage des auteurs et des traducteurs d’un article :
<?
# On récupère les auteurs
$tous_auteurs = auteur_et_auteur('<BOUCLE_signature(AUTEURS) {id_article}{par nom}{nom!==^@}{nom!==^#}{", "}>[(#NOM|prenom|texte_script) ][<span class="nom">(#NOM|nom|texte_script)</span>]</BOUCLE_signature>');
# On les affiche
if ($tous_auteurs) echo "par ".$tous_auteurs;
# On récupère les traducteurs
$tous_auteurs_trad = auteur_et_auteur('<BOUCLE_signature_trad(AUTEURS) {id_article} {par nom} {nom==^#} {", "}>[(#NOM|prenom|texte_script) ][<span class="nom">(#NOM|nom|texte_script)</span>]</BOUCLE_signature_trad>');
# On les affiche
if ($tous_auteurs_trad) echo ", traduit par ".$tous_auteurs_trad;
?>
Discussions par date d’activité
Une discussion
Bonjour,
Cette merveilleuse contrib pose un problème au passage à PHP 7 car elle contient la fonction « ereg_replace » qui a été supprimée.
Pour éviter d’avoir de gros messages d’erreur sur votre site au passage à PHP 7, il faudra donc la remplacer par « preg_replace » ou « str_replace ». Comme proposé par michel_leble ici : https://forum.spip.net/fr_275665.html?debut_forums=%40275667#forum275674
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |