Tri alphabétique simple - commentaires Tri alphabétique simple 2016-02-25T10:47:25Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment1885 2016-02-25T10:47:25Z <p>Ah, oui, alors voilà l'ensemble :<br class="autobr"> <strong>1 - La génération des lettres)</strong><br class="autobr"> La boucle _verif rend la lettre cliquable si il y a au moins un article dont le titre commence par la lettre concernée</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_enum(DATA){enum a,z}{" | "}> <BOUCLE_verif(ARTICLES){id_rubrique}{titre LIKE #_enum:VALEUR%}{0,1}> </BOUCLE_verif> <a href="[(#SELF|parametre_url{tri,titre}|parametre_url{lettre,#VALEUR})]">[(#_enum:VALEUR)]</a> </B_verif> <span>[(#_enum:VALEUR)]| </span> <//_verif> </BOUCLE_enum></code></pre></div> <p><strong>2 - les articles dont le titre commence par la lettre choisie</strong></p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><B_lettre> <ul> <BOUCLE_lettre(ARTICLES) {par titre} {titre LIKE #ENV{lettre}%}> <li>#TITRE</li> </BOUCLE_lettre> </ul> </B_lettre></code></pre></div> Tri alphabétique simple 2016-02-25T09:52:21Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment1884 2016-02-25T09:52:21Z <p>Salut Manu ! <br class="autobr"> Tu aurais pu ajouter la génération de liens et la vérification des premières lettres disponibles.</p> <p>Bien cordialement</p> Tri alphabétique simple 2016-02-24T17:29:52Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment1883 2016-02-24T17:29:52Z <p>Sur un assez gros site (1600 articles), j'utilisais le code proposé par Matthieu. J'avais toutefois des soucis avec le articles dont le titre commence par une lettre accentuée : <br class="autobr"> l'utilisation du parametre &lettre=E dans l'url ne renvoyait que les articles commence par E ou e, mais pas ceux commençant par é, è etc...</p> <p>Suite à l'aide de Pierre sur IRC, le code ci-dessous résoud le problème<br class="autobr"> (utilisation de LIKE)</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><B_lettre> <ul> <BOUCLE_lettre(ARTICLES) {par titre} {titre LIKE #ENV{lettre}%}> <li>#TITRE</li> </BOUCLE_lettre> </ul> </B_lettre></code></pre></div> Tri alphabétique simple mais bug après mise à jour spip 3 2013-01-14T19:34:15Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment711 2013-01-14T19:34:15Z <p>Merci Matthieu, avec ton diagnostic et les solutions proposées, j'ai résolu mon problème :-)<br class="autobr"> Encore bravo et bonne continuation !</p> Tri alphabétique simple mais bug après mise à jour spip 3 2013-01-14T15:16:46Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment707 2013-01-14T15:16:46Z <p>Bonjour Kris,</p> <p>Initialement, je pensais que c'est assez simple : « SQL HY000 » indique que tu utilises SQLite alors que l'instruction LEFT est une commande spécifique à MySQL. Je soupçonnais que tu avais trois possibilités :</p> <ol class="spip"><li> utiliser un SPIP 3 en MySQL</li><li> remplacer LEFT par SUBSTR(titre,0,1)</li><li> indiquer à SQLite que l'instruction LEFT correspond à un substr en créant la fonction adaptée, tel que chargées ici.</li></ol> <p>Mais justement, LEFT est déjà connu de SQLite, donc je ne sais pas pourquoi il râle : <a href="http://core.spip.org/projects/spip/repository/entry/spip/ecrire/req/sqlite_fonctions.php#L46" class="spip_url spip_out auto" rel="nofollow external">http://core.spip.org/projects/spip/repository/entry/spip/ecrire/req/sqlite_fonctions.php#L46</a></p> <p>Ceci dit.</p> <p>En SPIP 3, il y a un autre moyen de faire des paginations alphabétiques. On les rencontre par exemple dans les listes d'auteurs. Il suffit d'avoir un petit code php de fonction à coté de ton squelette où tu veux la pagination, et le code de la pagination :</p> <ul class="spip"><li> squelette_fonction.php : même contenu que <a href="http://core.spip.org/projects/spip/repository/entry/spip/prive/objets/liste/auteurs_associer_fonctions.php" class="spip_url spip_out auto" rel="nofollow external">http://core.spip.org/projects/spip/repository/entry/spip/prive/objets/liste/auteurs_associer_fonctions.php</a></li><li> squelette.html : extrait du contenu de <a href="http://core.spip.org/projects/spip/repository/entry/spip/prive/objets/liste/auteurs.html" class="spip_url spip_out auto" rel="nofollow external">http://core.spip.org/projects/spip/repository/entry/spip/prive/objets/liste/auteurs.html</a> soit :</li></ul> <textarea readonly cols="40" rows="20" class="spip_cadre spip_cadre_block" dir="ltr">#SET{afficher_lettres,#TRI|=={'multi nom'}|oui} #SET{p,''} <BOUCLE_lettre(AUTEURS){tout}{id_auteur?}{where?}{statut?}{recherche?}{par multi nom}{id_auteur==#GET{afficher_lettres}|?{'.*','A'}}>[ (#NOM**|extraire_multi|initiale|unique|oui) [(#SET{p,#GET{p}|concat{ #SELF|parametre_url{debutaut,@#ID_AUTEUR}|ancre_url{paginationaut}|afficher_initiale{#NOM**|extraire_multi|initiale{},#COMPTEUR_BOUCLE,#GET{debut},#ENV{nb,10}} }})] ]#SAUTER{#ENV{nb,10}|moins{#COMPTEUR_BOUCLE|=={1}|?{2,1}}}</BOUCLE_lettre>[ (#SET{p, #GET{p}|concat{ #REM|afficher_initiale{#REM,#TOTAL_BOUCLE,#GET{debut},#ENV{nb,10}} } })]</B_lettre></textarea> <p>Voilou.</p> Tri alphabétique simple mais bug après mise à jour spip 3 2013-01-14T14:10:02Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment706 2013-01-14T14:10:02Z <p>Bonjour Marcimat,<br class="autobr"> Je suis entrain de mettre à jour un site de spip 2.1.8 en spip 3 (en local pour l'instant avec wamp php 5.3.13) et j'ai l'erreur SQL suivante sur la création d'un index alpha :<br class="autobr"> Erreur SQL HY000 / 1<br class="autobr"> near "(" : syntax error<br class="autobr"> SELECT articles.titre, LEFT(titre,1), articles.id_article, articles.id_rubrique, articles.lang FROM spip_articles AS 'articles' WHERE (articles.statut = 'publie') AND ((articles.id_rubrique IN (13,88,89,90,91,92,93,94,95,96,97,135))) AND ((articles.id_rubrique NOT IN (132,133,134,135,136,137))) AND ((articles.id_article NOT IN (63,71,85,92,99,108,121,127,133,148,167,176,187,194,203,224,228,232,240,246,249,262,277,290,304,316,321,330,339,348,357,362,377,385,395,405,413,427,439,454,463,472,476,486,490,504,529,541,547,558,598,608,636,647,659,678,685,689,724,736,747,765,782,794,808,825,828,837,847,904,912,924,933,940,946,954,960,965,975,990,1006,1013,1019,1025,1043,1052,1060,1065,1071,1082,1088,1113,1609,1610,1611))) GROUP BY LEFT(titre,1) ORDER BY articles.titre</p> <p>Voici ma boucle :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><BOUCLE_alpha(ARTICLES) {branche} {id_rubrique !IN 132,133,134,135,136,137} {id_mot!=13}{par titre} {fusion LEFT(titre,1)}> <a href='[(#URL_RUBRIQUE{#ENV{id_rubrique}}|parametre_url{lettre, [(#TITRE|substr{0,1})]})]'[ class="(#EXPOSE)"]>[(#TITRE|substr{0,1})]</a> </BOUCLE_alpha></code></pre></div> <p>Et l'adresse du site ou ça fonctionne (spip 2.1.8) : <a href="http://www.urm-paca.fr/-Bouches-du-Rhone-13-" class="spip_url spip_out auto" rel="nofollow external">http://www.urm-paca.fr/-Bouches-du-Rhone-13-</a></p> <p>Aurais-tu une idée de comment je pourrais corriger ça ?</p> <p>Quoi qu'il en soit, merci pour tes nombreuses contributions :-)<br class="autobr"> Kris</p> Tri alphabétique simple 2010-08-15T18:42:00Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment234 2010-08-15T18:42:00Z <p>il faut utiliser le filtre lien_ou_expose, disponible dans SPIP 2.1 et dans spip-bonux sinon, avec la syntaxe :</p> <textarea readonly cols="40" rows="2" class="spip_cadre spip_cadre_block" dir="ltr">[(#URL_ARTICLE|lien_ou_expose{#TITRE,#EXPOSE})]</textarea> Tri alphabétique simple 2010-08-13T10:16:38Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment233 2010-08-13T10:16:38Z <p>Hello,</p> <p>J'ai un bug dans cette boucle si j'utilise AUTEURS</p> <p>Soit les 2 boucles suivantes :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code> <h2>... d'un thème </h2> <div class="alphabetique"> <B_alpha2> <p class="pagination"> <BOUCLE_alpha2(MOTS) {id_groupe=1}{par titre} {fusion LEFT(titre,1)}> <a href='[(#URL_PAGE{recherche_me}|parametre_url{lettre2, [(#TITRE|substr{0,1})]})]'>[(#TITRE|substr{0,1}) ]</a>| </BOUCLE_alpha2> </p> </B_alpha2> <br/> <B_lettre2><BOUCLE_lettre2(MOTS){id_groupe=1}{par titre}{titre==^(#ENV{lettre2,A})}><a href="#URL_MOT">#TITRE</a>&bull;</BOUCLE_lettre2></B_lettre2> </div> ----- <br /><br /> <h2> ... d'un nom </h2> <div class="alphabetique"> <B_alpha3> <p class="pagination"> <BOUCLE_alpha3(AUTEURS) {par nom} {fusion LEFT(nom,1)}> <a href='[(#URL_PAGE{recherche_me}|parametre_url{lettre3, [(#NOM|substr{0,1})]})]'>[(#NOM|substr{0,1}) ]</a>| </BOUCLE_alpha3> </p> </B_alpha3> <br/> <B_lettre3><BOUCLE_lettre3(AUTEURS) {par nom} {nom==^(#ENV{lettre3,A})}><a href="#URL_AUTEUR">#NOM</a>&bull;</BOUCLE_lettre3></B_lettre3> </div></code></pre></div> <p>Si pour les articles cela fonctionne super bien pour les auteurs il ne m'affiche pas |A|B|D|... mais bien A|A|A|B|B|D|... si j'ai 3 auteurs qui commencent par A puis 2 par B, pas en C et un en D ...</p> <p>J'ai été voir la solution de Marjorie mais elle n'est pas correcte car elle récupère les Initiales des articles pour filtrer les auteurs ... c'est sur que cela fonctionne mais c'est pas correct...</p> <p>J'ai mis le code ici => <a href="http://spip.pastebin.fr/8788" class="spip_url spip_out auto" rel="nofollow external">http://spip.pastebin.fr/8788</a></p> <p>Merci d'avance</p> <p>Paulbe</p> Tri alphabétique simple 2010-04-12T16:01:24Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment207 2010-04-12T16:01:24Z <p>Bonjour,</p> <p>J'ai enfin trouvé la pépite que je cherchais pour présenter mes articles autrement que dans un menu à rallonge ! merci, merci</p> <p>Par contre une question de style : comment mettre en évidence la lettre du contexte dans la css ? Je suis trèes en retard sur le #ENV et <code class="spip_code spip_code_inline" dir="ltr"><#EXPOSE{span,a href="#URL_ARTICLE"}>#TITRE</#EXPOSE{span,a}></code> ne fonctionne pas.</p> <p>merci<br class="autobr"> dd</p> Tri alphabétique simple 2009-03-08T13:54:44Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment91 2009-03-08T13:54:44Z <p>j'ai adapté la boucle pour une liste d'auteurs (j'en ai plus de 3000....)<br class="autobr"> ça marche très bien (test ici : <a href="http://www.radiohead.fr/spip.php?page=membres" class="spip_out" rel='nofollow external'>http://www.radiohead.fr/spip.php?page=membres</a>), à quelques soucis près : <br><span class="spip-puce ltr"><b>–</b></span> j'ai quelques noms qui commencent par des lettres, voire des signes comme ( ... et là ça coince. <br><span class="spip-puce ltr"><b>–</b></span> certaines lettres apparaissent en majuscules, d'autres en minuscules...</p> <p>Est-il possible de changer ça ?</p> <p>marjorie</p> Tri alphabétique simple 2008-10-28T20:39:06Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment29 2008-10-28T20:39:06Z <p>Attention c'est <strong>super gourmand</strong> en ressource ce type de boucle [donc il faut bien utiliser le cache ou alors on risque de faire ramer le site] :</p> <p>en effet l'expression régulière est obligée de parcourir plusieurs fois la totalité de la base. Pour s'en apercevoir, il suffit de rajouter un EXPLAIN devant les requêtes qui s'affichent en ?var_mode=profile</p> Tri alphabétique simple 2008-08-11T19:47:11Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment25 2008-08-11T19:47:11Z <p>Ouppsss, je vois que l'URL n'est pas apparue, je te la remets :</p> <p><a href="http://www.minga.net/spip.php?rubrique48" class="spip_url spip_out" rel='nofollow external'>http://www.minga.net/spip.php?rubrique48</a></p> Tri alphabétique simple 2008-08-10T20:11:41Z https://marcimat.magraine.net/Tri-alphabetique-simple#comment24 2008-08-10T20:11:41Z <p>Merci Marcimat pour cet article concis, clair !</p> <p>J'ai finalement réussi à me tirer de mon index alpha dans un modèle en procédant ainsi : je construis d'abord l'index A | B | C...(ta 1ère boucle) chaque lettre cliquable, puis, une 2e boucle va dresser la liste entière, avec affichage de la 1ère lettre sur un titre avec |unique. Et plutôt que de sélectionner la lettre dans l'index et la passer par l'URL puis récupérer avec ENV, je me suis servi des ancres. Ansi, plus besoin de ENV, je passe un #A, #B, etc... et chaque lettre unique sert de point d'ancrage.</p> <p>Et là, ça marche nickel dans un modèle.</p> <p>C'est pas clair ? Voilà le travail : <a href="http://www.minga.net/spip.php?rubrique48" class="spip_url spip_out auto" rel="nofollow external">http://www.minga.net/spip.php?rubrique48</a></p> <p>Je peux te montrer le squelette à l'occas., ce sera plus parlant. En tout cas, merci de ton aide et bravo encore !</p>