Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CALENDRIER PHP SUR UNE DURÉE DEFINIE À PARTIR DE LA DATE SYSTÈME


Information sur la source

Catégorie :Date / Heure Classé sous : calendrier, php, javascript, francais Niveau : Débutant Date de création : 24/02/2008 Date de mise à jour : 25/02/2008 17:15:21 Vu / téléchargé: 6 178 / 385

Note :
Aucune note

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


Description

Voici un petit calendrier, qui génére 12 mois en php et qui retourne la date dans un input au format Y-m-d (pour insertion dans une base SQL).
Le calendrier est en interaction direct avec un input (il s'affiche sur l'input et retourne la valeur a l'input en question).
L'utilisation est tres simple et est expliquée dans le code.

Pour modifier le nombre de mois changer la variable '$nbmois'.

(Graphisme basic à modifier en CSS, si qqun veut me poster une nouvelle mise en forme du calendrier je suis preneur :) )
 

Source

  • <?php
  • /*
  • Pour Utilisation du calendrier il suffit de mettre dans la page concernée
  • include "./calendrier.php";
  • et mettre aux inputs consernés l'attribut onclick suivant:
  • onclick="javascript:affcalendrier(this);"
  • */
  • ?>
  • <style>
  • .calendrier
  • {
  • position: absolute;
  • z-index: 20;
  • width:75px;
  • height:50px;
  • display:none;
  • background: #99FF66;
  • }
  • </style>
  • <?php
  • function moisFr($mois,$annee)
  • {
  • $affmois=date("M",mktime(0,0,0,$mois,1,$annee));
  • switch($affmois)
  • {
  • case "Feb": return " Fev ";break;
  • case "Apr": return " Avr ";break;
  • case "May": return " Mai ";break;
  • case "Jun": return " Juin ";break;
  • case "Jul": return " Juil ";break;
  • case "Aug": return " Aout ";break;
  • default : return $affmois;break;
  • }
  • }
  • $nbmois=12; //on ne va afficher que 12mois(periode scolaire max
  • $mois=date("m");
  • $annee=date("Y");
  • echo "<script> var mois=".intval($mois).";</script>";
  • $lmois=array();
  • $lannee=array();
  • for($i=0;$i<$nbmois;$i++)
  • {
  • $lmois[]=$mois + $i;
  • $moisC=($mois + $i)%13;
  • if($moisC==0)
  • {
  • $lmois[strlen($lmois) - 1]=1;
  • $moisC=1;
  • $annee++;
  • }
  • $lannee[]=$annee;
  • echo "<div id='calen".$moisC."' class='calendrier' >";
  • echo "<select name='lmois' onchange='javascript:changecalendrier(this);' >";
  • for($s=0;$s<12;$s++)
  • {
  • $option=$mois + $s;
  • $optionannee=$annee;
  • if($option>12)
  • {
  • $option=$option - 12;
  • $optionannee=$annee + 1;
  • }
  • if($option==$moisC)
  • {
  • echo "<option value=".$option." selected='selected'>".moisFr($option,$optionannee)."</option>";
  • }
  • else
  • {
  • echo "<option value=".$option." >".moisFr($option,$optionannee)."</option>";
  • }
  • }
  • echo "</select>".$annee;
  • ?>
  • <table border='2px' >
  • <tr>
  • <td>Lun</td>
  • <td>Mar</td>
  • <td>Mer</td>
  • <td>Jeu</td>
  • <td>Ven</td>
  • <td>Sam</td>
  • <td>Dim</td>
  • </tr>
  • <?php
  • $nbjour=date("t",mktime(0,0,0,$moisC,1,$annee));
  • for($jour=1;$jour<=$nbjour;$jour++)
  • {
  • $statue=date("w",mktime(0,0,0,$moisC,$jour,$annee));
  • if($jour==1)
  • {
  • $NCZ=($statue + 6)%7;//nombre de colonne zappé a partir de la gauche
  • if($NCZ!=0)
  • {
  • echo "<tr><td>";
  • for($k=0;$k<($NCZ - 1);$k++)
  • echo "</td><td>";
  • }
  • }
  • if($statue==1)
  • {
  • echo "<tr><td>";
  • }
  • else
  • {
  • echo "</td><td>";
  • }
  • $journee=date("Y-m-d",mktime(0,0,0,$moisC,$jour,$annee));
  • ?>
  • <a href="javascript:affecte('<?= $journee ?>');" ><?= $jour ?></a>
  • <?php
  • if($statue==0)
  • echo "</td></tr>";
  • $NCZ=(7 - $statue)%7;//nombre de colonne zappé a partir de la droite
  • if($statue!=0&&$jour==$nbjour)
  • {
  • for($k=0;$k<$NCZ;$k++)
  • echo "</td><td>";
  • echo "</td></tr>";
  • }
  • }
  • echo "</table></div>";
  • }
  • ?>
  • <script type="text/javascript" >
  • var courant;
  • function affcalendrier(input)
  • {
  • var Y = input.eventY;
  • var X = input.eventX;
  • for(var i=1;i<13;i++)
  • {
  • if(document.getElementById)
  • document.getElementById("calen" + i).style.display="none";
  • else
  • document.all["calen" + i].style.display="none";
  • }
  • if(document.getElementById)
  • var calendrierC=document.getElementById("calen" + mois);
  • else
  • var calendrierC=document.all["calen" + mois];
  • calendrierC.style.position.left=X;
  • calendrierC.style.position.top=Y;
  • calendrierC.style.display="block";
  • courant=input;
  • }
  • function changecalendrier(valeur)
  • {
  • var MoisC=valeur.value;
  • var Y = courant.eventY;
  • var X = courant.eventX;
  • for(var i=1;i<13;i++)
  • {
  • if(document.getElementById)
  • document.getElementById("calen" + i).style.display="none";
  • else
  • document.all["calen" + i].style.display="none";
  • }
  • if(document.getElementById)
  • {
  • var calendrierC=document.getElementById("calen" + MoisC);
  • }
  • else
  • {
  • var calendrierC=document.all["calen" + MoisC];
  • }
  • calendrierC.style.position.left=X;
  • calendrierC.style.position.top=Y;
  • calendrierC.style.display="block";
  • for(var i=0;i<12;i++)
  • document.getElementsByName("lmois")[i].value=MoisC;
  • }
  • function affecte(journee)
  • {
  • if(document.getElementsByName)
  • var input=document.getElementsByName(courant.name);
  • else
  • var input=document.all[courant.name];
  • courant.value=journee;
  • for(var i=1;i<13;i++)
  • {
  • if(document.getElementById)
  • document.getElementById("calen" + i).style.display="none";
  • else
  • document.all["calen" + i].style.display="none";
  • }
  • for(var i=0;i<12;i++)
  • document.getElementsByName("lmois")[i].value=mois;
  • }
  • </script>
<?php
/*
Pour Utilisation du calendrier il suffit de mettre dans la page concernée
include "./calendrier.php";
et mettre aux inputs consernés l'attribut onclick suivant:
    onclick="javascript:affcalendrier(this);"
*/
?>
<style>
.calendrier
{
  position: absolute;
  z-index: 20;
  width:75px;
  height:50px;
  display:none;
  background: #99FF66;
}

</style>
<?php
function moisFr($mois,$annee)
{
$affmois=date("M",mktime(0,0,0,$mois,1,$annee));
  switch($affmois)
  {
  case "Feb": return " Fev ";break;
  case "Apr": return " Avr ";break;
  case "May": return " Mai ";break;
  case "Jun": return " Juin ";break;
  case "Jul": return " Juil ";break;
  case "Aug": return " Aout ";break;
  default : return $affmois;break;
  }

}

$nbmois=12; //on ne va afficher que 12mois(periode scolaire  max
$mois=date("m");
$annee=date("Y");
echo "<script> var mois=".intval($mois).";</script>";
$lmois=array();
$lannee=array();
for($i=0;$i<$nbmois;$i++)
{
  $lmois[]=$mois + $i;
  $moisC=($mois + $i)%13;
  if($moisC==0)
  {
     $lmois[strlen($lmois) - 1]=1;
     $moisC=1;
     $annee++;
  }
  $lannee[]=$annee;
  echo "<div id='calen".$moisC."' class='calendrier' >";
  echo "<select name='lmois' onchange='javascript:changecalendrier(this);' >";
  for($s=0;$s<12;$s++)
  {
    $option=$mois + $s;
    $optionannee=$annee;
    if($option>12)
    {
        $option=$option - 12;
        $optionannee=$annee + 1;
    }
    if($option==$moisC)
    {
        echo "<option value=".$option." selected='selected'>".moisFr($option,$optionannee)."</option>";
    }
    else
    {
        echo "<option value=".$option." >".moisFr($option,$optionannee)."</option>";
    }
  }
  echo "</select>".$annee;
  ?>
  <table border='2px' >
  <tr>
  <td>Lun</td>
  <td>Mar</td>
  <td>Mer</td>
  <td>Jeu</td>
  <td>Ven</td>
  <td>Sam</td>
  <td>Dim</td>
  </tr>
  <?php
  $nbjour=date("t",mktime(0,0,0,$moisC,1,$annee));
  for($jour=1;$jour<=$nbjour;$jour++)
  {
    $statue=date("w",mktime(0,0,0,$moisC,$jour,$annee));
    if($jour==1)
    {
       $NCZ=($statue + 6)%7;//nombre de colonne zappé a partir de la gauche
       if($NCZ!=0)
        {
            echo "<tr><td>";
            for($k=0;$k<($NCZ - 1);$k++)
                echo "</td><td>";
        }
    }
    if($statue==1)
    {
    echo "<tr><td>";
    }
    else
        {
            echo "</td><td>";
        }

    $journee=date("Y-m-d",mktime(0,0,0,$moisC,$jour,$annee));
    ?>
    <a href="javascript:affecte('<?= $journee ?>');" ><?= $jour ?></a>
    <?php
        if($statue==0)
            echo "</td></tr>";

    $NCZ=(7 - $statue)%7;//nombre de colonne zappé a partir de la droite
       if($statue!=0&&$jour==$nbjour)
        {

            for($k=0;$k<$NCZ;$k++)
                echo "</td><td>";

            echo "</td></tr>";
        }
  }

echo "</table></div>";
}
?>

<script  type="text/javascript" >
var courant;
function affcalendrier(input)
{
    var Y = input.eventY;
    var X = input.eventX;
    for(var i=1;i<13;i++)
    {

        if(document.getElementById)
            document.getElementById("calen" + i).style.display="none";
        else
            document.all["calen" + i].style.display="none";
    }
        if(document.getElementById)
            var calendrierC=document.getElementById("calen" + mois);
        else
            var calendrierC=document.all["calen" + mois];
    calendrierC.style.position.left=X;
    calendrierC.style.position.top=Y;
    calendrierC.style.display="block";
    courant=input;
}
function changecalendrier(valeur)
{
   var MoisC=valeur.value;
    var Y = courant.eventY;
    var X = courant.eventX;
    for(var i=1;i<13;i++)
    {

        if(document.getElementById)
            document.getElementById("calen" + i).style.display="none";
        else
            document.all["calen" + i].style.display="none";
    }
        if(document.getElementById)
        {
            var calendrierC=document.getElementById("calen" + MoisC);
        }
        else
        {
            var calendrierC=document.all["calen" + MoisC];
        }
    calendrierC.style.position.left=X;
    calendrierC.style.position.top=Y;
    calendrierC.style.display="block";
    for(var i=0;i<12;i++)
        document.getElementsByName("lmois")[i].value=MoisC;

}
function affecte(journee)
{
        if(document.getElementsByName)
            var input=document.getElementsByName(courant.name);
        else
            var input=document.all[courant.name];

        courant.value=journee;
    for(var i=1;i<13;i++)
    {

        if(document.getElementById)
            document.getElementById("calen" + i).style.display="none";
        else
            document.all["calen" + i].style.display="none";
    }
    for(var i=0;i<12;i++)
        document.getElementsByName("lmois")[i].value=mois;
}
</script>

Conclusion

Je n'ai pas testé si la méthode : getElementsByName marche sur firefox, si vous rencontrez des problème d'utilisation n'exitée pas à les préciser.

Bonne utilisation
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

24 février 2008 20:53:11 :
Pour le moment j'ai enlevé la fermeture voulu du calendrier (jusqu'a trouver un moyen de le changer)
25 février 2008 12:42:25 :
Voila le code est modifié (j'avoue les erreurs etaient un peu abusées ^^)
25 février 2008 16:51:49 :
Petit probleme avec le lien de fermeture je vais essayer de mettre un bouton bientot
25 février 2008 17:15:27 :
En fait je vais devoir pas de modifications pour que le calendrier puisse prndre plus de 12 mois (ceci sera fait d'ici demain)

Commentaires et avis

signaler à un administrateur
Commentaire de codefalse le 24/02/2008 14:39:46 administrateur CS

Ouch !

Un code PHP doit commencer par un <?php et non <?. La directive short_open_tags à on étant dépréciée. La portabilité de ton code s'en trouve de suite très limitée alors que juste <?php l'aurai poussé en avant.

Ensuite, tu mélange trop html, php, javascript. Tu met le js à la fin de ta page alors qu'un simple window.onload = function () { // Ton code js ici } le tout mis dans un header ou dans un fichier js aurait été meilleur, plus propre et plus cohérent.

Afin d'avoir une application ou un bout de code pérenne, il faut prendre en compte le fait de bien séparer les différentes couches.
Du html ne DOIT rester QUE du html. Ne pas mettre du js dessus. (cf $aff='<a href="javascript:affecte('; ligne 111 entre autres).

Mettre des echos à longueur de lignes, comme
#  echo"<table border='2px' >
# <tr>
# <td>Lun</td>
# <td>Mar</td>
# <td>Mer</td>
# <td>Jeu</td>
# <td>Ven</td>
# <td>Sam</td>
# <td>Dim</td>
# </tr>";
n'est pas du tout performant et encore moin lisible. Quand tu retouchera à ton code plus tard (si tu y retouche) tu risque d'avoir des difficultés à tout remettre en place.
Préfere plutot un
?>
<a href="<?php echo $uneVarUrl; ?>" title="Rendez-vous à ce liens">Ici</a>
<?php

Ca demande plus de lignes de code, mais une meilleur clartée.

Ton code peut-etre grandement amélioré. Je compte ce toi pour aller en ce sens.

signaler à un administrateur
Commentaire de _klesk le 24/02/2008 18:35:18

Effectivement, quand on veux mélanger php et javascript il faut faire attention a certaine chose, si ce code fonctionne chez toi je me demande comment.

echo "<a href=\'javascript:document.getElementBy('calen<?= $moisC ?>').display='none';\'>X</a>";

la ligne précédente est bourré d'erreurs :

1: <?=, est déprécié.
2: document.getElementBy().display, il manque des morceaux.
3: ' à la place de "

je me suis arrêter la, vu la qualitée du code.

Tous ceci sont des conseils et sont a prendre comme tels.

signaler à un administrateur
Commentaire de Comete_info le 24/02/2008 20:43:33

Je vais essayer de revoir tout ca mais pour les balises php j'avoue que je zappe souvant de les mettres completement ( en tout cas ca marche sur free ) de meme pour la ligne javascript que tu n'aime pas de trop.

Le problème de cette ligne est que si je ne veut pas mettre de \' je suis obligé de repasser à un affichage html et donc d'alterner de plus en plus les 3 languages

(<script> => <script type=text/javascript" >) a modifié aussi dans ce cas :p


Code false si tu as une meilleure idée pour
$aff='<a href="javascript:affecte(';
en fait j'ai utiliser directement les variables php pour pouvoir utiliser les ' et les " sans bug d'affichage

Tu me conseillerais plutot de sortir du cade php pour mettre cette ligne ?

signaler à un administrateur
Commentaire de codefalse le 24/02/2008 23:35:24 administrateur CS

En fait je te conseillerai de sortir d'un langage quand tu utilise un autre langage, histoire de propreté, meme si parfois ca alourdi le code, tu aura un gain de performance en fermant les tags :)

signaler à un administrateur
Commentaire de Comete_info le 25/02/2008 01:09:21

Oki, je change cela quand le serveur free voudra bien se remettre en activité ...

signaler à un administrateur
Commentaire de Comete_info le 25/02/2008 13:41:28

Je viens de remarquer un petit probleme sur firefox : le calendrier ne s'affiche pas au coordonnées de l'input, quelqu'un aurait-il une solution javascript ?

signaler à un administrateur
Commentaire de _klesk le 25/02/2008 20:25:24

Je te répond sans toute fois avoir tester mais un <div> sous l'input concerné ne résoudrait pas ton problème ?

signaler à un administrateur
Commentaire de Comete_info le 27/02/2008 00:58:55

En fait tu voudrais que le calendrier s'affiche dans un div predefini par l'utilisateur ?
Si c'est le cas ce n'ai pas ce que je recherche il faut juste que je récuperes les coordonnées de l'input sous firefox...

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

CALENDRIER PHP OU JAVASCRIPT [ par eric93 ] Bonjour à tous.Je suis débutant, et je suis en stage.Je dois réaliser un formulaire php pour la saisi d'un menu avec la date.Et mon tuteur veut que je Recherche script calendrier html/php (Sans Php objet ni MySql) [ par lolymeupy ] Bonjour,je suis à la recherche d'un script de calendrier en php/html et sans MySql; Pour les détails, voici le genre de calendrier que je recherche :< Pb en php + javascript [ par dalma101 ] Bonjour, je poste un petit message ici car j'ai un problème de "compatibilité" javascript + php.Mon but est le suivant :- Je récupère une liste de tit calendrier en php pour gestion locative [ par Justkill ] Bonjour à vous,je vous contact pour la création d'un calendrier pour afficher les dates louées et les dates libres pour les mois et les années sélecti Ne pas inclure plusieurs fois un même javascript [ par Rorix83 ] BonjourJ'ai un systeme (en PHP) ou j'importe plusieurs éléments differents (principalement d'autres pages php).La plupart du temps ces pages php utili adapter javascript avec php [ par isamm2008 ] bjr a tous,je voulais savoir si c possible d'integrer un tel code javascript dans une fonction php par ex: dans le cas d'un site multi-langues les ale [Choix livres]Html/Css/Javascript/Php/Ajax! [ par sachie ] Bonjour à tous , j'ai décidé de fortifier mes connaissances par les livres! Mon principal souci vient du web, trois mois de formations mais cinq sans Ajouter un code dans une url - Javascript - php ? [ par Xtaz991 ] BonjourJe voudrais créer une page sur laquelle je demande au visiteur de taper un code dans un champ.Puis lors de la validation je voudrais ajouter ce php et javascript [ par youssefmst ] salutJ'ai un petit problème, le veux affiché des image selon le résultat d'une requête sql(la résulta sera 1,2,ou3  et les image sont: 1.gif, 2.gif et Transfert d'info entre php et javascript [ par fregolo52 ] Bonjour,Je ne suis pas du tout un spécialiste du dév web, mais je dois apporter des évolutions à un site intranet.Mon but est d'afficher une treeview


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.