[ar] [ca] [cpf] [de] [en] [es] [fr] [it]

Ce forum d’entraide est recommandé pour les utilisateurs et utilisatrices occasionnels de SPIP (Système de publication pour l’Internet). Avant de poser une question, faites une recherche sur ce site, consultez les liens utiles. Si vous ne trouvez pas de réponse, postez votre message dans la rubrique appropriée, avec un titre explicite.

Sujets : 24108 Sujets résolus :  39 %

57 visiteurs en ce moment


Accueil > Forums de discussion >  Création de squelettes > Installer un compte à rebours

Installer un compte à rebours Résolu

par Haleakala - 8 avril 2008 17:42 - Réponse(s) : 14

Bonjour,

Je suis le responsable d’un site évènementiel (mariage) sous Spip, et je cherche à installer un compte à rebours.

J’avoue que je n’ai pas trop d’idée comment m’y prendre. Est-ce que l’un de vous pourrait m’aider ?

Je pense que ce n’est pas très compliqué, cependant je ne vois pas comment commencer.

Merci par avance !

Haleakala


  • #1 > Installer un compte à rebours ˆ
    par denisb - 9 avril 2008 08:05

    il te faut dans un premier temps activer l’option :
    configuration -> contenu du site -> Contenu des articles -> Date de rédaction antérieure : Oui

    désormais pour chaque article tu vas disposer de 2 dates :
    - la date de publication en ligne (généralement la date à laquelle l’article obtient le statut publié)
    dans une boucle article d’un squelette c’est #DATE
    - et la date de rédaction antérieure qui, contrairement à son intitulé, peut être dans le futur !
    dans une boucle article d’un squelette c’est #DATE_REDAC

    on va donc considérer que c’est cette date de rédaction antérieure qui sera la date butée de l’évènement :
    par exemple un article du 25 mars 2008 (date de publication en ligne) aura comme date butée le 12 avril 2008 (date de rédaction antérieure)

    ensuite, pour calculer l’écart entre ces deux dates, je te propose de créer une fonction spécifique que tu utiliseras comme un filtre.
    cette fonction est à placer dans le fichier mes_fonctions.php (si ce fichier n’existe pas, il te faut le créer avec un simple éditeur de texte, l’enregistrer au format texte seul, et le placer dans ton répertoire squelettes/)

    <?php
    //  utilisée comme filtre : #DATE|decompte
    //  cette fonction retourne le nombre de jours,
    //  s'il est égal à zéro ou positif, entre la date courante
    //  et la date #DATE passée en argument.
    //  si l'écart est négatif (#DATE est passée)
    //  la fonction ne retourne rien
    function decompte($dat_x) {
     $ce_jour = date('d');
     $ce_mois = date('m');
     $ce_an   = date('Y');
     $jour_x  = substr($dat_x, 8, 2);
     $mois_x  = substr($dat_x, 6, 2);
     $an_x    = substr($dat_x, 0, 4);
     $reste_jours = round((mktime(0,0,0,$mois_x,$jour_x,$an_x)-mktime(0,0,0,$ce_mois,$ce_jour,$ce_an))/86400);
     return $reste_jours >= 0 ? $reste_jours : '';
    }
    ?>

    cette fonction-filtre calcule à chaque appel le nombre de jours qu’il reste entre la date du jour (de consultation de l’article) et notre fameuse date butée.

    dans un squelette, elle peut s’utiliser sous la forme :

    <BOUCLE_art(ARTICLES)>
    [(#DATE_REDAC|decompte|=={0}|?{' '}) c'est aujourd'hui !]
    [(#DATE_REDAC|decompte|>{0}|?{' '}) encore [(#DATE_REDAC|decompte)] jour[(#DATE_REDAC|decompte|>{1}|?{'s',''})] ...]
    </BOUCLE_art(ARTICLES)>

    pour que le résultat affiché se mette à jour à chaque consultation, il te faudra mettre le #CACHE{} de la page à une durée inférieure à 24 heures ou bien utiliser un <inclure> dont le cache sera réglé à zéro (#CACHE{0}).


  • < #2 > Installer un compte à rebours ˆ
    par Stanislas - 9 avril 2008 08:35

    Denisb, tu devrais faire de cette réponse un article dans spip-contrib.


  • < #3 > Installer un compte à rebours ˆ
    par denisb - 9 avril 2008 08:55

    petite coquille :

    <BOUCLE_art(ARTICLES)>
    [(#DATE_REDAC|decompte|=={0}|?{' '}) c'est aujourd'hui !]
    [(#DATE_REDAC|decompte|>{0}|?{' '}) encore [(#DATE_REDAC|decompte)] jour[(#DATE_REDAC|decompte|>{1}|?{'s',''})] ...]
    </BOUCLE_art>

    (la fermeture de boucle était mauvaise...)


  • < #4 > Installer un compte à rebours ˆ
    par Haleakala - 9 avril 2008 21:43

    Bonsoir,

    Merci pour l’aide précieuse !
    Malheureusement pour moi, cela ne marche pas.
    En effet, quand je rajoute la fonction décompte dans le fichier mes_fonctions.php, mon Spip déconne :
    1/les appels vers des articles via le menu donnaient des pages blanches
    2/(en changeant le nom de la fonction) l’appel à la page d’accueil donnait une page blanche...

    Mon squelette actuel est une version un peu adapté du squelette alternatives.

    Si tout cela vous semble bizarre, je peux joindre le code de mon squelette et du fichier mes_fonctions.php

    Cependant en réfléchissant bien, je me suis dit que la fonction proposée était très puissante, et probablement plus puissante que mon besoin. En effet, dans mon cas, la date butoir est fixe et ne dépend pas d’une date donnée dans un article. Donc du coup plus besoin de faire un filtre sous Spip je suppose : il suffira de comparer la date courante avec la date inscrite dans le fichier mes_fonctions.
    Cependant je me pose une question : comment utiliser une fonction php dans un squelette SPIP ?

    Merci encore pour votre aide !!

    Haleakala


  • < #5 > Installer un compte à rebours ˆ
    par denisb - 9 avril 2008 23:50

    j’avais fait une erreur effectivement (sur le substr de $mois_x) et j’en suis désolé...

    voilà un code définitif à placer dans mes_fonctions.php (pour sarka, peut-être dans inc/sarkaspip_filtres.php) :

    //  utilisée comme filtre : #DATE|decompte
    //  cette fonction retourne le nombre de jours,
    //  s'il est égal à zéro ou positif, entre la date courante
    //  et la date #DATE passée en argument.
    //  si l'écart est négatif (#DATE est passée)
    //  la fonction ne retourne rien
    function decompte($dat_x) {
     $ce_jour = date('d');
     $ce_mois = date('m');
     $ce_an   = date('Y');
     $jour_x  = substr($dat_x, 8, 2);
     $mois_x  = substr($dat_x, 5, 2);
     $an_x    = substr($dat_x, 0, 4);
     $reste_jours = round((mktime(0,0,0,$mois_x,$jour_x,$an_x)-mktime(0,0,0,$ce_mois,$ce_jour,$ce_an))/86400);
     return $reste_jours >= 0 ? $reste_jours : '';
    }

    //  la balise #DECOMPTE affiche,
    //  s'il est égal à zéro ou positif,
    //  le nombre de jours entre la date courante
    //  et la date $ma_date définie dans la fonction
    //  sous la forme 'aaaa-mm-jj'.
    //  si $ma_date est antérieure à la date courante
    //  #DECOMPTE ne retourne rien
    function balise_DECOMPTE($p) {
     $ma_date = '2009-08-27';
     $p->code = decompte($ma_date);
     $p->interdire_scripts = false;
     return $p;
    }

    tu peux donc utiliser le filtre appliqué à une date [(#DATE_REDAC|decompte)] ou bien la balise [(#DECOMPTE)]

    encore désolé pour l’erreur


  • < #6 > Installer un compte à rebours ˆ
    par denisb - 10 avril 2008 08:34

    encore un code (le dernier j’espère ?) à placer dans mes_fonctions.php :

    pour utiliser le filtre, il faut, dans un premier temps, activer l’option :
    configuration -> contenu du site -> contenu des articles -> date de rédaction antérieure : Oui

    - pour chaque article nous disposerons désormais de 2 dates :
    la date de publication en ligne (généralement la date à laquelle l’article obtient le statut publié)
    dans une boucle article d’un squelette c’est #DATE
    - la date de rédaction antérieure qui, contrairement à son intitulé, peut être dans le futur !
    dans une boucle article d’un squelette c’est #DATE_REDAC

    - considérons que c’est cette date de rédaction antérieure qui sera la date butée de l’évènement :
    par exemple un article du 25 mars 2008 (date de publication en ligne) aura comme date butée le 12 avril 2008 (date de rédaction antérieure)

    - pour calculer l’écart entre ces deux dates, nous créons deux fonctions spécifiques à utiliser l’une comme un filtre, l’autre comme une balise.
    ces fonctions sont à placer dans le fichier mes_fonctions.php (si ce fichier n’existe pas, il te faut le créer avec un simple éditeur de texte, l’enregistrer au format texte seul, et le placer dans le répertoire squelettes/)

    //  le filtre : [(#DATE|decompte)]
    //  retourne le nombre de jours,
    //  s'il est égal à zéro ou positif, entre la date courante
    //  et la date #DATE passée en argument.
    //  si l'écart est négatif (#DATE est passée)
    //  la fonction ne retourne rien
    function decompte($dat_x) {
     $ce_jour = date('d');
     $ce_mois = date('m');
     $ce_an   = date('Y');
     $jour_x  = substr($dat_x, 8, 2);
     $mois_x  = substr($dat_x, 5, 2);
     $an_x    = substr($dat_x, 0, 4);
     $reste_jours = round((mktime(0,0,0,$mois_x,$jour_x,$an_x)-mktime(0,0,0,$ce_mois,$ce_jour,$ce_an))/86400);
     return $reste_jours >= 0 ? $reste_jours : '';
    }

    //  la balise : #DECOMPTE{'aaaa-mm-jj'}
    //  affiche, s'il est égal à zéro ou positif,
    //  le nombre de jours entre la date courante
    //  et la date passée en paramètre
    //  sous la forme 'aaaa-mm-jj'.
    //  si cette date est antérieure à la date courante
    //  #DECOMPTE{'aaaa-mm-jj'} ne retourne rien
    function balise_DECOMPTE($p) {
     $p->code = interprete_argument_balise(1, $p);
     $p->code = 'decompte(' . $p->code . ')';
     $p->interdire_scripts = false;
     return $p;
    }

    à utiliser comme filtre appliqué à une date [(#DATE_REDAC|decompte)]
    ou bien comme balise [(#DECOMPTE{'2009-05-26'})]

    - attention au bon réglage de la balise #CACHE{}, pour avoir un affichage à jour à chaque consultation.


  • < #7 > Installer un compte à rebours ˆ
    par Haleakala - 10 avril 2008 22:10

    Bonsoir,
    et merci à denisb pour son nouveau code.
    Malheureusement, j’ai le même syndrome (page blanche à l’appel de la page d’accueil de spip...). Et cela dès que le code se trouve dans le fichier mes_fonctions.php, même si la partie appelant la fonction se trouve en "remarque" (donc a priori pas d’appel à la fonction).

    Pour information, voici le contenu actuel de mon fichier mes_fonctions.php (sans le code du compte à rebours) (il s’agit de la page mes_fonctions.php par défaut du squelette alternatives, sans les adresses électroniques que j’ai supprimé).

    (je voulais mettre une copie du fichier, mais impossible de publier le message si je fais cela...)


  • < #8 > Installer un compte à rebours ˆ
    par denisb - 10 avril 2008 22:51

    je pense (trés fortement) que tu as fait un copier-coller depuis ce message...
    auquel cas effectivement (j’ai testé) ça ne marche pas car il y a des caractères parasites qui trainent (de faux espaces pour être précis...).

    donc soit tu retapes tout, soit sur ton copier-coller, tu remplaces les espaces par des espaces (oui, ça parait hallucinant à entendre, mais c’est comme ça : l’édition en hexa du copier-coller fait apparaitre des CA en lieu est place des 20)

    mais je t’assure que ce code est parfaitement fonctionnel.


  • < #9 > Installer un compte à rebours ˆ
    par marcimat - 10 avril 2008 23:47

    Petit essai de code :

    //  Deux espaces avant
    //  Et deux autres
    Un espace
    Un espace
     Deux espaces  Deux espaces

  • < #10 > Installer un compte à rebours ˆ
    par Haleakala - 11 avril 2008 09:38

    Super, ça marche !!!

    Merci beaucoup pour l’info !

    Cordialement,

    Haleakala


  • Super ce code

    merci denisb
    @micalement spipfactory


  • Super ce code

    résolu alors


  • résolu ça depend pour qui ?


  • < #14 Installer un compte à rebours ˆ
    par AlainF - 6 juin 2013 10:35

    Bonjour,
    ce code me correspondrait vraiment, mais pas moyen de faire quoi que ce soit.
    Je pense avoir bien remplacé les espaces et voici mon code dans mes_options.php

    <?php
    //  le filtre : [(#DATE|decompte)]
    //  retourne le nombre de jours,
    //  s'il est égal à zéro ou positif, entre la date courante
    //  et la date #DATE passée en argument.
    //  si l'écart est négatif (#DATE est passée)
    //  la fonction ne retourne rien

    function decompte($dat_x) {
    $ce_jour = date('d');
    $ce_mois = date('m');
    $ce_an   = date('Y');
    $jour_x  = substr($dat_x, 8, 2);
    $mois_x  = substr($dat_x, 5, 2);
    $an_x    = substr($dat_x, 0, 4);
    $reste_jours = round((mktime(0,0,0,$mois_x,$jour_x,$an_x)-mktime(0,0,0,$ce_mois,$ce_jour,$ce_an))/86400);
    return $reste_jours >= 0 ? $reste_jours : '';
    }


    //  la balise : #DECOMPTE{'aaaa-mm-jj'}
    //  affiche, s'il est égal à zéro ou positif,
    //  le nombre de jours entre la date courante
    //  et la date passée en paramètre
    //  sous la forme 'aaaa-mm-jj'.
    //  si cette date est antérieure à la date courante
    //  #DECOMPTE{'aaaa-mm-jj'} ne retourne rien
    function balise_DECOMPTE($p) {
    $p->code = interprete_argument_balise(1,$p);
    $p->code = 'decompte('.$p->code.')';
    $p->interdire_scripts = false;
    return $p;
    }

    ?>

    et dans ma page sommaire :

    [<div style="text-align: center">(#DECOMPTE{'20013-08-17'}) avant les 8h d'oschersleben </div>]

    je suis sous Spip 3.0.8
    Ai-je manqué quelque chose ?

    Merci par avance.


  •  


Répondre à la question

« Installer un compte à rebours »

Mots-clés

Vous pouvez étiqueter cette page de forum avec les mots-clés qui vous semblent les plus appropriés ; ils permettront aux prochains visiteurs du site de mieux se repérer :


Installation, mise à jour

Utilisation de l’espace privé

Administration, gestion, configuration du site

Créer ses squelettes

Qui êtes-vous ?

  • creer ou bien modifier son article côté public via un modèle

    par Laëtitia
    22 juillet 18:16

    Résolu - Réponse(s) : 4

    Je remarque une chose, si il y a 1 document dans le portfolio du rédacteur il peut en charger d’autres sur sa page publique, mais c’est quand il n’y en a pas encore que le chargement ne se fait pas (...)

  • afficher valeurs par ordre croissant

    par Didine
    20 juillet 08:47

    Pas de réponse

    Bonjour, j’utilise le plugin champs supplémentaires. Je récupère dans une liste le contenu de certains champs pour faire un formulaire de tri. Tout fonctionne correctement, cependant dans le select (...)

  • pb spip/spipr et test robots google

    par Didine
    19 juillet 20:07

    Résolu - Réponse(s) : 7

    Bonjour, je suis désolée mais le problème est de retour sur ce site alors que ça fonctionnait après notre échange. Le problème se pose sur plusieurs sites SPIP... peut-être est-ce dû aux modifications (...)

  • Probleme avec mediabox spip3.1.6

    par b_b
    18 juillet 15:28

    Réponse(s) : 6

    Voilà pourquoi je demandais un lien à chti47 :) Sans quoi on va tous passer du temps à jouer aux devinettes, alors que ça pourrait être réglé en 5 minutes (ce qui ferait gagner du temps aux personnes (...)

  • Appeler squelette

    par Mickael
    17 juillet 19:26

    Résolu - Réponse(s) : 2

    Ok, effectivement j’ai des articles qui ont perdu leur affectation :s, du coup je me retrouve avec une rubrique vide... Merci beaucoup

  • Update de la table auteurs

    par Luc
    17 juillet 11:25

    Réponse(s) : 3

    Merci, mais en fait je n’ai aucun problème à afficher les auteurs connectés en récupérant les infos de la table auteurs ; ce que je cherche, c’est faire en sorte que les auteurs connectés updatent la (...)

  • Galerie d'image lightbox slider adaptable

    par Jhessy
    12 juillet 09:57

    Réponse(s) : 2

    Bonjour Philivert, Je sais que le portfolio le fait déjà mais je dois faire cela de cette manière la car c’est dans le cahier des charges de mon stage. Et comme mon problème (en générale) c’est (...)

  • plugin SAISIES & messages d'erreur

    par Keny972
    7 juillet 14:57

    Pas de réponse

    Bonjour, J’utilise en local le plugin SAISIES pour gérer un formulaire de création d’objet éditorial. Je cherche comment ajouter à un champ SAISIES une span message_erreur ? Pas le message (...)

  • INCLUDE et cache

    par Erka
    6 juillet 18:23

    Résolu - Réponse(s) : 4

    Problème résolu : https://www.mail-archive.com/spip@rezo.net/msg72338.html

  • Problème recuperation site en ligne en local

    par Pathé
    6 juillet 17:07

    Résolu - Réponse(s) : 13

    Problème résolu merci !

  • Messages : 29323
  • 8200 43 %
  • Poser une nouvelle question