Faire un annuaire
Le squelette auteur est bien utile pour contacter un auteur sans dévoiler son courriel, voir ce qu’il a écrit et tout ça.
Cette contribution ajoute quelques lignes à ce squelette de base pour faire afficher également la liste de tous les auteurs, éventuellement filtrée suivant des critères passés en paramètre ex :
auteur.php3?nom=christian
vous donnera tous les Christian et
auteur.php3?tri=statut
vous triera les auteurs suivant leur statut (qui c’est l’chef ici ?!).
Voici par exemple les pilotes de ligne des pédibus de l’Hérault et (plus sophistiquée) la liste des enseignants au département de mathématiques de Montpellier II.
On va faire un tableau donc il faut utiliser un peu de php pour colorer les lignes mais ne vous inquiétez pas, ça ne fait même pas mal. Il s’agit donc de modifier auteur.html
. Si vous n’avez pas fait de modifications, il vous faut copier ce fichier depuis le sous-dossier dist/
dans le dossier racine.
Nous allons faire la boucle sur l’auteur principal plus tard et s’il n’y a pas d’auteur, nous afficherons autre chose : l’annuaire proprement dit.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="#LANG">
<head>
<title>[(#NOM_SITE_SPIP)]
<B_auteur_head>
<BOUCLE_auteur_head(AUTEURS){id_auteur}
>[(#NOM|entites_html)]
</BOUCLE_auteur_head>
</B_auteur_head>
Annuaire
<//B_auteur_head>
</title>
<?php
$tr = array(" class='row_odd'"," class='row_even'");
?>
<!-- fin de l'ajout dans <head> ce qui suit est le fichier auteur.html standard -->
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
<link rel="stylesheet" href="spip_style.css" type="text/css">
<!-- Les feuilles de style specifiques aux presents squelettes -->
<link rel="stylesheet" href="typographie.css" type="text/css">
<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
<link rel="stylesheet" href="impression.css" type="text/css" media="print">
</head>
<body bgcolor="white">
<div id="navigation">
<h1 class="structure"><:navigation:></h1>
<!-- Menu de navigation general -->
<div class="menu">
<ul class="general">
<li class="menu-titre">
[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
</li>
<li class="menu-item">
<a href="plan.php3"><:plan_site:></a>
</li>
<li class="menu-item">
<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
</li>
<li class="menu-item">
<a href="ecrire/"><:espace_prive:></a>
</li>
</ul>
</div>
<!-- Formulaire de recherche -->
[(#FORMULAIRE_RECHERCHE)]
</div>
<!-- Une : affichage de l'auteur -->
<!-- Ici on fait la boucle sur l'auteur principal -->
<div class="contenu" id="principal">
<B_auteur_principal>
<BOUCLE_auteur_principal(AUTEURS){id_auteur}>
<div class="cartouche">
[(#LOGO_AUTEUR|left)]
<h1 class="titre-texte">#NOM</h1>
[<div class="chapo">(#BIO)</div>]
[<br>#NOM_SITE : <a href="(#URL_SITE)">#URL_SITE</a><br>]
[<div class="notes">(#NOTES)</div>]
</div>
[<p><b><:envoyer_message:></b></p>
<div class='spip_encadrer'><b>(#FORMULAIRE_ECRIRE_AUTEUR)</b></div>]
<!-- Articles de l'auteur -->
<h1 class="structure"><:articles_auteur:></h1>
<div class="liste-articles">
<BOUCLE_articles(ARTICLES) {id_auteur} {par titre}>
<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
<div class="detail">
[(#DATE|nom_jour)] [(#DATE|affdate)]
<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
</div>
<br>
</BOUCLE_articles>
</div>
</BOUCLE_auteur_principal>
<!-- Il n'y a pas d'id_auteur On veut donc afficher l'annuaire -->
<B_AUTEUR_GENERALE>
ANNUAIRE<br />
<table class='spip'>
<tr class='row_first'><td>
<a href="auteur.php3?nom=^A" title="Noms commençant par la lettre 'A'">Nom</a></td>
<td>Bio</td>
<td>Statut</td>
<td>Site</td>
<td>Notes</td></tr>
<BOUCLE_AUTEUR_GENERALE(AUTEURS){par #ENV{tri,nom}, nom}{nom==#ENV{nom,.}}{bio==#ENV{bio,.}}{statut==#ENV{statut,(0minirezo|1comite)}}{email==#ENV{email,@}}{login==#ENV{login,.}}{nom_site==#ENV{nom_site,.}}>
<tr <?php echo $tr[$tr_flag ^= 1]?>>
<td title="Nom">[<a href='auteur.php3?id_auteur=#ID_AUTEUR'>(#NOM)</a>]</td>
<td title="Bio"><a href="auteur.php3?bio=[(#BIO)]">[(#BIO)]</a></td> <td title="Statut">
<a href="auteur.php3?statut=[(#STATUT)]">[(#STATUT)]</a></td>
<td title="Site">[
#NOM_SITE : <a href="(#URL_SITE)">#URL_SITE</a>]</td>
<td title="Notes">[(#NOTES)]</td>
</tr>
</BOUCLE_AUTEUR_GENERALE>
</table>
</B_AUTEUR_GENERALE>
<//B_auteur_principal>
</div>
</body>
</html>
En fait [1] il y a un trou de sécurité dans l’utilisation de #ENV tel quelle dans le critère par
: un petit malin pourrait potenitellement forger un critère bien senti qui lui ferait manipuler la base comme il veut. Pour éviter ces déboires [2] il est nécessaire d’ajouter quelques petites lignes dans auteur.php3
pour éliminer les mauvaises surprises :
<?php
$_GET['tri'] = eregi_replace('([a-z]*).*','\\1',$_GET['tri']);
$_GET['nom'] = eregi_replace('(\^?[a-z]*\$?).*','\\1',$_GET['nom']);
$_GET['statut'] = eregi_replace('(\^?[0-9]*[a-z]*\$?).*','\\1',$_GET['statut']);
$fond = "auteur";
$delais = 24 * 3600;
include ("inc-public.php3");
?>
Voilà, c’est tout. Si vous voulez simplement avoir une liste alphabétique ou autre de vos auteurs, n’allez pas plus loin. Si vous voulez ajouter des informations qui ne sont pas prévues en version dist, il faut un peu plus de travail, expliqué dans la section qui suit :
Enrichissement de l’annuaire
Ceci étant fait, la table des auteurs contient relativement peu d’informations, on est obligé de quicher toutes les informations en vrac dans le champs #BIO
, que tout auteur lambda peut modifier (i.e. trifouiller) à sa guise, ce qui ne permet pas d’y stocker des informations permettant un traitement automatique (c’est du vécu).
Personnellement j’ai enrichi la base de données avec d’autres champs spécifiques à mon site : #EQUIPE, #EMPLOI, #BUREAU, #TELEPHONE que j’ai exploité dans ce squelette. On peut préférer utiliser le champs EXTRA, j’ai choisi d’ajouter plutôt des champs à la base. C’est un peu une affaire de religion, le champs extra vous permet d’avoir une interface simple à l’intérieur de spip pour les ajouter et pour les remplir, comme n’importe quel autre champs de la base auteurs.
J’ai préféré laisser ça à un super-administrateur ayant un accès direct à la base. L’administrateur moyen n’a donc pas moyen de modifier les informations dans ces champs. Voici comment j’ai fait pour ajouter ces champs :
J’ail lu cet excellent wiki et j’ai fait ce qu’il y avait marqué :
- J’ai rajouté des champs equipe, emploi, bureau et telephone (évitez les accents) à la table spip_auteurs
avec phpMyAdmin (ou autre manipulateur de base), j’ai bien noté le type de chaque champs VARCHAR, ENUM, BIGINT etc. J’ai été ici très directif avec des ENUMérations, c’est-à-dire qu’il n’y a que certains choix très limités dans la valeur des champs. De cette manière je peux utiliser ces valeurs ailleurs dans le site de manière automatique. Mais vous pouvez rajouter simplement des VARCHAR(50) si vous voulez laisser un peu de liberté à vos valeurs si elles ne sont qu’informatives.
- J’ai édité ecrire/inc_serialbase.php3
et j’ai ajouté
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"idx" => "ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL",
"extra" => "longblob NULL",
"emploi"=> "ENUM( 'PR', 'MCF', 'DR CNRS', 'CR CNRS', 'PR Émérite', 'Assistant', 'Ing. Rech.', 'IE CNRS', 'IE RF', 'Tech. RF', 'ASI RF', 'ADT RF', 'ADA RF', 'Associé', 'Post Doc', 'Postdoc CNRS', 'PRAG', 'ATER', 'AMN', 'All. Rech.', 'Doctorant', 'Étudiant', 'Autre' ) DEFAULT 'Autre'",
"equipe" => "ENUM('GTA', 'ACSIOM', 'Proba-Stat', 'Admin', ' ') DEFAULT ' '",
"bureau" => "VARCHAR(10)",
"telephone" => "VARCHAR(25)");
$spip_auteurs_key = array(
"PRIMARY KEY" => "id_auteur",
"KEY login" => "login",
Conclusion
Rajouter une fonction d’annuaire de base est donc très simple. L’enrichir en ajoutant des champs à la base auteurs est un peu plus compliqué ; en particulier seul un administrateur mySQL (par opposition à un administrateur spip) peut remplir ces champs (c’est en fait ce que je recherchais). Mais pour l’instant je ne sais pas trop les remplir autrement qu’à la main avec phpMyAdmin (un script php en fait). J’ai entendu des bruits sur des squelettes de formulaires d’édition (quelque-chose comme un ecrire/auteurs_infos.html
), que tous les webmestres appellent de leurs voeux pour simplifier (particulariser) la tâche pour leurs rédacteurs malcomprenants, qui seraient dans des cartons, donc ne deséspérons pas...
Petit détail technique : J’avais tout d’abord essayé de rajouter la structure de la base à ecrire/mes_options.php3
et aussi de créer un fichier /auteur_fonctions.php3
où je mettais
mais avec la 1-8 ça ne marche pas encore... Il faudra donc que j’édite une nouvelle fois inc_serialbase.php3 à la prochaine mise à jour, à moins que les ajouts dans auteur_fonctions.php3
soient pris en compte (ça va venir).
Voilà, en vous souhaitant d’exploiter au mieux toutes ces incroyables améliorations qui font de SPIP un CMS vraiment chouette.
Aucune discussion
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 : |