SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 229 visiteurs en ce moment

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

Tri alphabétique tout en SPIP

9 avril 2007 – par touti – 53 commentaires

5 votes

EDIT Mars 2016

Pour afficher une liste alphabétique en SPIP3 (ou bien en SPIP2 avec le plugin iterateurs) il suffit de faire

  1. <BOUCLE_alpha(DATA){enum A,Z}>[<a href='##VALEUR'>(#VALEUR)</a>]</BOUCLE_alpha>

Ensuite remplir les tableaux de chaque lettre avec les titres et identifiants commençant par cette lettre, par exemple sur des mots :

  1. <BOUCLE_tableaux(MOTS){id_groupe=4}{par titre}>
  2. [(#SET{premierelettre,[(#TITRE|substr{0,1})]})]
  3. [(#SET{beginby[(#GET{premierelettre}|unique)],#ARRAY})]
  4. [(#SET{beginby[(#GET{premierelettre})],[(#GET{beginby[(#GET{premierelettre})]}|array_merge{#ARRAY{#TITRE,#ID_MOT}})]})]
  5. </BOUCLE_tableaux>

Télécharger

Il ne reste plus qu’à utiliser une boucle DATA à l’intérieur d’une boucle alphabétique pour y rappeler chaque tableau

  1. <BOUCLE_alpha2(DATA){enum A,Z}>
  2. <B_data>
  3. [<h1 id="#VALEUR">(#VALEUR)</h1>]
  4. <ul>
  5. <BOUCLE_data(DATA){source tableau, #GET{beginby#VALEUR}}{par cle}>
  6. <li><a href="#URL_MOT{#VALEUR}">#CLE</a></li>
  7. </BOUCLE_data>
  8. </ul>
  9. </B_data>
  10. </BOUCLE_alpha2>

Télécharger


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 !

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 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

Dernière modification de cette page le 30 mars 2016

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 10 décembre 2015 à 12:39, par Seb K En réponse à : Tri alphabétique tout en SPIP

    Salut,

    J’utilise parfaitement cette contribution et je suis ravi du résultat. Merci pour ce travail !

    Cependant j’aimerais pouvoir classer chaque mots du titre par ordre alphabétique

    CAD :

    pour un article ayant pour titre : Adaptation Tiller pour montage et entretien des planches

    J’aimerais pouvoir le retrouver dans ’A’ pour Adaptation, mais aussi dans ’T’ pour Tiller et aussi dans ’M’ pour montage etc ...

    Une idée là dessus ?

    • Le 10 décembre 2015 à 13:14, par touti En réponse à : Tri alphabétique tout en SPIP

      Bonjour,
      merci de tes remerciements, à mon avis la boucle DATA est plus simple à mettre en œuvre.
      Pour ton problème, tu pourrais construire un array pour chaque titre avec un explode sur l’espace vide, où chaque valeur sera un mot.
      http://www.spip.net/fr_article5671.html
      Sauf que tu devras constituer un array pour retirer les mots comme pour,de,avec,quoi,qui,donc,etc …

      Pour faire simple, à moins que tu aies envie de te décarcasser en php, je suppose (car je ne sais pas ce que tu souhaites faire exactement) qu’un système de mots clefs serait plus adapté.
      ++

    • Le 10 décembre 2015 à 13:31, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Merci pour ta réponse rapide
      Je débute totalement avec spip et son environnement et encore plus avec Php ... Je ne suis pas très à l’aise avec tout ça.
      J’ai pensé à utiliser les mots clés au départ mais les articles sont générés depuis un site syndiqué et j’ai plus d’un millier d’articles à traiter, jouer avec les mots clés me prendrait un temps fou
      La solution Tri alphabétique tout en spip me va bien du coup mais il me manque la partie énoncée plus haut.

      Un petit coup de main là dessus ne serait pas de refus.

      Merci d’avance

    • Le 11 décembre 2015 à 21:03, par tcharlss En réponse à : Tri alphabétique tout en SPIP

      Hello,

      Voici une solution. Ça reprend le même principe que l’article de Touti, à savoir stocker les lettres utiisées et les identifiants des articles correspondants, afficher un menu alphabet, et enfin afficher les articles de la lettre sélectionnée, mais avec quelques différences formelles.

      L’affichage est minimaliste, c’est à adapter bien sûr.

      Dans le squelette :

      1. [(#REM) 1) On fait un tableau contenant les lettres et les articles correspondants.
      2. Ces boucles n'affichent rien, elles servent juste à stocker les données. ]
      3. #SET{lettres,#ARRAY}
      4. <BOUCLE_articles(ARTICLES)>
      5. [(#REM) on itère sur les 1ères lettres des mots du titre ]
      6. <BOUCLE_lettres_article(DATA){source table, #TITRE|premieres_lettres}>
      7. [(#REM) on récupère les identifiants des articles de la lettre, et on y ajoute celui de l'article ]
      8. #SET{ids,#GET{lettres/#VALEUR}|sinon{#ARRAY}|push{#ID_ARTICLE}}
      9. [(#REM) on met à jour la lettre et les ids associés dans le tableau ]
      10. #SET{lettres,#GET{lettres}|array_merge{#ARRAY{#VALEUR,#GET{ids}}}}
      11. </BOUCLE_lettres_article>
      12. </BOUCLE_articles>
      13.  
      14. [(#REM) 2) Affichage du menu alphabet, il n'affiche que les lettres réellement utilisées dans les articles. ]
      15. <B_alphabet>
      16. <p class="pagination">
      17. <BOUCLE_alphabet(DATA){source table, #GET{lettres}|array_keys}{par valeur}>
      18. [(#ENV{lettre}|non|et{#COMPTEUR_BOUCLE|=={1}}|oui)#SET{lettre,#VALEUR}]
      19. <a href='[(#SELF|parametre_url{lettre,#VALEUR})]'>#VALEUR</a>
      20. </BOUCLE_alphabet>
      21. </p>
      22. </B_alphabet>
      23.  
      24. [(#REM) 3) Affichage des articles correspondant à la lettre active (= dans l'URL) ]
      25. #SET{lettre,#ENV{lettre,#GET{lettre}}}
      26. <B_articles_lettre>
      27. <ul>
      28. <BOUCLE_articles_lettre(ARTICLES){id_article IN #GET{lettres/#GET{lettre}}}>
      29. <li>#TITRE</li>
      30. </BOUCLE_articles_lettre>
      31. </ul>
      32. </B_articles_lettre>

      Télécharger

      Dans mes_fonctions.php :

      1. /**
      2.  * Retourne une liste de lettres correspondant aux 1ères lettres des mots d'un texte.
      3.  *
      4.  * @param string $texte
      5.  * @return string|array
      6.  */
      7. function premieres_lettres($texte) {
      8.  
      9. // liste des mots
      10. if ($mots = str_word_count($texte, 1)) {
      11.  
      12. // on stocke la 1ère lettre de chaque mot dans un tableau
      13. $lettres = array();
      14. foreach($mots as $mot) {
      15. // on ne prend en compte que les mots d'au moins 4 lettres
      16. if (strlen($mot) > 3) {
      17. $lettres = array_merge($lettres, array(strtolower(substr($mot,0,1))));
      18. }
      19. }
      20.  
      21. if (count($lettres)) {
      22. $texte = $lettres;
      23. }
      24. }
      25.  
      26. return $texte;
      27. }

      Télécharger

    • Le 11 décembre 2015 à 21:51, par Seb K En réponse à : Tri alphabétique tout en SPIP

      C’est carrément ce qu’il fallait, quelques retouches pour faire ça beau prop’ et c’est nickel !

      Merci beaucoup

    • Le 12 décembre 2015 à 11:55, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Salut,

      Merci pour le coup de patte, j’ai effectué quelques corrections sur la fonction :

      1. function premieres_lettres($texte) {
      2.  
      3. // liste des mots
      4. if ($mots = str_word_count($texte, 1, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ')) {
      5. // on stocke la 1ère lettre de chaque mot dans un tableau
      6. $lettres = array();
      7.  
      8. foreach($mots as $mot) {
      9. // on ne prend en compte que les mots d'au moins 4 octets
      10. if (strlen($mot) > 3) {
      11. $lettres = array_merge($lettres, array(strtoupper(substr($mot,0,1))));
      12.  
      13. }
      14. }
      15.  
      16. if (count($lettres)) {
      17. $texte = $lettres;
      18.  
      19. }
      20. }
      21.  
      22. return $texte;
      23. }

      Télécharger

      Il ne me manque plus que de pouvoir surligner ou souligner le mot retenu pour la lettre selectionnée.

    • Le 13 décembre 2015 à 11:31, par touti En réponse à : Tri alphabétique tout en SPIP

      Tiens, les envois de notification de ce forum sont très aléatoires je n’ai pas reçu les 2 derniers messages.
      Tu peux aussi constituer et ajouter un tableau des mots interdits

      1. function premieres_lettres($texte) {
      2.  
      3. //array des mots interdits à compléter
      4. $mots_interdits = array('avec','sans','pour','etc');
      5.  
      6. // liste des mots
      7. if ($mots = str_word_count($texte, 1, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ')) {
      8. // on stocke la 1ère lettre de chaque mot dans un tableau
      9. $lettres = array();
      10.  
      11.  
      12. foreach($mots as $mot) {
      13. // on ne prend en compte que les mots d'au moins 4 octets
      14. if (strlen($mot) > 3 AND !in_array($mot,$mots_interdits)) {
      15. $lettres = array_merge($lettres, array(strtoupper(substr($mot,0,1))));
      16.  
      17. }
      18. }
      19.  
      20. if (count($lettres)) {
      21. $texte = $lettres;
      22.  
      23. }
      24. }
      25.  
      26. return $texte;
      27. }

      Télécharger

    • Le 13 décembre 2015 à 13:48, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Génial tout ça !!

      Par contre une idée pour surligner les mots de la liste associés à ceux de la lettre en cours ?

      En tous cas Merci beaucoup !!

    • Le 15 décembre 2015 à 00:05, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Salut,

      Finalement le tri ne fonctionnait pas tout à fait comme il faut dans le sens ou je me suis retrouvé avec des tris un peu bizarre.
      J’ai bien fait le ménage dans ce que je voulais et ajouté quelques bricoles pour que ça tourne. Cette fois j’arrive à un beau résultat.
      à la seule exception c’est qu’il me colle les doubles point dans le classement de la lettre N ?!

      J’ai tourné le truc dans tous les sens mais rien y fait. Je n’arrive pas à me débarrasser de ce fichu double point.
      Je ne sais vraiment pas quoi faire

      Voici la fonction que j’ai adapté :

      1. /**
      2.  * Retourne une liste de lettres correspondant aux 1ères lettres des mots d'un texte.
      3.  *
      4.  * @param string $texte
      5.  * @return string|array
      6.  */
      7. function premieres_lettres($texte) {
      8. //print_r($texte);
      9. $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      10. $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");
      11. $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"));
      12.  
      13. //array des mots interdits à compléter
      14. $mots_interdits = array('&#58;','quot','sous','avec','sans','pour','etc','dans','general','autoconstruire','autoconstruction','autoconstruites','autoconstruits','autoconstruite','Autoconstruction');
      15.  
      16.  
      17. // liste des mots
      18. if ($mots = str_word_count($texte, 1, $a)) {
      19. // on stocke la 1ère lettre de chaque mot dans un tableau
      20. $lettres = array();
      21.  
      22. foreach($mots as $mot) {
      23. // on ne prend en compte que les mots d'au moins 4 octets
      24. if (strlen($mot) > 3 AND !in_array($mot,$mots_interdits)){
      25. $lettres = array_merge($lettres, array(strtoupper(substr($mot,0,1))));
      26.  
      27. //print_r($lettres);
      28. }
      29. }
      30.  
      31. if (count($lettres)) {
      32. $texte = $lettres;
      33.  
      34. //print_r($texte);
      35. }
      36. }
      37.  
      38. return $texte;
      39. }

      Télécharger

      aussi je reviens à la charge avec mon surlignage, j’aimerais bien que les mots ou la première lettre des mots listés pour la lettre selectionnée soient surlignés. Une idée ?

      Merci d’avance :)

    • Le 15 décembre 2015 à 04:26, par touti En réponse à : Tri alphabétique tout en SPIP

      Bonsoir,
      je ne vois pas bien pour les deux points de la lettre N …
      Concernant le surlignage, un javascript serait surement mieux, voici une fonction créée pour l’occasion en php / SPIP qui est le moins gourmande possible.
      Pour récupérer la lettre appelée dans l’url, il te faut vérifier que #ENV{lettre} fonctionne bien, à partir de là, il te faut tester la première lettre de chaque mot avec

      [(#TITRE|detect_lettrine{#ENV{lettre}})]

      1. /**
      2.  * Retourne la première lettre d'une chaine encadré d'un strong
      3.  * seulement si cette lettre correspond au caractère demandé
      4.  *
      5.  * @param string $chaine
      6.  * Chaine de recherche
      7.  * @param string $lettre
      8.  * Caractère recherché
      9.  * @return string
      10.  * La chaine modifiée
      11.  * @example
      12.  * ```
      13.  * #SET{titre,'Écriture te voila !'} [(#GET{titre}|detect_lettrine{'e'})]
      14.  * ```
      15.  *
      16. **/
      17. function detect_lettrine($chaine,$lettre){
      18. //fonction SPIP pour le filtre url_nettoyer qui eliminera les accents
      19. include_spip('action/editer_url');
      20. //la première lettre de la chaine
      21. $first_lettre = mb_substr($chaine,0,1,'UTF-8');
      22. $length = strlen($first_lettre);
      23. //si elle correspond à la lettre de l'url
      24. if(strtolower(url_nettoyer($first_lettre,2)) == $lettre){
      25. $lettre_avec_encadrement = '<strong class="lettrine">'.$first_lettre.'</strong>';
      26. $chaine = substr_replace($chaine, $lettre_avec_encadrement, 0, $length);
      27. }
      28. return $chaine;
      29. }

      Télécharger

    • Le 15 décembre 2015 à 13:49, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Merci pour cette réponse, mais je n’arrive pas à implémenter cette solution ...
      y’aurait il possibilité de m’envoyer un exemple dans une boucle ?

      Merci d’avance

    • Le 15 décembre 2015 à 14:03, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Ah erratum, j’ai reussi à le faire fonctionner mais il ne me fait la selection que sur le premier mot de la chaine alors qu’il serait plus pertinent de faire le surlignement sur tous les mots de la chaine qui commencent par la lettre, je continue à creuser ...

      En tous cas merci ça se présente plutot bien :) :) :)

    • Le 15 décembre 2015 à 14:12, par touti En réponse à : Tri alphabétique tout en SPIP

      Qu’est-ce que tu n’arrives pas à faire ?
      Quelle est la balise qui affiche ta liste des items dans ton squelette ? si je suppose que c’est un #TITRE tu mets
      [(#TITRE|detect_lettrine{#ENV{lettre}})]
      si c’est le #CHAPO tu mets
      [(#CHAPO|detect_lettrine{#ENV{lettre}})]
      Dans l’url tu ajoutes le parametre lettre=a (ou lettre=b …)
      et sur la liste des titres, chaque titre commençant par a comme « Ah que la vie est belle » ou « Anticipation planétaire » verra sa première lettre mise en gras.
      Tu peux aussi jouer sur la class CSS .lettrine{color:red} pour colorer cette première lettre trouvée.
      ++

    • Le 15 décembre 2015 à 14:19, par Seb K En réponse à : Tri alphabétique tout en SPIP

      comme dit plus haut j’ai réussi à le faire fonctionner, j’ai remplacé strtolower par strtoupper et ça marche. par contre, toujours comme dit plus haut c’est à chaque mots qui commencent par la lettre selectionnée qu’il serait souhaitable de surligner.
      Je me demande si intégrer la partie surlignement

      1. $lettre_avec_encadrement = '<strong class="lettrine">'.$first_lettre.'</strong>';

      ne serait pas plus pratique.

    • Le 15 décembre 2015 à 14:28, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Avec la fonction « premiere_lettres » utilisée plus haut j’obtiens un array :

      Array ( [0] => S ) Array ( [0] => S [1] => C ) 

      Pour un titre : Semis • Canne à semer ou Semis et semer devraient êtres surlignés.

      [mode boulet]

    • Le 15 décembre 2015 à 14:34, par touti En réponse à : Tri alphabétique tout en SPIP

      Oui, tu dois adapter le code, mais il n’aurait pas été aussi lisible, il faut récupérer les mots du titre dans un array $mots et faire un

    • Le 15 décembre 2015 à 15:31, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Je m’enmele les crayons là dessus ... je surligne ARRAY et mon tableau ne s’affiche plus ...

      Help

    • Le 15 décembre 2015 à 18:36, par touti En réponse à : Tri alphabétique tout en SPIP

      Bon bon bon,
      c’est à la fin, je suppose que c’est bien au moment de l’affichage des titres qu’il faut la fonction detect_lettrine ?

      1. [(#REM) 3) Affichage des articles correspondant à la lettre active (= dans l'URL) ]
      2. #SET{lettre,#ENV{lettre,#GET{lettre}}}
      3. <B_articles_lettre>
      4. <ul>
      5. <BOUCLE_articles_lettre(ARTICLES){id_article IN #GET{lettres/#GET{lettre}}}>
      6. <li>[(#TITRE|detect_lettrine{#ENV{lettre}})]</li>
      7. </BOUCLE_articles_lettre>
      8. </ul>
      9. </B_articles_lettre>

      Télécharger

      Je disais que tu peux modifier cette fonction avec à son début la construction d’un array des mots de la chaine de manière à ce que chaque mot soit testé (donc avec un foreach) avant d’être retourné modifié ou pas, enfin, si j’ai bien compris ce que tu veux faire.
      Peux-tu mettre une URL de test pour que l’on puisse voir ce que tu veux faire ?

    • Le 15 décembre 2015 à 20:00, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Pas de soucis pour la mise en place, dans le squelette, ça ça roule.
      C’est justement l’array que je n’arrive pas à construire et à tester.
      Je bosse en local, du coup pas possible de mettre une URL de test :/
      J’aimerais pouvoir surligner chaque lettre dans chaque titre comme sur le l’image jointe.

      Merci pour le coup de main !

      PNG - 30.1 ko
    • Le 16 décembre 2015 à 23:06, par Seb K En réponse à : Tri alphabétique tout en SPIP

      Je crois que je suis bon pour une cure d’aspirine et surtout de PHP ...
      Je n’arrive résolument pas à reconstituer la chaine de caractères après l’avoir passée dans un tableau ...

      J’ai tenté un array sur la fonction detect_lettrine mais je n’arrive résolument pas à reconstituer la chaine à partir de cet array.

      Exemple :

      1. function detect_lettrine($texte,$lettre){
      2.  
      3. //fonction SPIP pour le filtre url_nettoyer qui eliminera les accents
      4. include_spip('action/editer_url');
      5.  
      6. print_r($texte);
      7.  
      8. //compte les mots de chaque chaine et les place dans un tableau
      9.  
      10. if ($mots = str_word_count($texte, 1)) {
      11.  
      12. print_r($mots);
      13.  
      14. // on stocke la 1ère lettre de chaque mot dans un tableau
      15. $first_lettre = array();
      16.  
      17. foreach($mots as $mot) {
      18.  
      19. //print_r($mot);
      20.  
      21. //je récupère la première lettre de la chaine
      22.  
      23. $first_lettre = mb_substr($mot,0,1,'UTF-8');
      24. $first_lettre = strtoupper($first_lettre);
      25. $first_lettre = str_replace($lettre, '<strong class="lettrine">'.$lettre.'</strong>', $first_lettre);
      26.  
      27.  
      28.  
      29.  
      30. //je remplace tous les caractère correspondants à la lettre correspondant à l'url
      31.  
      32. print_r($first_lettre);
      33. //print_r($length);
      34. //si elle correspond à la lettre de l'url
      35.  
      36. if(strtoupper(url_nettoyer($first_lettre,2)) == $lettre){
      37.  
      38. $lettre_avec_encadrement = '<strong class="lettrine">'.$first_lettre.'</strong>';
      39.  
      40. //print_r($lettre_avec_encadrement);
      41.  
      42. $mots = substr_replace($mots, $lettre_avec_encadrement, 0, $length);
      43.  
      44. //print_r($mots);
      45. }
      46. }
      47. }
      48. return $texte;
      49.  
      50. }

      Télécharger

      J’ai aussi tenté une adaptation de la fonction premiere_lettre indiquée pour l’affichage du menu alphabet mais là encore je n’arrive pas à reconstituer la chaine.

      Exemple :

      1. function premieres_lettres_sur($texte, $lettre) {
      2. //print_r($texte);
      3. $texte = sansle($texte);
      4. $texte = unicode2charset(utf_8_to_unicode($texte), 'iso-8859-1');
      5.  
      6. $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
      7. $b = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
      8. $texte=strtr($texte, $a, $b); // on retire les accents
      9. $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");
      10. $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"));
      11.  
      12. //array des mots interdits à compléter
      13. $mots_interdits = array('guide','','Autres','autre','&#58;','quot','sous','avec','sans','pour','etc','dans','general','autoconstruit','autoconstruire','autoconstruction','autoconstruites','autoconstruits','autoconstruite','Autoconstruction');
      14. //print_r($mots_interdits);
      15.  
      16. // liste des mots
      17. if ($mots = str_word_count($texte, 1, $a)) {
      18. // on stocke la 1ère lettre de chaque mot dans un tableau
      19. $lettres = array();
      20.  
      21. foreach($mots as $mot) {
      22. //print_r($mots);
      23. // on ne prend en compte que les mots d'au moins 4 octets
      24. if (iconv_strlen($mot) > 3 AND !in_array($mot,$mots_interdits)){
      25. $lettres = array_merge($lettres, array(strtoupper(substr($mot,0,1))));
      26. $lettres = str_replace($lettre, '<strong class="lettrine">'.$lettre.'</strong>', $lettres);
      27. //$texte = implode($lettres);
      28.  
      29. //print_r($texte);
      30. }
      31. }
      32.  
      33. if (count($lettres)) {
      34. //print_r($lettres);
      35. $texte = $lettres;
      36.  
      37. print_r($texte);
      38. }
      39. }
      40. return $texte;
      41. }

      Télécharger

      Bref, dans les deux cas j’arrive à selectionner les bonnes lettres et les surligner c’est une bonne chose, mais impossible de reconstituer la chaine proprement.
      C’est vraiment la dernière partie fonctionnelle qu’il me manque avant de pouvoir lacher le kraken !

      Si quelqu’un à une idée j’en serais très reconnaissant :)

      Merci d’avance

    Répondre à ce message

  • Le 31 août 2013 à 10:03, par Tangerine En réponse à : Tri alphabétique tout en SPIP

    Bonjour,

    Est-ce que le tri alphabétique tout en Spip fonctionne avec SPIP 3 ?
    Si oui, y a-t-il des particularités dans la mise en place ?

    Bien cordialement,

    Guillaume.

    Répondre à ce message

  • Le 25 janvier 2013 à 15:37, par amaury En réponse à : Tri alphabétique tout en SPIP

    Le nouveau critère de boucle {collecte} à partir de SPIP 2 permet de se faciliter la vie pour trier proprement avec des caractères un peu exotiques comme l’E dans l’O.

    http://www.spip.net/fr_article4028.html

    Je l’ai utilisé avec utf8_swedish_ci et ça marche impec, les articles commençant par un Œ se retrouvent après ceux commençant par un O, au lieu de finir tristement après le Z...

    #SET{collation, utf8_swedish_ci}
    <BOUCLE_tri(ARTICLES) {par titre} {collecte #GET{collation}}> ...

    Pour un affichage avec l’initiale, pour un sommaire par lettre par exemple, il faut jouer avec la translittération pour récupérer un O et pas un Œ :

    [(#SET{initiale,#TITRE|translitteration|mb_substr{0,1}|unique})]

    Sinon on se retrouve avec :
    O
    Occidental

    Œ
    Œuvre
    Oriental

    P
    ...

    Répondre à ce message

  • Le 1er octobre 2012 à 18:25, par Brice En réponse à : Tri alphabétique tout en SPIP

    Pas certain d’avoir une réponse vu que le tuto date un peu, je tente quand même. Super guide en tout cas que ce tri tout en SPIP.

    Je l’ai adapté à une revue en ligne utilisant le squelette RevueLigne. Ca marche nickel. Mais...
    J’aimerais aller plus loin. Imaginons que j’aie deux auteurs, chacun apparaissant dans ma table articles sous les champs auteur1 et auteur2, quelqu’un a-t-il une piste pour adapter ce tri à cette exigence ? Me faut-il règler le problème des deux champs dans une fonction PHP ?
    Merci par avance :-)

    Répondre à ce message

  • 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 touti 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 DjackO 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

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

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

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là