Pense-bête pour le critère {age}

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

Quand on découvre le critère {age}, on a parfois du mal à en comprendre la logique. Une fois cette logique comprise, on a parfois du mal à s’en souvenir. Cette modeste contribution est juste là pour servir de pense-bête.

A la différence du critère {date}, qui permet de sélectionner un article en fonction de la date passée dans l’URL [1], le critère {age} sélectionne les articles en fonction de la durée qui sépare leur date de publication en ligne de la date courante [2].

Avec le plugin Agenda, on a même la possibilité d’utiliser deux variantes pour la gestion des événements : {age_debut} et {age_fin}

Quelques tableaux pour comprendre la logique de SPIP

Utilisation du critère {age} pour marquer une date de début
Age Comparateur Valeur C’est à dire Ce qui signifie Et si rien d’autre n’est précisé...
age <= -1 +1 jour depuis demain... jusqu’à la fin du monde
age <= 0 aujourd’hui depuis aujourd’hui... jusqu’à la fin du monde
age <= 1 -1 jour depuis hier... jusqu’à la fin du monde
age <= 2 -2 jours depuis avant-hier... jusqu’à la fin du monde
age <= 365 -365 jours depuis un an... jusqu’à la fin du monde
Utilisation du critère {age} pour marquer une date de fin
Age Comparateur Valeur C’est à dire Ce qui signifie Et si rien d’autre n’est précisé...
age >= 1 -1 jour jusqu’à hier depuis l’aube des temps
age >= 0 aujourd’hui jusqu’à aujourd’hui depuis l’aube des temps
age >= -1 +1 jour jusqu’à demain depuis l’aube des temps
age >= -2 +2 jours jusqu’à après demain depuis l’aube des temps
age >= -365 +365 jours jusque dans un an depuis l’aube des temps

Remarque : les tableaux ci-dessus utilisent les comparateurs non stricts <= ou >=... c’est à dire incluant la valeur spécifiée. L’utilisation des comparateurs stricts < ou > exclut les valeurs spécifiées. C’est à dire :

  • {age>=1} signifie jusqu’à hier inclus
  • {age>1} signifie jusqu’à hier non inclus , donc jusqu’à avant-hier
Frise chronologique récapitulative représentant la logique de spip
Valeur SPIP 365 30 7 1 0 -1 -7 -30 -365
Traduction il y a 1 an il y a 1 mois il y a 1 semaine hier 0 demain dans 1 semaine dans 1 mois dans 1 an

Quelques exemples d’utilisation

  • Sur ma page d’accueil, je souhaite afficher les évènements en cours et programmés jusque dans les 30 prochains jours, en commençant par ceux qui s’achèveront en premier :
    <BOUCLE_alaffiche(EVENEMENTS){age_fin<=0}{age_debut>=-30}{par date_fin}{statut=publie}>
  • Sur les articles auxquels les évènements sont associés, je mets deux boucles :
    1. Une boucle avant le texte de l’article, pour afficher les évènements en cours ou à venir dans les 180 prochains jours :
      <BOUCLE_lesevenementsalaffiche(EVENEMENTS){id_article} {age_fin<=0}{age_debut>=-180} {par date_fin}>
    2. Une boucle après le texte de l’article, pour afficher les évènements passés, jusqu’à 180 jours en arrière :
      <BOUCLE_lesevenementspasses(EVENEMENTS){id_article} {age_debut<=180}{age_fin>0} {par date_fin}>
  1. N’hésitez pas à rajouter d’autres exemples dans le forum, pour compléter l’article.
  2. Dans la page « Astuces longues » du carnet wiki, vous trouverez la définition d’un critère ages pour comparer l’âge en minutes, heures, mois ou années.

Discussion

5 discussions

  • bonjour,
    est-il possible d’afficher un événement jusqu’à par exemple 6 heures avant le début de cet événement ?

    Répondre à ce message

  • 1

    Bonjour,

    Je calcule à l’aide d’un filtre une période de jours (ici, 49), avec ma balise set et get, j’affiche bien ce nombre.

    Mais lorsque je demande à afficher les événements depuis 49 jours avec get, je n’ai pas le même résultat qu’avec le nombre...
    <BOUCLE_evts(EVENEMENTS){id_article?}{age_debut<=#GET{dateabsolue}}{par date_debut}>
    <BOUCLE_evts(EVENEMENTS){id_article?}{age_debut<=49}{par date_debut}>

    Je n’y comprends rien !!

    • Je suis finalement passé par un autre chemin en utilisant le critère <!evenement_passe #GET{depart}> ou depart est une date calculée. :-/

    Répondre à ce message

  • 4
    Keny972

    Bonjour,

    J’essaye d’utiliser ce critère pour un objet éditorial que j’ai crée via nouveau plugin. mais du coup dans une boucle pour cet objet INCIDENT, spip ne reconnait pas le critère. Y a t-il moyen de le redéfinir pour mon nouvel objet ?

    <BOUCLE_incidents (INCIDENTS) {etat = clos}{par date_debut}{inverse}{age < 7} >
    • Normalement cela dépend de la bonne déclaration des champs dans ton declarer_tables_objets_sql

    • Keny972

      ce serait le champ date_debut ?
      Voici une partie de mon code :

      //-- Table INCIDENTS ------------------------------------------
          $incidents = array(
              "id_incident"  => "bigint(21) NOT NULL AUTO_INCREMENT",
              "date_debut"  =>  "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
              "date_fin"  =>  "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
              "titre" =>  "text NOT NULL",
              "descriptif"  =>  "text NOT NULL",
              "engins_engages"  =>  "text NOT NULL",
              "adresse"  =>  "text NOT NULL",
              "nb_sp_pres"  =>  "bigint(11) DEFAULT '0' NOT NULL",
              "statut"  =>  "varchar(20) DEFAULT '0' NOT NULL",
              "id_auteur"  =>  "bigint(21) NOT NULL",
              "maj"  =>  "TIMESTAMP",
              'nb_cs' => 'bigint(15) DEFAULT \'0\'',
              'etat' => 'text NOT NULL',
          );
      
      $incident_key = array(
              "PRIMARY KEY"  =>  "id_incident",
              "KEY id_auteur"  =>  "id_auteur"
          );
      $tables_principales["spip_incidents"] = array(
              "type" => "incident",
              "principale" => "oui",
              "field" => $incidents,
              "key" => $incident_key,
              "texte_objets" => "incident:titre_incidents"
          );
    • ah bah du coup ce sera {age_debut}> et {age_fin} selon le champ date correspondant.

    • Keny972

      Merci, j’aurais pu chercher un moment.
      :D

    Répondre à ce message

  • Ok, je pense avoir trouvé : {age_debut<1}{age_fin>-1}

    Répondre à ce message

  • Bonjour, j’éprouve des difficultés à afficher les événements (plugin agenda) de toute la journée de 00:01 à 23:59 ? Quelqu’un connaît-il les bons critères ?

    Pour le moment j’utilise une boucle avec les critères {age_debut<=1}{age_fin>=-1}

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom