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 Duchamps 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 1ère lettre du nom des auteurs.
ex. Marcel Duchamps renvoie D
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
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.
C’est bien joli, mais la prémisse sur laquelle votre code est basé est fausse : le nom n’est pas nécessairement le second mot de la chaîne. C’est bien sûr très courant dans le monde anglo-saxon, mais on trouve aussi des occurrences en français. Bref, ce procédé n’est pas fiable.
En fait si vous lisez bien la fonction, le nom est le dernier "mot" de la chaine, l’auteur pour avoir plusieurs prénoms (ou aucun) :
Paul Robert Parker
John Jack Gilles Ferreira
Inès Fakhir-Négrin
Cabu
...
Par contre, cela peut poser problème avec des noms à particules séparés
Pierre La Motte du Petit Bois (retourne Bois)
Angus Mac Angus (retourne Angus, dans ce cas, écrire Angus McAngus)
Barack Bush Jr
...
Dernier cas particulier qui peut poser problème :
Louis XVI
Pie VI
...
La solution proposée n’est donc pas infaillible mais permet une mise en place facile sans à avoir à renommer tous vos auteurs et reprendre les autres pages de votre squelette. Si vous voulez une solution "parfaite", utiliser la méthode de Fil (voir lien plus bas)
Je cherchai à faire ça depuis un bon moment et voilà que ça semble me tomber tout cuit dans le bec ! Mais... lorsque j’essaye de mettre cette contrib en place sur mon site qui contient 83 auteurs ( 80 6forum et 3 administrateurs) j’ai le message suivant qui se répète 5 fois : "Erreur : filtre « array_merge5 » non défini, _listalpha".
Si, dans la partie squelette, j’enlève le paramètre tout dans les 3 boucles, j’obtiens la liste de lettre correspondant aux initiales des administrateurs C L, la lettrine A mais après, plus rien ne s’affiche.
Si, dans la partie squelette, j’enlève le paramètre tout dans la 1ère boucle, j’obtiens cette fois-ci toujours bien la liste de lettre correspondant aux initiales des administrateurs C L, la lettrine A et les 4 auteurs dont le nom commence par un A.
Franchement, je n’y comprends rien. Si quelqu’un à une idée...
Je n’ai plus de message d’erreur mais au niveau fonctionnement, ce n’est pas encore ça.
Voici le résultat obtenu :
B A C L G H O J P M D E S F Y N T R W Z (lettres cliquables (non classées alphabétiquement) qui correspondent bien à toutes les initiales des noms de mes auteurs quoi que je n’ai aucun nom commençant par W)
A (en lettrine)
Alfred AGROUN
Boussad ABGRES
Jean-Stéphane ANTINIOLLE
Rezak AYAUDA
Tchao ASLIHA
Cet affichage correspond bien aux cinq auteurs dont le nom commence par la lettre A. Par contre, ce sont toujours les mêmes 5 noms qui apparaissent quelque soit la lettre sur laquelle je clique dans la liste proposée.
Au fait, dans l’article cité plus haut (Tri alphabétique tout en SPIP) il est spécifié qu’il faut être en SPIP 1.9.2 en UTF8 or, je suis bien en SPIP 1.9.2 mais ma base est en Latin1. Le problème viendrait-il de là ? Si oui, comment y remédier ?
J’ai bien le tri par nom dans mes boucles car j’ai fait un simple copier coller de votre code fourni. J’ai essayé de passer ma table auteur et le champ nom en UTF8 mais ça donne le même résultat (je n’imagine même pas devoir passer toute ma base en UTF8 et gérer tous les problèmes d’accents qui en découlerait dans tous mes articles, mes brèves, etc.)
Si cela peut donner une piste à faire en mode SPIP et à adapter ce code est plus court mais moitié en php... il était destiné aux pétitions, merci et pardon à l’auteur de ce code dont j’ai oublié l’adresse...
<BOUCLE_tot(SIGNATURES){id_article}>
</BOUCLE_tot>
<h3>Liste par ordre alphabétique des #GRAND_TOTAL signataires</h3>
Pour obtenir quelque chose de similaire la méthode donnée par Améliorer l’affichage public et la gestion des auteurs et traducteurs d’un site SPIP est plus complète, et à mon sens plus pratique. Elle impose de saisir les noms sous la forme "Nom*Prénom", et explique à SPIP comment remettre les choses à l’endroit au moment de l’affichage.
Je pense qu’il faut vraiment éviter au maximum tout ce qui est codage arbitraire. Genre ajouter des étoiles au milieu des noms.
Pour un informaticien, comme toi et moi, c’est facile, mais cela parait souvent trop ardu pour des gens qui n’y sont pas habitués et qui ont pourtant tout à fait vocation à gérer l’ espace privé.
A mon sens, le mieux serait qu’il y ait en standard dans une prochaine version de SPIP les champs "Prénom" et "Nom", et d’utiliser un plugin attendant.
Bof pour la mise en standard : perso je préfère un seul champ "nom ou pseudo". Mais ce qui serait bien c’est qu’on puisse ajouter des champs de façon simple. Tu ajouterais prénom, et ça marcherait directement.