SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

51 visiteurs en ce moment

[7 commentaires]

Accorder au pluriel

vendredi 25 avril 2003, par roustoubi

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati

Ce filtre permet d’accorder un ou deux (voire plus en répétant le principe du code) noms au pluriel selon le résultat de la boucle qui le quantifie. Les noms sont passés au singulier en paramètres du filtre (SPIP 1.5a2 et ultérieurs).

Particulièrement utile selon moi pour afficher le nombre d’articles, de messages dans le forum, ...

Par exemple :

Affichera : « il y a 1 un article dans cette rubrique », ou « il y a 49 articles dans cette rubrique ».

et

Affichera : « il y a 1 un article publié dans cette rubrique », ou « il y a 49 articles publiés dans cette rubrique ».

Retour en haut de la page

7 Messages de forum

Voir toute la discussion

  • Répondre à ce message

    28 mars 2006 11:48 , par fredbref

    nouvelle difficulté pour accorder par exemple :

    Il y a 1 nouvel article dans cette rubrique depuis 3 jours

    Il y a 2 nouveaux articles dans cette rubrique...

    où il ne s’agit plus seulement d’ajouter (aux) mais aussi de retrancher le "l"... une solution ?

  • Répondre à ce message

    23 janvier 2005 15:14 , par James

    Si j’avais mieux fouillé, je ne me serais pas cassé la tête à faire mon propre filtre ;-)

    Toutefois, le filtre ci-dessous pourrait intéresser :

    /***
    * filtre à appliquer à #TOTAL_BOUCLE
    ***/
    function pluriel($nombre, $singulier, $pluriel='') {
     global $pluriel_renvoie_zero;
     tester_variable("pluriel_renvoie_zero", true);
     if($pluriel_renvoie_zero AND $nombre == 0)
       return _T("local/public/spip:aucun_".$singulier);
     if($nombre == 0) return '';
     if(!$pluriel) $pluriel = $singulier."s";
     $code = $nombre>1?$pluriel:$singulier;
     return $nombre." "._T("local/public/spip:".$code);
    }

    Il s’appuie sur les fichiers de langue de spip, et permet donc d’internationaliser l’accord du pluriel dans un site SPIP.

    Les paramètres à fournir seront donc les codes qu’on utilise aussi sous la forme <:code:>

    exemple :

    [(#TOTAL_BOUCLE|pluriel{article})] renverra selon la valeur de #TOTAL_BOUCLE :

    • 0 —> <:aucun_article :> ou rien si on positionne $pluriel_renvoie_zero à false dans ecrire/mes_options.php3
    • 1 —> <:article :>
    • 2 et plus —> <:articles :>

    [(#TOTAL_BOUCLE|pluriel{article,autre_forme_de_pluriel})] :

    • 2 et plus —> <:autre_forme_de_pluriel :>

    surement améliorable.

  • Répondre à ce message

    22 décembre 2004 16:01 , par claude

    et boum ! j’ai pas vu que le filtre supprimait le non affichage en cas de résultat nul de #TOTAL_BOUCLE (ça m’a percé mon gazoduc).

    Donc j’ai modifié le filtre pour résoudre celà :

    function accord_pluriel ($nombre, $nom1='', $nom2='') {
            if ($nom1=='') { return "Erreur filtre <b>&laquo; accord_pluriel &raquo;</b> : probl&egrave;me de param&egrave;tre"; }
            if ($nom2!='') {
                    $nom2 = " ".$nom2;
                    $nom2s = $nom2."s";
            }
            if ($nombre == "0") {
                    $texte = "" ;
            }
            elseif ($nombre == "1") {
                    $texte = $nombre."&nbsp;".$nom1.$nom2 ;
            }
            else {
                    $texte = $nombre."&nbsp;".$nom1."s".$nom2s ;
            }
            return $texte ;
    }

    Un petit elseif en plus.

  • Répondre à ce message

    22 décembre 2004 15:30 , par claude

    Je n’ai pas réussi à utiliser ta proposition de modification du filtre.

    Avec celle de la contrib, je fais simplement :
    [(#TOTAL_BOUCLE|accord_pluriel{notice, 'trouv&eacute;e'}) &agrave; ce nom]

    la virgule permet déjà d’utiliser plusieurs mots contigus (voir plus haut) et les quotes simples de faire passer le html.

    J’ai donc bien « 1 notice trouvée » et « 3 notices trouvées ». Pour le cas où il n’y a rien, le tout est déjà dans une sous-boucle qui n’affiche rien s’il n’y a pas de résultats à #TOTAL_BOUCLE.

  • Répondre à ce message

    25 mars 2004 09:21 , par marcopol

    J’ai trouvé 2 problèmes en voulant utiliser ce filtre ; voilà de quoi il s’agit :

    1°) Avec le mot "R&eacute;ponse" (celui que je veux accorder) ça ne passe pas alors que "Réponse" passe. Pas très grave, mais déroutant...

    2°) Lorsque le nombre est égal à 0, le filtre retourne une chaîne de caractère contenant 0 et non une chaîne vide. J’ai donc réalisé une version qui me convient mieux :

    function accord_pluriel ($nombre, $nom='') {
            switch ($nombre) {
             case 0 : return "";
             case 1 : return $nombre."&nbsp;".$nom;
             default : return $nombre."&nbsp;".$nom."s";
            }
    }

    je l’utilise comme ceci pour afficher le nombre de réponses à un article :

    <BOUCLE_forums_decpt(FORUMS){id_article}{plat}></BOUCLE_forums_decpt>
     [<b><a href="#URL_ARTICLE">(#TOTAL_BOUCLE|accord_pluriel{réponse})</a></b>]
    <//B_forums_decpt>
  • Répondre à ce message

    2 mai 2003 21:40 , par roustoubi

    Parce qu’il répond de façon simple à un besoin simple et que les situations peuvent être beaucoup plus complexes que de rajouter un "s" (son, ses, ...). Les devs de SPIP sont bien plus malins que moi et veulent le plus souvent se rapprocher de l’universalité de la fonction plutôt que de bidouilles ponctuelles de ce type. Mais c’est impec au cas au par cas.

  • Répondre à ce message

    2 mai 2003 16:05 , par François Schreuer

    Effectivement tout simple et très utile. Pourquoi ne pas suggérer que cette fonction soit ajoutée dans les prochaines distributions de SPIP ?

Répondre à cet article

Retour en haut de la page

Ça discute par ici

SPIP | Squelette | | Plan du site | Suivre la vie du site RSS 2.0