On commence par la fonction qui permet d’extraire la première lettre.
On met cette fonction dans le fichier squelettes/mes_fonctions.php
qui est du pur php, et commençera donc par <?php pour finir par ?>
Vous pouvez déjà voir ce que ça donne dans une boucle !
[(#TITRE|onelettre)] devrait retourner A ou B ou Z
Ajout du 4 septembre 2011
Essayez la solution de marcimat avec le code php |substr{0,1}
<B_alpha>
<p class="pagination">
<BOUCLE_alpha(ARTICLES) {par titre} {fusion LEFT(titre,1)}>
<a href='[(#URL_PAGE{titi}|parametre_url{lettre, [(#TITRE|substr{0,1})]})]'>
[(#TITRE|substr{0,1})]
</a>
</BOUCLE_alpha>
</p>
</B_alpha>Utiliser #ARRAY
Avec SPIP 1.9.2 on va s’amuser sur la possibilité de stocker un array pour l’envoyer dans une boucle, on a donc deux boucles distinctes :
- BOUCLE_listalpha n’affiche qu’une seule fois la première lettre et grace à SET{beginby[(#TITRE|onelettre)]...
stocke dans un tableau (array) la liste des articles de cette lettre,
pour tester le tableau de la lettre B on fera [(#GET{beginbyB}|print_r)]
- BOUCLE_artlettre, la deuxième boucle, récupère ensuite le tableau ainsi crée, grace à #ENV et si il n’y a pas de lettre demandé on commence par A #GET{beginby#ENV{lettre,A}simple non ?
On colle donc le code suivant dans le squelette de son choix, par exemple dans rubrique-5.html qui pourrait correspondre à un catalogue ou chaque livre est un article.
Toujours plus loin !
Ah ! mais... il y a l’animal et les animaux qui se sont mis sous le L ! ça ne va pas du tout ! et peut être aussi les lettres ne sont pas l’ordre alphabétique...
On reprend mes_fonctions.php et après on va changer le critère de tri dans la première BOUCLE (merci hubombing)
On remplace donc le critère par titre de la première BOUCLE par parsansL
Les Hics
Quelques hics subsistent, les mots avec accents ou avec par exemple Œ, ne sont pas classés dans la base, ainsi L’Œuvre ou L’écureuil se retrouve en bas de page des A. Ajout du 4 septembre 2011 [1]
On commence donc par une boucle simple qui va seulement chercher chaque lettre de l’alphabet, évidemment il vous faut suffisamment d’articles !
Pour résoudre l’affichage des accents dans leur bonne lettre, sachant que les accents du genre éèô et le cher e dans l’o sont stockés dans le tableau array du A, il faut empêcher l’affichage des articles commençant par L’Œuvre et réinterroger le tableau A en mettant une 4em boucle doublons alphabet
Eh mais, en plus mes articles ne sont pas du tout rangés là !!? Psst, Il manque 3 fonctions encore !
Au final
Voici donc le code final, avec le nouveau critère de tri et les filtres ajoutés
Avec du style s’il vous plait !
Et voila le résultat
À l’épreuve du site Quilombo rubrique catalogue.

Vous pouvez adapter le même principe aux auteurs ou aux mots clefs.



Vos commentaires
# Le 1er septembre 2011 à 11:25, par mrskater
En réponse à : Tri alphabétique tout en SPIP
Bonjour,
j’utilise le code suivant :
Tout marche super bien seulement je souhaiterais afficher les lettres (inactives) pour lesquelles il n’y a pas d’article. Comment faire ?
Merci d’avance,
Mathieu.
# Le 4 septembre 2011 à 19:28, par echo
En réponse à : Tri alphabétique tout en SPIP
Déjà il y a plus simple pour extraire la première lettre avec le filtre php
|substr{0,1}mieux vaut d’ailleurs se référer à l’article de marcimat sur son site voir http://marcimat.magraine.net/Tri-al...Mais dans ton cas, si tu veux toutes les lettres de l’alphabet, il faudrait écrire en dur les lettres que tu souhaites, quelque chose du style
<ul><li><a href="[(#SELF|parametre_url{lettre,a})]">A</a></li>
<li><a href="[(#SELF|parametre_url{lettre,b})]">B</a></li>
...etc
</ul>
Enfin, c’est ce qui me semble le plus simple.
Répondre à ce message
# Le 15 avril 2011 à 14:24, par fd
En réponse à : Tri alphabétique tout en SPIP
merci c’est excellent !! bon ca maffiche 0-9 dans le menu même sil ny a rien.
Autrement question concernant la reécriture d’url. Actuellement ca sort ainsi /glossaire.html&lettre=a , comment faire pour que les urls sortent propres du style : /glossaire-a.html ??
Répondre à ce message
# Le 7 mars 2011 à 12:52, par Mathieu Doublet
En réponse à : Tri alphabétique tout en SPIP
Bonjour,
je ne me sers pas de tout (simplement des deux premières étapes) et ça marche du feu de dieu pour l’instant.
Un grand merci !
Répondre à ce message
# Le 1er décembre 2010 à 11:29, par ?
En réponse à : Tri alphabétique tout en SPIP
Bonjour,
quelqu’un utilise cette contrib sous spip 2.1 ?
si oui quelles modifications sont nécessaires pour que ça marche ?
# Le 1er décembre 2010 à 11:41, par echo
En réponse à : Tri alphabétique tout en SPIP
Les squelettes sont dispo sur le site de Quilombo voir le pied de page.
Si tu suis l’inclure ça te donne le squelette : http://www.librairie-quilombo.org/squelettes/inc-catalogue.html
La boucle CONDITIONS est faite grace au plugin spip_bonux.
Pour les filtres, je pense qu’il faudra adapter.
# Le 1er décembre 2010 à 13:15, par ?
En réponse à : Tri alphabétique tout en SPIP
ça marche super bien !
merci !
Répondre à ce message
# Le 16 février 2010 à 11:59, par jacot
En réponse à : Tri alphabétique tout en SPIP
Attention, ce plugin ne fonctionne pas en 2.0.10. En 2.0.07, no problem.
En 2.0.10, j’ai des erreurs sur array_merge() [function.array-merge] : Argument #1 is not an array in composer.php(51) : eval()’d code on line 190. A suivre...
# Le 5 juin 2010 à 09:14, par Pedro
En réponse à : Tri alphabétique tout en SPIP
si ca fonctionne en 2.0.10 (avec PHP5), il suffit de rajouter ce qu’a dit marc dans un commentaire précédent dans mes_fonctions.php
pour mémoire sa solution
function array_merge5 ($array1, $array2) {return array_merge ((array)$array1, (array)$array2);
}
un exemple qui marche http://reflexes.samizdat.net/spip.php?rubrique16
Répondre à ce message
# Le 17 mars 2010 à 17:30, par ?
En réponse à : Tri alphabétique tout en SPIP
finalement cela fonctionne t’il avec spip 2 ?
ou existe t’il un plugin quelque part ?
merci
Répondre à ce message
# Le 20 octobre 2008 à 12:18, par christophe
En réponse à : spip 2
bonjour,
Je n’arrive pas à faire fonctionner cette contribution avec spip 2. Est-ce que vous confirmez ?
J’ai fait quelques essais pour tenter de corriger, mais je tourne en rond. Avez-vous l’intention de mettre à jour cette contribution pour spip 2 ?
De plus, sur le site donné en exemple (librairie Quilombo), les pages restent vides, seul l’abécédaire apparaît. C’est justement ce que j’obtiens avec spip 2.
Répondre à ce message
# Le 13 août 2007 à 10:38, par tchouk
En réponse à : Tri alphabétique tout en SPIP
Bonjour à tous !
Excellente contribution !
Jusque là tout fonctionnait bien sauf depuis que mon hebergeur est passé en PHP 5 (1and1) je me retrouve avec des erreurs pour lire ma liste alphabétique.
J’ai systématiquement ce message :
Warning : array_merge() [function.array-merge] : Argument #1 is not an array in /homepages/41/d140278309/htdocs/www/ecrire/public/composer.php(46) : eval()’d code on line 93
J’ai essayé la solution donné par Marc mais rien n’y fait.
Quelqu’un pourrait-il m’aider ?
Merci
# Le 25 août 2007 à 19:46, par tchouk
En réponse à : Tri alphabétique tout en SPIP
Personne ne rencontre le même problème ?
# Le 18 mars 2008 à 11:19, par joz
En réponse à : Tri alphabétique tout en SPIP
Bonjour,
j’ai le même problème
Warning: array_merge() [function.array-merge]: Argument #1 is not an array in ...la proposition de Marc pour php5 ne change rien chez moi :-(
Comment vous faites pour que ça fonctionne chez vous ???
joz
# Le 30 avril 2008 à 18:12, par PROWEBSERVER
En réponse à : Tri alphabétique tout en SPIP
petite erreur dans le code de base
version corrigée :
(#SETbeginby[(#TITRE,(#ARRAY#GETbeginby[(#TITRE|array_merge#ARRAY#COMPTEUR_BOUCLE,#ID_ARTICLE)])][(#TITRE})]" [(#TITRE|onelettre|=={[(#ENV{lettre,A})]}|?{class='expose'})]>(#TITRE|onelettre|unique)|]
Répondre à ce message
# Le 30 avril 2008 à 14:31, par jocelyne
En réponse à : Adaptation aux signataires de pétition
De mon côté, j’ai cherché à l’adapter aux signataires de pétition.
Dans le fichier mes_fonctions.php, j’ai du remplacer (solution que je dois ici à une aide extérieure, merci Arnaud) :
$pos = strrpos(trim($texte), « ») ;
if ($pos === false) // pas trouvé -> 1er lettre
$texte = $texte0 ;
else
$texte = $texte$pos+1 ;
par simplement :
$texte = $texte0 ;
Pour les boucles :
(#SETbeginby[(#NOM,(#GETbeginby[(#NOM|array_merge5#ARRAY#COMPTEUR_BOUCLE,#ID_SIGNATURE)])]
[(#NOM})]" [(#NOM|lastfirstletter|=={[(#ENV{lettre,A})]}|?{class='on'})]>(#NOM|lastfirstletter|unique) | ]
[(#REM) Stockage des noms des signataires dans Arraylettre]
(#SETbeginby[(#NOM,(#GETbeginby[(#NOM|array_merge5#ARRAY#COMPTEUR_BOUCLE,#ID_SIGNATURE)])]
[(#REM) Affichage des signataires stockés dans Arraylettre]
Cependant, je ne trouve pas la solution pour intégrer également une pagination dans l’affichage des signataires stockés dans Arraylettre. Si quelqu’un a une idée...
Répondre à ce message
# Le 24 janvier 2008 à 12:01, par erational
En réponse à : Tri alphabétique tout en SPIP : se débarasser des chiffres
si vous voulez vous débarasser des titres commencant par des chiffres
ajouter cette ligne dans la fonction onelettre (avant le return)
if (is_numeric($texte)) $texte = "";Répondre à ce message