Tri alphabétique des auteurs - commentaires Tri alphabétique des auteurs 2012-10-19T00:42:58Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment462377 2012-10-19T00:42:58Z <p>Une approche pour un SPIP >=2<small class="fine d-inline"> </small>? serait d'utiliser le <a href="http://www.spip.net/fr_article5166.html" class="spip_out" rel='nofollow external'>critère <code class="spip_code spip_code_inline" dir="ltr">fusion</code> (produit la fonction SQL <code class="spip_code spip_code_inline" dir="ltr">GROUPE BY</code>)</a> avec la fonction SQL <code class="spip_code spip_code_inline" dir="ltr">LEFT</code> (extraire le nombre de premiers caractères indiqués, ici ce sera 1). Donc :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_listalpha1(AUTEURS){par nom}{fusion LEFT(nom,1)}> #NOM </BOUCLE_listalpha1></code></pre></div> <p>Depuis SPIP 2, je crois, on peut utiliser pratiquement <a href="http://www.weblog.eliaz.fr/article64.html" class="spip_out" rel='nofollow external'>n'importe quelle fonction PHP comme filtre...</a> on va utiliser la fonction PHP <a href="http://php.net/manual/fr/function.substr.php" class="spip_out" rel='nofollow external'><code class="spip_code spip_code_inline" dir="ltr">substr</code></a> pour n'afficher que les lettres (sinon le resultt n'a pas trop de sens) :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_listalpha1(AUTEURS){par nom}{fusion LEFT(nom,1)}> [(#NOM|substr{0,1})] </BOUCLE_listalpha1></code></pre></div> <p>Maintenant, y a plus qu'a positionner les liens :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_listalpha1(AUTEURS){par nom}{fusion LEFT(nom,1)}> [(#SET{lalettre,[#NOM|substr{0,1}]})] [<a href="[(#SELF|parametre_url{lettre,[(#GET{lalettre})]})]" [(#GET{lalettre}=={[(#ENV{lettre,A})]}|oui)class='on']> [(#GET{lalettre})] </a> </BOUCLE_listalpha1></code></pre></div> <p>Voila, voila. <br class="manualbr">(disclamer : boucle non testée, c'est pour exposer le principe... que je rescite cette contrib..)</p> Tri alphabétique des auteurs 2009-01-06T01:07:54Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment411815 2009-01-06T01:07:54Z <p>Bonjour à tous,</p> <p>J'ai essayé d'adapter cette contrib aux articles (j'ai une rubrique où mes titres d'articles sont tous sous la forme « Prénom Nom »).<br class="autobr"> Cela marche plutôt bien, le seul hic est que, comme Alain Bourdeau et Corinne, j'ai mes ancres de pagination qui ne sont pas triées alphabétiquement.</p> <p>J'ai choisi dans un premier temps de contourner cela en écrivant les ancres de pagination en « dur » dans mon squelette. C'est pas génial comme solution (pas très propre), mais ça marche.</p> <ul class="spip"><li> j'ai supprimé <code class="spip_code spip_code_inline" dir="ltr">[<a href="[(#SELF|parametre_url{lettre,[(#NOM|lastfirstletter)]})]" [(#NOM|lastfirstletter|=={[(#ENV{lettre,A})]}|?{class='on'})]>(#NOM|lastfirstletter|unique)</a> ]</code> de la boucle <code class="spip_code spip_code_inline" dir="ltr">BOUCLE_listalpha</code></li><li> J'ai inséré 26 liens entre <code class="spip_code spip_code_inline" dir="ltr">BOUCLE_listalpha</code> et <code class="spip_code spip_code_inline" dir="ltr">BOUCLE_listalphadeux</code> <ul class="spip"><li> <code class="spip_code spip_code_inline" dir="ltr"><a href="[(#SELF|parametre_url{lettre,A})]" [(#ENV{lettre,A}|=={A}|?{class='on'})]>A</a></code></li><li> <code class="spip_code spip_code_inline" dir="ltr"><a href="[(#SELF|parametre_url{lettre,B})]" [(#ENV{lettre,A}|=={B}|?{class='on'})]>B</a></code></li><li> <code class="spip_code spip_code_inline" dir="ltr"><a href="[(#SELF|parametre_url{lettre,C})]" [(#ENV{lettre,A}|=={C}|?{class='on'})]>C</a></code></li><li> etc... (notez bien que <code class="spip_code spip_code_inline" dir="ltr">#ENV{lettre,A}</code> ne change pas d'un lien à l'autre)</li></ul></li></ul> <p>En espérant trouver une solution plus propre prochainement.</p> Tri alphabétique des auteurs 2009-01-04T23:13:09Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment411780 2009-01-04T23:13:09Z <p>Bonjour,<br class="autobr"> Sur un site externe sous spip 2.0.2 j'ai ça comme titre de liste Alpha des auteurs dans la zone administrateur. La liste commence par les administrateurs avant de présenter les rédacteurs.<br class="autobr"> A G L M P V Z B C D E F H I J K N O Q R S T U W X Y</p> <p>Sur un autre site en local sous Ubuntu avec la même base j'ai une liste alpha normale. Dans ce cas les administrateurs sont mélangés aux rédacteurs<small class="fine d-inline"> </small>!!!<br class="autobr"> Comprend qui peux<small class="fine d-inline"> </small>?<br class="autobr"> Merci pour votre aide.<br class="autobr"> Alain</p> Tri alphabétique des auteurs 2008-12-08T17:17:17Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment410848 2008-12-08T17:17:17Z <p>formidable mais ya pas de s a Duchamp</p> Tri alphabétique des auteurs 2008-09-25T14:45:16Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment408800 2008-09-25T14:45:16Z <p>Bonjour,</p> <p>Super script et très utile<small class="fine d-inline"> </small>! est-ce que quelqu'un à régler le problème de l'affichage de la liste alphabétique qui est totalement désordonnée chez moi aussi (et ce malgré le critère <i>par nom</i>), cela fait deux jours que je cherche et je bloque complètement, alors merci d'avance<small class="fine d-inline"> </small>;=)</p> Tri alphabétique des signatures 2008-07-09T16:51:34Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment407385 2008-07-09T16:51:34Z <p>Pour ceux qui se cassent la tête avec une pagination alphabétique des signatures :</p> <p>- fichier mes_fonctions.php (fichier à créer dans le dossier squelettes, si vous ne l'avez déjà fait) :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><?php //squelettes/mes_fonctions.php //extrait la première lettre et la passe en majuscules function lastfirstletter($texte) { $texte = $texte{0}; // première lettre // remplacement des caractères accentués // exemple trouvé la: // http://be.php.net/manual/fr/function.strtr.php#52098 $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($texte!='&') return $texte; } ?></code></pre></div> <p>- dans votre squelette :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_tot(SIGNATURES){id_article}> </BOUCLE_tot> <?php $l=[(#ENV{lettre,a})]; //liste des lettres de l'alphabet... for ($i=ord("a");$i<=ord("z");$i++){ echo (($l !=chr($i)) ? ('<a href="#URL_PAGE{signatures,id_article=#ID_ARTICLE&lettre='.chr($i).'"><strong>'.mb_strtoupper(chr($i)).'</strong></a>') : mb_strtoupper(chr($i))); echo " "; } ?> </B_tot> <BOUCLE_listalpha (SIGNATURES){par nom_email}{tout}> [(#SET{beginby[(#NOM|lastfirstletter)],[(#GET{beginby[(#NOM|lastfirstletter)]}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_SIGNATURE}})]})] [<a href="[(#SELF|parametre_url{lettre,[(#NOM|lastfirstletter)]})]" [(#NOM|lastfirstletter|=={[(#ENV{lettre,a})]}|?{class='on'})]>(#NOM|lastfirstletter|unique)</a> ] </BOUCLE_listalpha> <BOUCLE_signatures_alpha(SIGNATURES) {nom_email==^#ENV{lettre,a}} {par nom_email}>[(#NOM)]<br /> </BOUCLE_signatures_alpha> </code></pre></div> <p>Je ne sais pas si c'est tout à fait propre mais ça marche<small class="fine d-inline"> </small>!</p> <p>Et si vous avez des problèmes d'accents utilisez le filtre <code class="spip_code spip_code_inline" dir="ltr">|utf8_encode</code> ou <code class="spip_code spip_code_inline" dir="ltr">|utf8_decode</code> (à choisir en fonction du charset de départ) sur la balise <code class="spip_code spip_code_inline" dir="ltr">[(#NOM)]</code>. Ce qui donne <code class="spip_code spip_code_inline" dir="ltr">[(#NOM|utf8_encode)]</code></p> Et quand un auteur a plus qu'un prénom<small class="fine d-inline"> </small>??? 2008-03-29T07:45:59Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404488 2008-03-29T07:45:59Z <p>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) :</p> <ul class="spip"><li> Paul Robert Parker</li><li> John Jack Gilles Ferreira</li><li> Inès Fakhir-Négrin</li><li> Cabu</li><li> ...</li></ul> <p>Par contre, cela peut poser problème avec des noms à particules séparés</p> <ul class="spip"><li> Pierre La Motte du Petit Bois (retourne Bois)</li><li> Angus Mac Angus (retourne Angus, dans ce cas, écrire Angus McAngus)</li><li> Barack Bush Jr</li><li> ...</li></ul> <p>Dernier cas particulier qui peut poser problème :</p> <ul class="spip"><li> Louis XVI</li><li> Pie VI</li><li> ...</li></ul> <p>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)</p> Et quand un auteur a plus qu'un prénom<small class="fine d-inline"> </small>??? 2008-03-28T19:25:56Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404479 2008-03-28T19:25:56Z <p>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.</p> Tri alphabétique des auteurs 2008-03-21T10:44:41Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404246 2008-03-21T10:44:41Z <p>Il me semble qu'il suffit de déclarer l'array avant la boucle,</p> <p><code class="spip_code spip_code_inline" dir="ltr">#SET{arrayarts,#ARRAY}</code></p> ordre alphabétique 2008-03-21T10:35:12Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404245 2008-03-21T10:35:12Z <p>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...</p> <div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code><BOUCLE_tot(SIGNATURES){id_article}> </BOUCLE_tot> <h3>Liste par ordre alphab&eacute;tique des #GRAND_TOTAL signataires</h3> <?php $l=[(#ENV{lettre,a})]; //liste des lettres de l'alphabet... for ($i=ord("a");$i<=ord("z");$i++){ echo (($l !=chr($i)) ? ('<a href="#URL_PAGE{signatures,id_article=#ID_ARTICLE&lettre='.chr($i).'"><strong>'.mb_strtoupper(chr($i)).'</strong></a>') : mb_strtoupper(chr($i))); echo " "; } ?> </B_tot> <BOUCLE_signatures_alpha(SIGNATURES) {nom_email==^#ENV{lettre,a}} {par nom_email}>#NOM </BOUCLE_signatures_alpha></code></pre></div> Tri alphabétique des auteurs 2008-03-21T09:01:51Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404239 2008-03-21T09:01:51Z <p>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.</p> Tri alphabétique des auteurs 2008-03-21T08:46:40Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404237 2008-03-21T08:46:40Z <p>Bonjour,</p> <p>Je pense qu'il faut vraiment éviter au maximum tout ce qui est codage arbitraire. Genre ajouter des étoiles au milieu des noms.</p> <p>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é.</p> <p>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.</p> <p>Martinus</p> ordre alphabétique 2008-03-19T21:45:20Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404208 2008-03-19T21:45:20Z <p>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.)</p> ordre alphabétique 2008-03-19T14:34:09Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404189 2008-03-19T14:34:09Z <ol class="spip"><li> bien vérifier que vous n'avez pas oublié le tri <code class="spip_code spip_code_inline" dir="ltr">{par nom}</code> dans vos boucles</li><li> essayer de passer votre base en UTF-8</li></ol> Tri alphabétique des auteurs sous PHP5 2008-03-19T09:22:47Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404165 2008-03-19T09:22:47Z <p>Merci de ta réponse,</p> <p>Je n'ai plus de message d'erreur mais au niveau fonctionnement, ce n'est pas encore ça.<br class="autobr"> Voici le résultat obtenu :</p> <p>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)</p> <p>A (en lettrine)</p> <p>Alfred AGROUN<br class="autobr"> Boussad ABGRES<br class="autobr"> Jean-Stéphane ANTINIOLLE<br class="autobr"> Rezak AYAUDA<br class="autobr"> Tchao ASLIHA</p> <p>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.</p> <p>Au fait, dans l'article cité plus haut (<a href="http://www.spip-contrib.net/Tri-alphabetique-tout-en-SPIP" class="spip_out" rel='nofollow external'>Tri alphabétique tout en SPIP</a>) 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à<small class="fine d-inline"> </small>? Si oui, comment y remédier<small class="fine d-inline"> </small>?</p> <p>Bruno.</p> Tri alphabétique des auteurs sous PHP5 2008-03-18T15:33:35Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404131 2008-03-18T15:33:35Z <p>c'est du à l'évolution de la fonction array_merge de php4 à php5</p> <p><strong>si vous êtes en PHP4</strong><br class="manualbr">utiliser l'exemple de la contrib avec le filtre <i>array_merge</i></p> <p><strong>si vous êtes en PHP5</strong></p> <ol class="spip"><li> dans vos boucles remplayer les <i>array_merge</i> par <i>array_merge5</i></li><li> ajouter dans mes_fonctions.php :</li></ol><div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>function array_merge5 ($array1, $array2) { return array_merge ((array)$array1, (array)$array2); }</code></pre></div> <p>il faudrait écrire un filtre générique indépendant de la version de PHP ....</p> Tri alphabétique des auteurs 2008-03-18T15:17:43Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404130 2008-03-18T15:17:43Z <p>Je cherchai à faire ça depuis un bon moment et voilà que ça semble me tomber tout cuit dans le bec<small class="fine d-inline"> </small>! 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 «<small class="fine d-inline"> </small>array_merge5<small class="fine d-inline"> </small>» non défini, _listalpha".</p> <p>Si, dans la partie squelette, j'enlève le paramètre <i>tout</i> 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.</p> <p>Si, dans la partie squelette, j'enlève le paramètre <i>tout</i> dans la 1<sup class="typo_exposants">re</sup> 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.</p> <p>Franchement, je n'y comprends rien. Si quelqu'un à une idée...</p> <p>D'avance merci.</p> Tri alphabétique des auteurs 2008-03-17T10:58:15Z https://contrib.spip.net/Tri-alphabetique-des-auteurs#comment404085 2008-03-17T10:58:15Z <p>Pour obtenir quelque chose de similaire la méthode donnée par <a href='https://contrib.spip.net/Ameliorer-l-affichage-public-et-la' class="spip_in" rel='nofollow'>Améliorer l'affichage public et la gestion des auteurs et traducteurs d'un site SPIP</a> 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.</p>