Avec un peu de JavaScript et un filtre SPIP, voici ma contribution qui permet cela :
Comment ça marche ?
// +----------------------------------------------------------------------+ // | SPIP.DateLocales.JS v.1.0.0-French | // +----------------------------------------------------------------------+ // | Copyright (c) 2004 Adeixis.Communication | // +----------------------------------------------------------------------+ // | This program is free software; you can redistribute it and/or | // | modify it under the terms of the GNU General Public License | // | as published by the Free Software Foundation; either version 2 | // | of the License, or (at your option) any later version. | // | | // | This program is distributed in the hope that it will be useful, | // | but WITHOUT ANY WARRANTY; without even the implied warranty of | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | // | GNU General Public License for more details. | // | | // | To read the license, please visit: | // | http://www.gnu.org/copyleft/gpl.html | // +----------------------------------------------------------------------+ // | Author: Julien Tessier <julien@adeixis.com> | // +----------------------------------------------------------------------+ function s_lt(timestamp, format) { if (format == undefined) format = "Y-m-d H:i:s" date_object = new Date(); date_object.setTime(timestamp*1000); document.write(spipLocalTime_formatDate(date_object, format)); } function spipLocalTime_addZero(number){ return ((number < 10) ? "0" : "") + number } function spipLocalTime_formatDate(date_object, format){ var daysTextual = new Array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"); var monthsTextual = new Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"); var replacements = new Array(); replacements['d'] = spipLocalTime_addZero(date_object.getDate()); replacements['F'] = monthsTextual[date_object.getMonth()]; replacements['G'] = date_object.getHours(); replacements['H'] = spipLocalTime_addZero(date_object.getHours()); replacements['i'] = spipLocalTime_addZero(date_object.getMinutes()); replacements['j'] = date_object.getDate(); replacements['l'] = daysTextual[date_object.getDay()]; replacements['m'] = spipLocalTime_addZero(date_object.getMonth()+1); replacements['n'] = date_object.getMonth()+1; replacements['s'] = spipLocalTime_addZero(date_object.getSeconds()); replacements['Y'] = date_object.getFullYear(); replacements['y'] = spipLocalTime_addZero(date_object.getFullYear().toString().substring(3,4)); var parsed_string = ''; for (i=0; i spip_localtime.js
Téléchargez le script ci-dessus, renommez le en spip_localtime_fr.js, envoyez le sur votre serveur (à la racine) et placez dans le HEAD de chaque page le code suivant pour inclure le fichier :
<script language="JavaScript" type="text/javascript" src="spip_localtime.js"></script>
En suite, copiez dans mes_fonctions.php3 le code suivant :
function localtime_js($date, $format = "Y-m-d H:i:s") {
return "<script language=\"JavaScript\" type=\"text/javascript\">s_lt(".strtotime($date).", '".str_replace('\\', '\\\\', $format)."');</script><noscript>".date($format, strtotime($date))." UTC</noscript>";
}
Pour finir, dans vos squelettes mettez quelque chose comme :
[(#DATE|localtime_js{'y-m-d H:i'})]
Le format de date entre accolades est sensiblement le même que la fonction PHP date et supporte le nom des jours et des mois en français. Les codes suivants sont supportés : d, F, G, H, i, j, l, m, n, s, Y et y. Ce filtre supporte aussi les échappements de caractères avec un anti-slash.
Limitations
Le serveur doit être en UTC (ou alors il faudrait adapter le JavaScript).
Si le navigateur ne supporte pas JavaScript, la date est affichée en UTC, avec le nom des jours et des mois en anglais.
Discussions by date of activity
2 discussions
Hello,
C’est sympa de me citer en tant qu’auteur de spipbb ou spipliste (y’a un schmil là avec un copier coller malheureux) mais c’est BoOz l’auteur de ces 2 plugins (+ d’autres contributeurs qui ont bien fait avancer le script). Pour ma part je n’ai fait qu’apporter un petit coup de main pour la doc de spipliste...
Bravo pour ce squelette.
Reply to this message
Bonjour,
Je trouve l’idée très intéressante. Félicitations.
Par contre, j’ai l’erreur suivante qui s’affiche :
function localtime_js($date, $format = “Y-m-d H:i:s”) return “”;
# Erreur(s) dans le squelette
* Erreur : filtre « localtime_js » non défini,
Je test sous spip 1.8.
Serveur chez OVH.
Merci d’avance pour vos commentaires.
@
Salut,
Excellente contrib :)
J’ai moi aussi un pb similaire, mais seulement en hébergement, pas en local.
(Je précise que je travaille sous agora, et que j’ai inclu la définition de localtime_js dans mes_fonctions_agora.php3
En ligne (serveur dédié OVH), je me retrouve avec ce même message «Erreur : filtre « localtime_js » non défini» lorsque j’accède à une page de type “rubrique.php3” (ça fonctionne nickel avec une page de type “article.php3”)
Le problème apparait aussi bien sous IE que sous Firefox.
Auriez-vous une idée du pourquoi du comment ?
Finalement le problème est réglé lorsque l’on crée un fichier mes_fonctions.php3 et qu’on y insère la définition de fonction.
voili voila... ^^
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 :
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.
Follow the comments:
|
