SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

273 Plugins, 191 contribs sur SPIP-Zone, 28 visiteurs en ce moment

Accueil du site > Navigation > Tris Alphabétiques > Index alphabétique > Tri alphabétique tout en SPIP

Tri alphabétique tout en SPIP

9 avril 2007 – par echo – 30 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

5 votes

Vous êtes en SPIP 1.9.2 ou supérieur et en UTF8, vous avez une liste d’articles ou d’auteurs importante ? près de 1000 ? et vous souhaitez la voir s’afficher par ordre alphabétique ainsi A|B|C|D|E|F...

Pire, vous voulez la trier en ne prenant en compte que ce qui suit l’article du titre et donc exclure le la les ou l’

Quoi ! vous voudriez en plus qu’à la demande du visiteur les articles s’affichent suivant la lettre demandée comme ici pour A :
-  animal(l’)
-  animaleries(les)
-  animaux(les)

Alors... suivez le guide !

Ajout du 4 septembre 2011

Merci de vous référer également à l’article de marcimat http://marcimat.magraine.net/Tri-al...

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.

Notes

[1Et pour passer en UTF-8 votre base MYSQL et éviter ce souci sur un vrai tri alphabétique correct essayez aussi /ecrire/?exec=convert_sql_utf8

Retour en haut de la page

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 :

    1. <BOUCLE_listalpha(ARTICLES){id_secteur}{par titre}>[(#SET{beginby[(#TITRE|onelettre)],[(#GET{beginby[(#TITRE|onelettre)]}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_ARTICLE}})]})][<a href="[(#SELF|parametre_url{lettre,[(#TITRE|onelettre)]})]" [(#TITRE|onelettre|=={[(#ENV{lettre,A})]}|?{class='expose'})]>(#TITRE|onelettre|unique)</a>|]</BOUCLE_listalpha>

    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 ?

    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

    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]

    #NOM - #NOM_SITE #URL_SITE

    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

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d'abord sur gravatar.com (gratuit et indolore) et n'oubliez pas d'indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Une licence pour un article

    18 avril 2007 – 25 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Sur une idée originale de erational, voici un plugin permettant de lier une licence à un article.

  • Plugin Parrainage

    6 novembre 2011 – <blink style='color:red;'>public|spip|ecrire:commentaire</blink>

    Permettre aux utilisateurs d’inviter leurs contacts à s’inscrire sur le site. Description Vous connaissez le web moderne et son cortège d’applis toujours en version « beta » et de buzz sur le dernier réseau à la mode ? Vous voulez vous aussi vous y (...)

  • Formulaire de contact libre

    27 avril 2011 – 36 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Dans SPIP il n’y a pas un formulaire de contact, mais autant de formulaires de contact que d’auteurs. Cette phrase de Romy, dans son article Une page de contact dans mon SPIP, pointe un petit manque de SPIP. La possibilité d’insérer rapidement un (...)

  • Plugin Mot de Passe Compliqué

    2 novembre 2007 – 16 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin ajoute un testeur de complexité de mot de passes dans les formulaires de choix de mot de passe de SPIP.

  • Navigation AJAX

    31 janvier – 18 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin permet de modifier automatiquement une parties des liens internes de manière à ce qu’ils ne déclenchent pas un chargement complet de la page cible, mais un chargement en AJAX de certains éléments spécifiés à l’avance. Il permet aussi de (...)