SPIP-Contrib

SPIP-Contrib

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

274 Plugins, 192 contribs sur SPIP-Zone, 83 visiteurs en ce moment

Accueil > Navigation > Tris Alphabétiques > Index alphabétique > Annuaire d’auteurs avec Spip Bonux

Annuaire d’auteurs avec Spip Bonux

26 août 2009 – par leToph – 11 commentaires

9 votes

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

Pour ceux qui ont besoin de présenter un annuaire des auteurs d’un site, plusieurs contributions existent dont :
-  Tri alphabétique des auteurs de Erational

Je me suis inspiré de cette contribution, à laquelle j’ai intégré l’apport de Spip Bonux quant à la gestion des tableaux (#ARRAY), notamment la balise #SET_PUSH.

J’utilise notamment le filtre proposé par Erational qui permet de rechercher la première lettre du dernier mot du champs #NOM de l’auteur. Ainsi Harry Cover sera pointé par la lettre C. J’y ai ajouté un petit filtre permettant de trier les tableaux.

Le principal apport de cette nouvelle contribution est d’ordre pédagogique et permettra peut-être à ceux qui cherchent de s’y retrouver. D’un point de vue fonctionnel, l’évolution porte sur la présentation et les fonctions par défaut :

-  navigation dans une barre alphabétique complète (façon répertoire)
-  seules les lettres comprenant des auteurs ont des liens actifs, et leur présentation peut être distinguée via CSS
-  par défaut, la barre s’active sur la première lettre comprenant des auteurs.

Tout cela est inclus dans un modèle, le fichier annuaire.html qui est appelé par la balise [(#MODELE{annuaire}{lettre=#ENV{lettre}})] ou lettre est la variable de choix, si elle existe.

PNG - 4.1 ko
Barre de navigation alphabétique

Pour mémoire : le filtre proposé par Erational

Le modele annuaire.html

Initialisation

Dans un premier temps, on va initialiser plusieurs tableaux :

  • un tableau alphabet, reprenant ... l’alphabet
  • une série de X tableaux commence_parX : tableau de chaque lettre avec les ID AUTEUR correspondant. Ex : commence_parT contient tous les auteurs dont le nom commence par T
  • un tableau comprenant les lettres utiles (permet de différencier les lettres ayant un auteur des autres) : auteurs_alpha

L’utilisation de #SET_PUSH de Spip-Bonux rend les choses particulièrement faciles.

Construction de la barre de navigation alphabétique

On balaie le tableau alphabet et pour chaque valeur, on contrôle si celle-ci est présente dans le tableau beginalpha.

  • Si c’est le cas, on pose un lien avec une balise #SELF agrémentée de la lettre pointée (variable lettre). Dans le même temps, on affecte la classe « plein » à la balise li correspondante, pour un traitement par CSS.
  • Dans le cas contraire, on affiche simplement la lettre, sans style particulier ni lien.
  • La barre utilise par defaut la première valeur du tableau beginalpha.

Affichage des résultats

Une dernière boucle va sélectionner les auteurs correspondant

  • soit à la lettre cliquée
  • soit à la première lettre comportant des auteurs (valeur par défaut).

Dans le premier cas, la boucle va balayer le tableau beginbyX ou X est la valeur de la lettre choisie.

Naturellement, il s’agit là d’un traitement de données très basique. On peut construire, à sa guise, un modèle d’affichage qui reprendra les informations complètes de l’auteur où celles gérées par le plugin Inscription2.

La finition par les styles CSS

Il suffit de quelques styles CSS pour obtenir ce que vous voudrez de ce modèle. Voici, pour exemple, un ensemble de style que j’ai utilisé pour obtenir le résultat affiché plus haut.

Retour en haut de la page

Vos commentaires

  • Le 4 février 2011 à 14:02, par patrice47310 En réponse à : Annuaire d’auteurs avec Spip Bonux

    Bonjour,

    j’ai d’installé cette contrib sur spip 2.1.8 tout fonctionne bien sauf que ma barre de navigation alphabétique est vertical.
    Est ce que quelqu’un pourrait me dire comment faire pour qu’elle soit horizontale ?

    Répondre à ce message

  • Le 1er décembre 2010 à 11:05, par  ? En réponse à : Annuaire d’auteurs avec Spip Bonux

    Bonjour,
    j’ai essayé d’installer cette contrib mais voilà l’erreur que ça me donne :
    3 Erreur(s) dans le squeletteNuméro message squelette boucle Ligne
    1 Filtre lastfirstletter non défini squelettes/modeles/annuaire.html _listalpha 4
    2 Filtre lastfirstletter non défini squelettes/modeles/annuaire.html _listalpha 0
    3 Filtre array_sort non défini squelettes/modeles/annuaire.html / 0

    Est-ce que c’est compatible avec spip 2.1 et la dernière version de spip-bonux ?

    Répondre à ce message

  • Le 26 novembre 2009 à 17:41, par Fred En réponse à : Annuaire d’auteurs avec Spip Bonux

    Bonjour,

    Cette contribution est très utile mais les résultats (les auteurs dont le nom commence par une même lettre) ne sont pas classés par ordre alphabétique. Dupont sera par exemple avant Dartagnan.

    Une solution ?

    Merci.

    • Le 26 novembre 2009 à 17:43, par Cedric Morin En réponse à : Annuaire d’auteurs avec Spip Bonux

      Heureusement, il n’y a pas de confusion possible parmi les 4 mousquetaires (blague du soir, espoir)

    • Le 21 janvier 2010 à 22:13, par Aurélie En réponse à : Annuaire d’auteurs avec Spip Bonux

      En effet, la boucle <BOUCLE_listalpha(AUTEURS){par nom}{tout}> classe le champ #NOM par ordre alphabétique, donc :

      • Albert Dupont -> A
      • Bob Dylan -> B
      • Charles d’Artagnan -> C

      Deux solutions :

      -  Soit modifier la contrib actuelle et ajouter le « nom » (dernier mot du champ #NOM) dans les tableaux « commence_par ». On pourra alors trier les tableaux, par exemple dans la boucle alphabet, pour que la boucle auteurs suivante les affiche dans le bon ordre.

      Reste à savoir ce qu’il advient de « Robert Van Piperzeel » qui sera classé à P et non à V...

      -  Soit encoder les noms d’auteurs sous la forme « Dupont, Albert » et « Van Piperzeel, Robert ». Ceci a pour avantage que le classement et la séparation entre nom et prénom font l’objet d’un traitement humain un peu plus intelligent que strrpos !

      Dans la fonction lastfirstletter, il faudra remplacer :

      $pos = strrpos(trim($texte), " ");
       if ($pos === false) { // pas trouvé -> 1er lettre
           $texte = $texte{0};
       } else {
           $texte = $texte{$pos+1};
       }

      par

      En effet, on ne cherche plus la première lettre du dernier mot mais la première lettre tout court.

      On pourra aussi facilement créer un filtre qui remet « Dupont, Albert » en « Albert Dupont » grâce aux fonctions explode, array_reverse et implode de PHP.

    Répondre à ce message

  • Le 1er septembre 2009 à 19:15, par Matthieu Marcillaud En réponse à : Annuaire d’auteurs avec Spip Bonux

    En fait, c’est plus compliqué, il faut :

    1. [(#SET{alphabet, [(#VAL{ABCDEFGHIJKLMNOPQRSTUVWXYZ}|str_split)]})]
    • Le 3 septembre 2009 à 01:14, par leToph En réponse à : Correction Array Alphabet

      Effectivement, c’est beaucoup plus simple comme cela. J’intègre cette modification avec mes remerciements

    • Le 3 septembre 2009 à 15:09, par denisb En réponse à : Annuaire d’auteurs avec Spip Bonux

      hélas, trois fois hélas, la fonction str_split() n’existe qu’à partir de php5...
      mais comment vont faire tous ceux dont le serveur tourne encore avec un (vieux) php4 ?

      c’est à peine plus compliqué (bien que de plus en plus abscons...) en utilisant la bonne vieille (et robuste) fonction preg_split [1] :

      [(#SET{alphabet,
      #VAL{'//'}|preg_split{'ABCDEFGHIJKLMNOPQRSTUVWXYZ', -1, 1}
      })]


      le dernier argument « 1 » signifiant :
      « à exécuter avec le flag PREG_SPLIT_NO_EMPTY »

      [1on l’applaudit bien fort d’être toujours là si vaillante...

    • Le 3 septembre 2009 à 15:19, par Pat En réponse à : Annuaire d’auteurs avec Spip Bonux

      Voir http://us2.php.net/manual/en/functi...

      à mettre dans config/mes_options.php :

      1. if(!function_exists('str_split')) {
      2.   function str_split($string,$string_length=1) {
      3.     if(strlen($string)>$string_length || !$string_length) {
      4.        do {
      5.           $c = strlen($string);
      6.           $parts[] = substr($string,0,$string_length);
      7.           $string = substr($string,$string_length);
      8.        } while($string !== false);
      9.     } else {
      10.        $parts = array($string);
      11.     }
      12.     return $parts;
      13.   }
      14. }

    Répondre à ce message

  • Le 1er septembre 2009 à 18:34, par Matthieu Marcillaud En réponse à : Annuaire d’auteurs avec Spip Bonux

    Je pense que :

    1. #SET{alphabet, #ARRAY{0,'A',1,'B',2,'C',3,'D',4,'E',5,'F',6,'G',7,'H',8,'I',9,'J',10,'K',11,'L',12,'M',13,'N',14,'O',15,'P',16,'Q',17,'R',18,'S',19,'T',20,'U',21,'V',22,'W',23,'X',24,'Y',25,'Z'}}

    Peut s’écrire plus simplement par quelque chose d’approchant :

    1. [(#SET{alphabet,[(#VAL{ABCDEFGHIJKLMNOPQRSTUVWXYZ}|explode{''})]})]

    Ou l’inverse, je ne sais plus :

    1. [(#SET{alphabet,[(#VAL{''}|explode{ABCDEFGHIJKLMNOPQRSTUVWXYZ})]})]

    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

  • FullCalendar

    7 avril 2011 – 78 commentaires

    Créez des calendriers jQuery à partir de vos articles, d’un agenda Google ou de la base de donnée SPIP.

  • Le Couteau Suisse

    4 mai 2007 – 1348 commentaires

    Ce plugin propose d’introduire facilement de simples fonctionnalités supplémentaires à SPIP et qui s’avèrent rapidement indispensables ! Par exemple : le contrôle de nombreuses variables « cachées » de SPIP, des améliorations ou facilités typographiques, (...)

  • Plugin SEO

    6 août 2009 – 96 commentaires

    SEO est un plugin qui ajoute la possibilité d’insérer manuellement où vous le souhaitez ou de manière automatique dans la partie de votre site web : meta tags, URL canonique, Google webmaster tools Meta Code et Google Analytics javascript. Il est (...)

  • SpipService

    11 mai – 12 commentaires

    SpipService est un outil permettant d’actualiser un site Spip depuis n’importe quel environnement. Ce plugin permet à un service tiers de gérer le contenu du système via des services web (WebService). « SpipService est une interface entre vous et le (...)

  • Formulaire d’ajout/modification d’articles côté public à partir de SPIP2.1

    2 janvier – 12 commentaires

    A partir de SPIP 2.1, et plus encore en SPIP3, plus besoin de plugin ou procédure compliquée pour l’édition côté public de vos articles. Une illustration de possibilités, adaptable pour tous les objets SPIP. La base Elle est dans la documentation de (...)