Cet article est une variante de la contribution Tri alphabétique tout en SPIP pour afficher la liste alphabétique de vos auteurs en fonction de leur nom
SPIP stocke le nom dans un seul champ. Les auteurs rentrent généralement le prénom nom et on désire un classement par nom
ex. Marcel Duchamp doit être rangé dans D et non dans M.
Ajout d’un filtre pour récupérer le nom
On crée un filtre (à ajouter dans mes_fonctions.php) pour déterminer la 1re lettre du nom des auteurs.
ex. Marcel Duchamp renvoie D
// ---------------------------------------
// Filtre lastfirstletter
// extrait la première lettre du dernier mot et la passe en majuscules
// ex. marcel duchamp -> D
// ---------------------------------------
function lastfirstletter($texte) {
$pos = strrpos(trim($texte), " ");
if ($pos === false) { // pas trouvé -> 1er lettre
$texte = $texte{0};
} else {
$texte = $texte{$pos+1};
}
// remplacement des caractères accentués
$texte = strtr($texte, "\xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF", "!ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy");
$texte = strtr($texte, array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th"));
$texte = strtoupper($texte); // tout en majuscules
if (is_numeric($texte)) $texte = ""; // on supprime les chiffres
return $texte;
} // lastfirstletter
Intégration dans les boucles
On va utiliser le même principe que la contribution originale à savoir :
- une boucle pour générer la liste alphabétique
- une boucle pour stocker les auteurs dans un tableau
- une boucle pour lister les auteurs correspondant à la lettre passée en paramètre
<BOUCLE_listalpha(AUTEURS){par nom}{tout}>[(#SET{beginby[(#NOM|lastfirstletter)],[(#GET{beginby[(#NOM|lastfirstletter)]}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}})]})][<a href="[(#SELF|parametre_url{lettre,[(#NOM|lastfirstletter)]})]" [(#NOM|lastfirstletter|=={[(#ENV{lettre,A})]}|?{class='on'})]>(#NOM|lastfirstletter|unique)</a> ]</BOUCLE_listalpha>
[(#REM)2eme boucle stocke dans chaque Arraylettre les noms des auteurs]
<BOUCLE_listalphadeux(AUTEURS){par nom}{tout}>[(#SET{beginby[(#NOM|lastfirstletter)],[(#GET{beginby[(#NOM|lastfirstletter)]}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_AUTEUR}})]})]</BOUCLE_listalphadeux>
[(#REM)3eme boucle affiche les auteurs stockés dans Arraylettre si seulement ils correspondent bien à la lettre]
[<h2>(#ENV{lettre,A})</h2>]
<BOUCLE_artlettre(AUTEURS){id_auteur IN #GET{beginby#ENV{lettre,A}}}{tout}{doublons alphabet}>
<a href="#URL_AUTEUR">#NOM</a><br />
</BOUCLE_artlettre>
Note : le critère tout est facultatif, il permet de lister tous les auteurs. Si vous l’enlevez, vous n’afficherez que les auteurs qui ont déjà publiés un article dans l’espace public.
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 : |