[SPIP Zone] [Spip-zone-commit] r29730 - in /_plugins_/clevermail/2_0: clevermail_fonctions.php inc/clevermail_filtres.php lang/clevermail_fr.php plugin.xml prive/exec/clevermail.html

singulier_ou_pluriel ne gere pas explicitement le cas nul pour ne pas alourdir la syntaxe inutilement
MAIS
il renvoie rien dans le cas zéro.
On peut donc ecrire utilement

[(#NOMBRETRUC|singulier_ou_pluriel{<:untruc:>,<:destrucs:>}|sinon{<:aucuntruc:>})]

pour traiter ton besoin, sans avoir à alourdir la syntaxe générale, ni à faire un deuxième filtre

Cédric

Le 7 juil. 09 à 17:29, nicolas@hoizey.com a écrit :

Author: nicolas@hoizey.com
Date: Tue Jul 7 17:29:28 2009
New Revision: 29730

Log:
un filtre pour aller plus loin que singulier_ou_pluriel avec aussi le cas nul, et application

Added:
   _plugins_/clevermail/2_0/clevermail_fonctions.php
   _plugins_/clevermail/2_0/inc/clevermail_filtres.php
Modified:
   _plugins_/clevermail/2_0/lang/clevermail_fr.php
   _plugins_/clevermail/2_0/plugin.xml
   _plugins_/clevermail/2_0/prive/exec/clevermail.html

Added: _plugins_/clevermail/2_0/clevermail_fonctions.php

--- _plugins_/clevermail/2_0/clevermail_fonctions.php (added)
+++ _plugins_/clevermail/2_0/clevermail_fonctions.php Tue Jul 7 17:29:28 2009
@@ -0,0 +1,3 @@
+<?php
+include_spip('inc/clevermail_filtres');
+?>
\ No newline at end of file

Added: _plugins_/clevermail/2_0/inc/clevermail_filtres.php

--- _plugins_/clevermail/2_0/inc/clevermail_filtres.php (added)
+++ _plugins_/clevermail/2_0/inc/clevermail_filtres.php Tue Jul 7 17:29:28 2009
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Afficher un message "aucun truc"/"un truc"/"N trucs", inspire de singulier_ou_pluriel
+ *
+ * @param int $nb
+ * @param string $chaine_aucun
+ * @param string $chaine_un
+ * @param string $chaine_plusieurs
+ * @return string
+ */
+function aucun_ou_un_ou_plusieurs($nb, $chaine_aucun, $chaine_un, $chaine_plusieurs, $vars = array()) {
+ $vars = array_merge($vars, array('nb' => intval($nb)));
+ if (intval($nb) == 0) {
+ return _T($chaine_aucun, $vars);
+ } elseif (intval($nb) == 1) {
+ return _T($chaine_un, $vars);
+ } else {
+ return _T($chaine_plusieurs, $vars);
+ }
+}
+?>
\ No newline at end of file

Modified: _plugins_/clevermail/2_0/lang/clevermail_fr.php

--- _plugins_/clevermail/2_0/lang/clevermail_fr.php (original)
+++ _plugins_/clevermail/2_0/lang/clevermail_fr.php Tue Jul 7 17:29:28 2009
@@ -22,7 +22,8 @@
    'nouveaux_abonnes_et' => ' et ',
    'changements_mode_abonnement' => ' changements de mode d\'abonnement',
    'inscription_deja_abonne_meme_mode' => 'Vous étiez déjà inscrit à la liste « @lst_name@ » dans ce même mode.',
- 'inscription_deja_abonne_autre_mode' => 'Vous étiez déjà inscrit à la liste « @lst_name@ » dans un autre mode.',
+ 'inscription_deja_abonne_autre_mode' => 'Vous étiez déjà inscrit à la liste « @lst_name@ » dans un autre mode, changement opéré.',
+ 'bouton_inscription' => 'S\'inscrire',

    // Front
    'email' => 'E-mail :',
@@ -44,7 +45,18 @@
    'front_clevermail_action_validation' => 'Validation d\'une opération',
    'front_clevermail_unsubscription_query' => 'Demande de désinscription',

- // Back
+ // Back ?exec=clevermail
+ 'aucun_message_en_attente' => 'aucun en attente',
+ 'un_message_en_attente' => '1 en attente',
+ 'plusieurs_messages_en_attente' => '@nb@ en attente',
+ 'aucun_message_en_cours_envoi' => 'aucun en cours d\'envoi',
+ 'un_message_en_cours_envoi' => '1 en cours d\'envoi',
+ 'plusieurs_messages_en_cours_envoi' => '@nb@ en cours d\'envoi',
+ 'aucun_message_envoye' => 'aucun envoyé',
+ 'un_message_envoye' => '1 envoyé',
+ 'plusieurs_messages_envoyes' => '@nb@ envoyés',
+
+ // Back reste
    'administration' => 'Administration de CleverMail',
    'liste_lettres' => 'Liste des lettres d\'information',
    'creer_lettre' => 'Cr&eacute;er une lettre d\'information',

Modified: _plugins_/clevermail/2_0/plugin.xml

--- _plugins_/clevermail/2_0/plugin.xml (original)
+++ _plugins_/clevermail/2_0/plugin.xml Tue Jul 7 17:29:28 2009
@@ -26,6 +26,7 @@
  <icon>img_pack/lettre-24.png</icon>
  <install>base/clevermail.php</install>
  <options>clevermail_options.php</options>
+ <fonctions>clevermail_fonctions.php</fonctions>
  <prefix>clevermail</prefix>
  <pipeline>
    <nom>declarer_tables_principales</nom>

Modified: _plugins_/clevermail/2_0/prive/exec/clevermail.html

--- _plugins_/clevermail/2_0/prive/exec/clevermail.html (original)
+++ _plugins_/clevermail/2_0/prive/exec/clevermail.html Tue Jul 7 17:29:28 2009
@@ -3,6 +3,9 @@
<BOUCLE_lists(SPIP_CM_LISTS){par lst_name}>
  <BOUCLE_subscribers(SPIP_CM_LISTS_SUBSCRIBERS){lst_id} />#SET{nbSubs,#TOTAL_BOUCLE}<//B_subscribers>
  <BOUCLE_posts(SPIP_CM_POSTS){lst_id} />#SET{nbPosts,#TOTAL_BOUCLE}<//B_posts>
+ <BOUCLE_posts_new(SPIP_CM_POSTS){lst_id}{pst_date_sent=0} />#SET{nbPostsNew,#TOTAL_BOUCLE}<//B_posts_new>
+ <BOUCLE_posts_queued(SPIP_CM_POSTS_QUEUED){fusion pst_id} />#SET{nbPostsQueued,#TOTAL_BOUCLE}<//B_posts_queued>
+ #SET{nbPostsSent,#GET{nbPosts}|moins{#GET{nbPostsNew}}|moins{#GET{nbPostsQueued}}}
  <li class="item">
    <p><strong>#LST_NAME</strong> (#LST_MODERATION)</p>
    <div>[(#LST_COMMENT|propre)]</div>
@@ -15,7 +18,10 @@
      ]
      |
      [(#GET{nbPosts}|>{0}|oui)
- <a href="[(#URL_ECRIRE{clevermail_posts}|parametre_url{lst_id,#LST_ID})]">#GET{nbPosts} [ (#GET{nbPosts}|singulier_ou_pluriel{clevermail:message,clevermail:messages})]</a>
+ <a href="[(#URL_ECRIRE{clevermail_posts}|parametre_url{lst_id,#LST_ID})]">#GET{nbPosts} [ (#GET{nbPosts}|singulier_ou_pluriel{clevermail:message,clevermail:messages})]</a> :
+ [(#GET{nbPostsNew}|aucun_ou_un_ou_plusieurs{clevermail:aucun_message_en_attente,clevermail:un_message_en_attente,clevermail:plusieurs_messages_en_attente})],
+ [(#GET{nbPostsQueued}|aucun_ou_un_ou_plusieurs{clevermail:aucun_message_en_cours_envoi,clevermail:un_message_en_cours_envoi,clevermail:plusieurs_messages_en_cours_envoi})],
+ [(#GET{nbPostsSent}|aucun_ou_un_ou_plusieurs{clevermail:aucun_message_envoye,clevermail:un_message_envoye,clevermail:plusieurs_messages_envoyes})]
      ]
      [(#GET{nbPosts}|>{0}|non)
        <:clevermail:aucun_message:>

_______________________________________________
Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit

Le 7 juil. 09 à 18:35, cedric.morin@yterium.com a écrit :

singulier_ou_pluriel ne gere pas explicitement le cas nul pour ne pas alourdir la syntaxe inutilement
MAIS
il renvoie rien dans le cas zéro.
On peut donc ecrire utilement

[(#NOMBRETRUC|singulier_ou_pluriel{<:untruc:>,<:destrucs:>}|sinon{<:aucuntruc:>})]

Ah bin c'est pas dans la doc, donc j'ai loupé ça, ok.

pour traiter ton besoin, sans avoir à alourdir la syntaxe générale, ni à faire un deuxième filtre

Sauf que singulier_ou_pluriel ne passe pas #NOMBRETRUC à <:untruc:> et ne peut pas passer d'autres valeurs que #NOMBRETRUC à <:destrucs:>

Ma fonction permet de faire par exemple :

[(#NOMBRETRUC|aucun_ou_un_ou_plusieurs{<:aucun:>,<:un:>,<:plusieurs:>,#ARRAY{toto,12,tata,bonjour})]

#NOMBRETRUC est automatiquement passé en variable "nb", ça se discute.

Avec singulier_ou_pluriel, je ne sais pas faire...

-Nicolas

--
Nicolas HOIZEY
Blog : http://www.gasteroprod.com/
Photos : Nicolas Hoizey | Flickr

Le 08/07/2009 10:41, Nicolas Hoizey a écrit :

Ma fonction permet de faire par exemple :

[(#NOMBRETRUC|aucun_ou_un_ou_plusieurs{<:aucun:>,<:un:>,<:plusieurs:>,#ARRAY{toto,12,tata,bonjour})]

#NOMBRETRUC est automatiquement passé en variable "nb", ça se discute.

Je ne comprends pas trop comment. La chaîne de langue est évaluée AVANT d'être passé au filtre non ?

Pour le filtre de base de SPIP, n'importe quelle chaîne de langue peut avoir n'importe quel paramètre :

<:chaine{truc=#MACHIN, bidule=#CHOSE:>

--
RastaPopoulos

Le 8 juil. 09 à 10:51, RastaPopoulos a écrit :

Le 08/07/2009 10:41, Nicolas Hoizey a écrit :

Ma fonction permet de faire par exemple :

[(#NOMBRETRUC|aucun_ou_un_ou_plusieurs{<:aucun:>,<:un:>,<:plusieurs:>,#ARRAY{toto,12,tata,bonjour})]

#NOMBRETRUC est automatiquement passé en variable "nb", ça se discute.

Je ne comprends pas trop comment. La chaîne de langue est évaluée AVANT d'être passé au filtre non ?

La chaîne contient par exemple "@tata@ a @nb@ trucs de @toto@ kilo"

aucun_ou_un_ou_plusieurs() passe cette chaîne ainsi que le tableau à _T(), qui fait les remplacements de valeurs.

C'est le même fonctionnement que singulier_ou_pluriel().

Pour le filtre de base de SPIP, n'importe quelle chaîne de langue peut avoir n'importe quel paramètre :
<:chaine{truc=#MACHIN, bidule=#CHOSE:>

Oui, mais ça nécessite de repasser les mêmes paramètres trois fois.

-Nicolas

--
Nicolas HOIZEY
Blog : http://www.gasteroprod.com/
Photos : Nicolas Hoizey | Flickr

Nicolas Hoizey a écrit :

Le 8 juil. 09 à 10:51, RastaPopoulos a écrit :

Le 08/07/2009 10:41, Nicolas Hoizey a écrit :

Ma fonction permet de faire par exemple :

[(#NOMBRETRUC|aucun_ou_un_ou_plusieurs{<:aucun:>,<:un:>,<:plusieurs:>,#ARRAY{toto,12,tata,bonjour})]

La chaîne contient par exemple "@tata@ a @nb@ trucs de @toto@ kilo"

aucun_ou_un_ou_plusieurs() passe cette chaîne ainsi que le tableau à _T(), qui fait les remplacements de valeurs.

C'est le même fonctionnement que singulier_ou_pluriel().

Pour le filtre de base de SPIP, n'importe quelle chaîne de langue peut avoir n'importe quel paramètre :
<:chaine{truc=#MACHIN, bidule=#CHOSE:>

Oui, mais ça nécessite de repasser les mêmes paramètres trois fois.

c'est très chouette... et potentiellement le début d'un moteur de génération
de texte qui certains langages ou environnements de développement
ont largement développé pour inclure toutes les constructions possibles
(accords, conjugaisons de verbes réguliers ou irréguliers,
formules adaptées au contexte, au locuteur, à l'objectif,
constructions de phrases, constructions de textes)

JLuc

Le 8 juil. 09 à 11:17, JLuc a écrit :

Nicolas Hoizey a écrit :

Le 8 juil. 09 à 10:51, RastaPopoulos a écrit :

Le 08/07/2009 10:41, Nicolas Hoizey a écrit :

Ma fonction permet de faire par exemple :

[(#NOMBRETRUC|aucun_ou_un_ou_plusieurs{<:aucun:>,<:un:>,<:plusieurs:>,#ARRAY{toto,12,tata,bonjour})]

La chaîne contient par exemple "@tata@ a @nb@ trucs de @toto@ kilo"
aucun_ou_un_ou_plusieurs() passe cette chaîne ainsi que le tableau à _T(), qui fait les remplacements de valeurs.
C'est le même fonctionnement que singulier_ou_pluriel().

Pour le filtre de base de SPIP, n'importe quelle chaîne de langue peut avoir n'importe quel paramètre :
<:chaine{truc=#MACHIN, bidule=#CHOSE:>

Oui, mais ça nécessite de repasser les mêmes paramètres trois fois.

c'est très chouette... et potentiellement le début d'un moteur de génération
de texte qui certains langages ou environnements de développement
ont largement développé pour inclure toutes les constructions possibles
(accords, conjugaisons de verbes réguliers ou irréguliers,
formules adaptées au contexte, au locuteur, à l'objectif,
constructions de phrases, constructions de textes)

Oui, j'aurais préféré carrément aller vers une fonction chaine_valuee_accordee() qui sache prendre la bonne chaîne de langue automatiquement, en commençant par la gestion du nombre et du genre, ce qui serait déjà pas mal.

Mais si la langue de base d'un plugin est le français, on va avoir des chaînes de langue classiquement pour 0, 1 et n, donc comment faire avec Salvatore pour ajouter des chaînes juste pour d'autres langues ?

-Nicolas

--
Nicolas HOIZEY
Blog : http://www.gasteroprod.com/
Photos : Nicolas Hoizey | Flickr