CALENDRIER

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 23 janv. 2009 à 01:46
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009 - 29 janv. 2009 à 18:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49048-calendrier

pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
29 janv. 2009 à 18:40
Salut Armenak,

Disons que le plus d'une classe par rapport à la fonction, c'est:
- au lieu de vérifier la date par une fonction et de la récupérer dans une variable, puis de la passer en argument dans une autre fonction, tout se fait à l'intérieur de la classe.
- ça va avoir l'air un peu égoïste, mais je développe ça pour une application bien précise, qui va faire appel à une base de données, et je trouve (c'est perso) super plus pratique de manipuler une bdd à l'intérieur d'une classes qu'avec des fonctions.

Mais... je ne suis pas suffisamment calé pour t'expliquer pourquoi c'est plus pratique en peu de lignes.
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
29 janv. 2009 à 18:13
Heu, je vais certainement en faire bondir certains, mais quel est le plus (sauf l'exercice de style) par rapport à la simple fonction précédente?
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
29 janv. 2009 à 18:04
J'ai modifié la façon d'appeler le calendrier. Pour ça, j'ai créer une classe agenda qui possède deux fonction:
-la fonction agenda qui récupère la date passée par méthode get et le cas échéant prend la date du jour.
-la fonction affichage qui affiche le calendrier.

On l'affiche en procédant de la manière suivante:
$calendrier = new agenda;
$calendrier->affichage();

A noter que les liens (lignes 58, 61, 66, 72, 116 et 135) pointent vers l'url index.php?date=jj-mm-yyyy ce qui peut se modifier suivant vos besoins.
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 21:56
@kohntark
j'ai passé la soirée sur le manuel, tu as raison sur tout...
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 17:47
Tu ne mors pas au moins!!!
Désolé d'enfoncer les portes ouvertes de certains.
J'ai pas les 5 langues sous la main, mais j'en ai 3.

function trad_date($date_americaine,$lang)
//YYYYmmdd
{
$annee=substr($date_americaine,0,4);
$mois=substr($date_americaine,4,2);
$jour=substr($date_americaine,6,2);
switch($lang){
case 'fr':
$trad = array('janvier','février','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','décembre');
$mois= $trad[$mois-1];
return $jour.' '.$mois.' '.$annee;
break;

case 'en':
$trad = array('January','Febuary','March','April','May','June','July','August','September','October','November','December');
$mois= $trad[$mois-1];
return $mois.' '.$jour.', '. $annee;
break;

case 'de':
$trad = array('Januar','Febuar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$mois= $trad[$mois-1];
return $jour.". ".$mois." ". $annee;
break;
}
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
27 janv. 2009 à 17:01
Salut,

Grrrr :o)
Tout le monde avait compris mais je ne suis vraiment pas fan de cette méthode. Pourquoi réinventer une fonction native de php ?
C'est plus long, donc plus lourd, en terme de fichier comme en terme de traitement.
Concernant le "multi langues" c'est encore pire, tu es obliger de réécrire tous les mois, les jours, avec tous les risques d'erreurs que cela comporte, sans compter la spécificité des dates / heures propres à certains pays.
J'aimerai bien voir comment tu écris en 5 langues différentes :p
le mardi 27 janvier 2009 à 17:10

Cordialement,

Kohntark-
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 13:36
oups
$mois= $trad[$mois-1];
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 12:19
c'est vrai que si je l'écrivais comme ça ce serait plus élégant, même si ça fonctionne pareil
$trad = array('janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
$mois= $trad[$mois];
La discussion atteint son but : l'ébullition des neurones...
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 11:53
Tu as raison, je suis un peu vieux jeu...
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
27 janv. 2009 à 11:37
Salut armenak,
je ne me suis pas encore occupé de la mise en page, je le ferai très bientôt, histoire de le faire proprement avec un fichier css, les styles dans les balises html ne sont plus au goût du jour.
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 11:10
Pour la mise en page, j'aurai ajouté quelques align sinon c'est lu différemment sur IE et Ffox:

<td colspan="2" align="left">
<?php echo '[index.php?date='.date( '.htmlentities(strftime("%B %Y",mktime(0, 0, 0, $mois-1, $jour, $annee))).']'; ?>

</td>

<td colspan="2" align="left">
<?php echo '[index.php?date=01-01-'.($annee-1).' '.($annee-1).']'; ?>

</td>

<td colspan="3" align="center">
<?php echo htmlentities(strftime("%B %Y",mktime(0,0,0,$mois,$jour,$annee))); ?>

</td>

<td colspan="3" align="center">
<?php echo $annee; ?>

</td>

<td colspan="2" align="right">
<?php echo '[index.php?date=01-01-'.($annee+1).' '.($annee+1).']'; ?>

</td>

<td colspan="2" align="right">
<?php echo '[index.php?date='.date( '.htmlentities(strftime("%B %Y",mktime(0, 0, 0, $mois+1, $jour, $annee))).']'; ?>

</td>
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
27 janv. 2009 à 10:53
C'est évidemment plus propre...

switch ($mois) {
case 01:
$mois='janvier';
break;
case 02:
$mois='février';
break;
case 03:
$mois='mars';
break;
case 04:
$mois='avril';
break;
case 05:
$mois='mai';
break;
case 06:
$mois='juin';
break;
case 07:
$mois='juillet';
break;
case 08;
$mois='août';
break;
case 09:
$mois='septembre';
break;
case 10:
$mois='octobre';
break;
case 11:
$mois='novembre';
break;
case 12:
$mois='décembre';
break;
}
La dernière version mise à jour fonctionne très bien chez moi en localhost, mais personnellement je pense qu'une petite fonction comme celle initiée ci-dessus permettrait de maîtriser plus efficacement les différentes syntaxes de date.
divx78 Messages postés 115 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 21 mars 2009
26 janv. 2009 à 23:28
Salut,

J'utiliserai plutot un switch que sa :
if($mois=="01") $mois='janvier';
if($mois=='02') $mois='février';
if($mois=='03') $mois='mars';
if($mois=='04') $mois='avril';
if($mois=='05') $mois='mai';
if($mois=='06') $mois='juin';
if($mois=='07') $mois='juillet';
if($mois=='08') $mois='août';
if($mois=='09') $mois='septembre';
if($mois=='10') $mois='octobre';
if($mois=='11') $mois='novembre';
if($mois=='12') $mois='décembre';
les if en bataille pas trés propre si je pe me permettre.
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 janv. 2009 à 19:09
Il n'y a pas des dizaines d'OS non plus :o) On couvre sans doute 98% de l'existant avec cette syntaxe.
Et puis justement, même dans un même langage une date peut se présenter différemment et strftime est bien plus pratique à mettre en oeuvre (on peut très bien imaginer un tableau regroupant le formatage des dates suivant la langue et/ou le type de formatage)

Mais bon, c'est aussi une question de préférence personnelle.

Kohntark-
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
26 janv. 2009 à 18:32
Ben c'est pour ça que je me casse moins la tête avec un fichier de traduction que j'ai fait une fois et que je copie colle. Et comme la syntaxe d'une date diffère d'une langue à l'autre, mon fichier est un peu plus lourd, mais je sais où je vais. Ok, ça va en faire bondir quelques uns ici, je sais...

@pichpoich
C'est effectivement mieux sans le boutons radio.
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 janv. 2009 à 16:40
Salut,

@Armenak :
A mon avis il faut conserver setlocale, c'est bien plus simple, plus court, et ça permet de traduire sans se prendre la tête !! :o)

Par contre ça ne fonctionne pas sous windows car il faudrait l'écrire comme ça :
setlocale(LC_TIME, 'fr_Fr', 'french');

setlocale dépend de l'OS sur lequel est installé le serveur, il faut peut être ajouter encore des noms pour les autres OS (ici linux / windows)

@pichpoich
Pense à mettre à jour :o)

Cordialement,
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
26 janv. 2009 à 12:20
salut

http://www.micronetwork.de/activecalendar/

excellent, utile, facile à utiliser et à modifier.
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
26 janv. 2009 à 11:13
setlocale ne fonctionne pas sur tous les serveurs, pas chez moi en tout cas, c'est pour cela que je compléterais la fonction pour le nom du mois.

if($mois=="01") $mois='janvier';
if($mois=='02') $mois='février';
if($mois=='03') $mois='mars';
if($mois=='04') $mois='avril';
if($mois=='05') $mois='mai';
if($mois=='06') $mois='juin';
if($mois=='07') $mois='juillet';
if($mois=='08') $mois='août';
if($mois=='09') $mois='septembre';
if($mois=='10') $mois='octobre';
if($mois=='11') $mois='novembre';
if($mois=='12') $mois='décembre';

Ce qui permettrait aussi de traduire le calendrier dans toutes les langues.
cs_armenak Messages postés 58 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 25 octobre 2010
26 janv. 2009 à 10:56
Effectivement, l'affichage n'est pas génial, mais bon, tout ça peut s'arranger. Les boutons radio sont un peu lourdingues, le suffit.
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
23 janv. 2009 à 15:12
Salut coucou,
tu as raison, pour l'instant, on ne peut pas faire grand chose avec cette source à part afficher une date dans le mois.
En fait cette fonction va me servir pour afficher un évènement à une date donnée.
Cela dit, pour l'affichage html, rien n'empêche d'ôter les balises <html>, , et </html> pour afficher le calendrier dans une page à l'endroit ou on veut en appelant la fonction au moment voulu.
Pour l'utilisation, on peut mettre uns lien ou une balise input pour chaque jour en posant deux nouvelles variables lignes 79 et 85:
$chaine=$compte_jour.'-'.$mois.'-'.$annee;
$url=urlencode($chaine);
echo '[index.php?date='.$url.' '.$compte_jour.']';
ou pour la balise input:
echo''.$compte_jour;
à la place de echo $compte_jour;
Bon, peut-être n'est-ce pas assez clair, de toute manière, je bosse sur cette source vu que j'en ai besoin, je posterai le résultat final après adaptation.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 janv. 2009 à 01:46
salut

ton code html est inutilisable :

# <html>
#

ton calendrier doit s'afficher SEUL sur une page, ce qui nous empeche de l'inclure dans un formulaire, donc de saisir une date.

un calendrier peut servir a deux choses :
selectionner une date
afficher des evenements

le tien n'est pas assez parametrable pour faire une seule de ces deux choses.
Rejoignez-nous