Balise #MAINTENANT / Balise #NOW

Ce plugin fournit une balise #MAINTENANT et une balise #NOW indiquant le moment de génération de la page.

Cas d’usage

SPIP propose par défaut une balise #ENV{date}. Celle ci correspond à la date où le cache de la page est calculé, sauf si une date est explicitement passée en URL.

Cela peut être problématique si l’on ne veut pas permettre de passer une telle date en URL.

Utilisation

Dans un squelette, utiliser au choix : #MAINTENANT ou #NOW. Les deux balises sont synonymes.

Les différents filtres de date de SPIP peuvent être utilisés.

On peut également passer en argument de la balise une chaine indiquant le format de la date, selon les normes PHP.

Ex : #MAINTENANT{d/m/Y}

Problématique de cache

Attention : la balise renvoie la date de la mise en cache de la page, pas celle de l’affichage de la page. Il peut donc y avoir un léger décalage selon le moment de calcul du cache (en général, 1 h max, qui est la durée par défaut du cache des pages dans SPIP).

Si l’on tient absolument à avoir la date précise, deux solutions :

Pour un simple affichage de la date

Utiliser du code PHP dans le squelette

<?php
echo (date('Y-m-d H:i:s'));
// possibilité d'utiliser un fonction `affdate` de
SPIP autour du date
echo (affdate_court(date('Y-m-d H:i:s'));

Le code PHP est interprété juste avant que la page mise en cache côté SPIP ne soit envoyée au navigateur.

Pour une boucle

S’il s’agit de pouvoir avoir une boucle précise à la seconde près, il convient de mettre un cache à 0 pour le squelette contenant la boucle.

#CACHE{0}

Toutefois, cela est vivement déconseillé, car cela grève les performances. En tout les cas, le squelette avec un cache à 0 devra être le plus petit possible, inclus par exemple via la balise <INCLURE> (mais PAS via #INCLURE).

Notes complémentaires

Ce plugin s’appuie sur une contribution historique de Christian Mercat et Dorian N.

Cette contribution avait été intégrée sous forme de lame au couteau suisse.

Le présent plugin permet de se passer du couteau suisse.

De plus, on peut indiquer plus facilement la dépendance à un plugin qu’à une lame. Il suffit de mettre dans un paquet.xml la ligne suivante :

<necessite nom="balise_maintenant" />

Discussion

One discussion

  • 4

    A mon humble avis, ce n’est pas une bonne idée d’utiliser la balise #NOW pour retourner autre chose que #MAINTENANT.

    #DATE_COMPILATION me semblerait plus clair.

    • Je ne comprend pas ton message. #NOW est un synonyme de #MAINTENANT. Cela ne retourne donc pas autre chose. C’est juste une forme plus courte.

      Quant à #DATE_COMPILATION cela serait ambivalent, car il y a 2 “compilations” dans SPIP. Le passage du code spip au code PHP, ce qui est ce qu’on entend généralement par compilation (premier niveau de cache) et le passage du code php au code HTML, ce qui pourrait éventuellement être appelé compilation, mais au risque d’une confusion. Et précisement #MAINTENANT / #NOW prend la date du moment du passage du code SPIP au code HTML.

    • J’avais compris : Ce plugin fournit une balise #MAINTENANT, et une balise #NOW indiquant le moment de compilation du squelette.

      Il faudrait alors mieux écrire : Ce plugin fournit une balise #MAINTENANT et une balise #NOW indiquant toutes les deux le moment de compilation du squelette.

      Mais, franchement, MAINTENANT me paraît mal choisi s’il peut désigner une date passée ! Cela donnera inévitablement lieu à des qui-proquos.

      Il n’y a vraiment pas moyen de retourner la date système exacte, sans qu’on doive penser à annuler le cache ?

    • Il s’agit d’une balise historique d’un couteau suisse. Dans la plupart des cas, cela sert, car le décalage est en standard de au plus 1 h. Et tu peux t’en sortir en mettant un #CACHE{0 dans un squelette spécifique.

      Mais bon tout dépend du contexte d’utilisation. Si c’est hors filtre / balise, tu peux aussi utiliser un bout de code PHP

      <?php
      
      echo (date('Y-m-d H:i:s'));
      ?>
      

      Cela étant cela ne marchera pas dans une boucle SPIP (et pour cause : par définition la boucle est executé à un instant T, et mis en cache le temps de vie du cache de SPIP).

      Et encore une fois ce n’est pas le moment de compilation du squelettes, qui est ENCORE un autre problème. C’est le moment de rendu du squelettes compilé. Mais je dois reconnaitre que le préambule de ma documentation était mal fichu, vu que je parlais moi aussi de date de compilation.

    • J’ai complété la doc avec une information par rapport aux problèmes de cache.

    Reply to this message

Add a comment

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom