SPIP-Contrib

SPIP-Contrib

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

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

Accueil du site > Dates, calendriers et agendas > Affichage selon dates > Balise #TRIMESTRE > Une nouvelle balise : exemple avec #TRIMESTRE

Une nouvelle balise : exemple avec #TRIMESTRE

21 août 2007 – par Cyril Marion – <blink style='color:red;'>public|spip|ecrire:commentaire</blink>

4 votes

Un exemple de création d’une balise #TRIMESTRE dans les boucles articles.

Cette contrib permet de créer, puis d’utiliser une nouvelle balise #TRIMESTRE, à la fois en tant que balise dans une boucle articles, mais aussi comme critère dans la boucle.

Il faut ajouter ces 3 fonctions dans le fichiers « mes_fonctions.php » [1].

1. Créer la fonction qui calcule le trimestre à partir d’une date

Le format choisi pour le trimestre est de la forme « annee - trimestre » de manière à pouvoir opérer des tris. Le calcul s’effectue à partir des fonctions date de SPIP :

  1. function calculer_trimestre($la_date) {
  2.   $la_date = normaliser_date($la_date);
  3.   $le_mois = mois($la_date);
  4.   $l_annee = annee($la_date);
  5.   $le_trimestre = $l_annee.'-'.ceil ($le_mois/3);
  6.   return $le_trimestre;
  7. }

A noter : cette fonction peut aussi s’utiliser telle quelle en tant que filtre sur une date à la manière classique : [(#DATE|calculer_trimestre)].

2. Ajouter la nouvelle colonne (le nouveau champ) dans la boucle

Afin de « déclarer » la nouvelle colonne, il faut modifier la fonction boucle_ARTICLE [2] de la façon suivante :

  1. function boucle_ARTICLE($id_boucle, &$boucles) {
  2.   $boucle = &$boucles[$id_boucle];
  3.   $id_table = $boucle->id_table;
  4.   $boucle->select[] = "CONCAT(year(date), '-', quarter(date)) AS trimestre";
  5.   $boucle->from[$id_table] = "spip_article";
  6.   $mstatut = $id_table .'.statut';
  7.   // Restreindre aux elements publies
  8.   if (!$boucle->modificateur['criteres']['statut']) {
  9.     if (!$GLOBALS['var_preview']) {
  10.       $boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
  11.       if ($GLOBALS['meta']["post_dates"] == 'non')
  12.       $boucle->where[]= array("'<'", "'$id_table" . ".date'", "'NOW()'");
  13.     }
  14.     else $boucle->where[]= array("'IN'", "'$mstatut'", "'(\"publie\",\"prop\")'");
  15.   }
  16.   return calculer_boucle($id_boucle, $boucles);
  17. }

Cette modification peut s’apprécier en mode debug en cliquant sur « résultat » : on voit que la requête appelle un nouveau champ.

3. Créer la balise #TRIMESTRE qui retournera le trimestre

  1. function balise_TRIMESTRE($p) {
  2.   $date_evenement = champ_sql('date', $p);
  3.   $p->code = "calculer_trimestre($date_evenement)";
  4.   $p->interdire_scripts = false;
  5.   return $p;   
  6. }

Désormais il est possible dans une boucle ARTICLES d’utiliser un critère « trimestre », et d’afficher une balise #TRIMESTRE dans les squelettes.

Le débat

L’interêt de cette contrib réside plus sur la méthode pour se créer une nouvelle balise (boucle + balise), ou un nouveau champ virtuel, que dans l’obtention d’un trimestre à partir d’une date (que l’on obtient aussi facilement avec un petit filtre utilisant la fonction « quarter(date) » de MySQL).

L’interrogation est plutôt : qu’est-ce qui est mieux (pour un résultat équivalent et un boulot équivalent) ?
-  soit : filtre + critère => 2 fonctions dans mes_fonctions
-  soit : nouveau champ virtuel => idem, 2 fonctions de plus (boucle et balise)

Le débat est lancé

P.-S.

De la même manière il doit être possible de créer une nouvelle balise qui provienne d’une requête avec plein de join sur plusieurs tables...

Notes

[1Nota : « mes_fonctions.php » est à créer, s’il n’existe pas, dans votre répertoire « squelettes ». C’est un fichier php il doit être ouvert et fermé par les balises <?php et ?>, avec rien avant et après

[2on peut appeler aussi la fonction boucle_ARTICLE_dist s’il s’agit d’ajouter la fonction en dehors d’un plugin

Retour en haut de la page

Vos commentaires

  • Le 26 décembre 2007 à 16:48, par Patrice Vanneufville En réponse à : Une nouvelle balise : exemple avec #TRIMESTRE

    Salut à tous,

    Voici qq idées qui ont été évoquées en août et que je trouve utile de replacer ici, le débat n’est peut-être pas encore clos...

    La surcharge de la boucle ARTICLES est incompatible avec le plugin acces_restreint.

    Est-ce qu’on peut pas arriver au même résultat sans cette surcharge ?

    un simple filtre trimestre ?

    function trimestre($la_date) {
      $la_date = normaliser_date($la_date);
      $le_mois = mois($la_date);
      return ceil($le_mois/3);
    }

    à utiliser comme ceci : [(#DATE|trimestre)]

    ou même : [(#DATE|annee)]-[(#DATE|trimestre)]

    Ok pour le code de ta balise #TRIMESTRE :

    function balise_TRIMESTRE($p) {
      $date = champ_sql('date', $p);
      $p->code = "trimestre($date)";
      $p->interdire_scripts = false;
      return $p;  
    }

    Pour le critère d’une boucle, voici une solution :

    function critere_trimestre($idb, &$boucles, $crit) {
        $params = $crit->param;
        if (count($params) < 1)
              erreur_squelette(_T('zbug_info_erreur_squelette'), BOUCLE$idb : trimestre ?");
        $trimestre= array_shift($params);
        $trimestre = $trimestre[0]->texte;
        if (strpos($trimestre, '|')!=false) $op = "REGEXP \'$trimestre\'";
            $op = "REGEXP \'$trimestre\'";
            else $op = "= $trimestre";
        $boucle = &$boucles[$idb];
        $table = $boucle->id_table;
        $where = "quarter($table.date) $op";
        if ($crit->not) $where = "NOT($where)";
        $boucle->where[] = "'$where'";
    }

    Exemples :

        <BOUCLE_articles(ARTICLES) {trimestre 3}>
        ou : {trimestre 3|4}
        ou : {!trimestre 3}
        ou : {!trimestre 3|4}

    Mais tout ce binz peut-être aussi obtenu comme ceci :

        <BOUCLE_articles(ARTICLES) {quarter(date)=3}>
        ou : {quarter(date)==3|4}
        ou : {quarter(date)!=3}
        ou : {quarter(date)!==3|4}

    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

  • Associaspip

    12 septembre 2011 – 67 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Plugin permettant la gestion d’une association incluant les fonctionnalités suivantes : Profil de votre association Gestion des membres (en association optionnelle avec le Plugin Coordonnées et le plugin Champs Extras 2) Gestion des cotisations (...)

  • Albums

    8 novembre 2011 – 26 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin permet d’afficher une ou plusieurs galeries d’images au fil du texte, dans les articles et ailleurs. Qui rédige un récit de voyage, par exemple, aimerait pouvoir illustrer son article de plusieurs petites séries de photos, une par jour. Or (...)

  • Maparaan (Squelette)

    21 mars 2011 – 150 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Un squelette principalement pour les sites de type blog. Présentation : Adaptation pour Zpip du thème Wordpress Maparaan conçu par Padd Solutions. Voir une démo du thème et du squelette Maparaan. Ce squelette a été conçu pour le thème du même nom. Pour (...)

  • MediaBox

    10 mai 2010 – 180 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Aperçu La MediaBox est une Boîte multimédia polyvalente et personnalisable. Le plugin est basé sur la librairie moderne ColorBox, qui a été enrichie et adaptée pour SPIP. Par défaut, mediabox propose 5 habillages. Il est assez facile d’en créer de (...)

  • Formulaire de contact libre

    27 avril 2011 – 34 <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 (...)