Calendrier avec évènements

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Calendrier avec évènements

par 3LpH4Ri0N » 26 déc. 2005, 12:52

en fait je voudrais que vous m'aidiez à trouver la bonne syntaxe pour que :
Si mon champ 'mois' = mois en cours alors on récupère les données, faire quelque chose dans le genre :
$sql= "SELECT * FROM ph_objets WHERE mois = "(monthNumToName(getMonth($periode))); 
De telle façon que je n'ai que les articles du mois en cours qui s'affichent (vu que l'on ne peut pas aller d'un mois à un autre dans le calendrier je ne récupère que les articles du mois en cours) et que je n'ai plus qu'à les replacer à la bonne date... (ce qui sera une autre paire de manche ^^)

Quelqu'un à une idée sur la syntaxe à aborder??

j'ai essayé cela aussi
$mois=monthNumToName(getMonth($periode))
$sql= "SELECT * FROM ph_objets WHERE mois = '".$mois."';
mais cela ne semble pas fonctionner :( :oops:

par ouckileou » 25 déc. 2005, 22:09

Auriez vous une idée??
Moi oui je te l'ai donné dans mon message précédent, elle ne te plait pas ?

Parceque là pour relire ton code quand on est pas dedans... dur dur
Effectivement que fait encore cette fonction dans le while ?
On ne déclare qu'une seule fois une fonction, et on fait autant d'appels qu'on veut. C'est justement pour une question de clarté du code. ;)

Là je ne comprend pas où tu récupères tes événements. En tout cas, essaye de ne pas faire tout le traitement en PHP, ce sera bien plus rapide.

par fab » 25 déc. 2005, 20:04

tu as encore une fonction qui est déclaré dans ton while c'est totalement inutile ...

par 3LpH4Ri0N » 24 déc. 2005, 17:26

Bon alors voilà, j'ai restructuré mon code (je suis parti sur d'autres bases) :
J'ai donc maintenant :
<?
//----------------------------------------------------------------//
// CALENDRIER												      //
//----------------------------------------------------------------//
require ('config.inc.php');

$sql= "SELECT * FROM ph_objets WHERE id = 1";
$req = mysql_query($sql) or die("Erreur Selection objets".mysql_error());
while( $contenu = mysql_fetch_array ($req))
{ 
// Fonction pour afficher le calendrier
     function showCalendar($periode) {
          $leCalendrier = "";
          // Tableau des valeurs possibles pour un numéro de jour dans la semaine
          $tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");
          $nb_jour = Date("t", mktime(0, 0, 0, getMonth($periode), 1, getYear($periode)));
          $pas = 0;
          $indexe = 1;

          // Affichage du mois et de l'année
          $leCalendrier .= "\n\t<h2>&raquo; " . monthNumToName(getMonth($periode)) . " " . getYear($periode) . "</h2>";
          // Affichage des entêtes
          $leCalendrier .= "
          <ul id=\"libelle\">
               \t<li>L</li>
               \t<li>M</li>
               \t<li>M</li>
               \t<li>J</li>
               \t<li>V</li>
               \t<li>S</li>
               \t<li>D</li>
          </ul>";
          // Tant que l'on n'a pas affecté tous les jours du mois traité
          while ($pas < $nb_jour) {
               if ($indexe == 1) $leCalendrier .= "\n\t<ul class=\"ligne\">";
               // Si le jour calendrier == jour de la semaine en cours
               if (Date("w", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == $tableau[$indexe]) {
                    // Si jour calendrier == aujourd'hui
                    $afficheJour = Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode)));
                    if (Date("Y-m-d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == Date("Y-m-d")) {
                         $class = " class=\"itemCurrentItem\"";
                    }
                    else {
                         // Test de produit
                         if ($contenu['mois'] = monthNumToName(getMonth($periode))) {
                              $class = " class=\"itemExistingItem\"";
                              $afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>";
                         }
                         else {
                              $class = "";
                         }
                    }
                    // Ajout de la case avec la date
                    $leCalendrier .= "\n\t\t<li$class>$afficheJour</li>";
                    $pas++;
               }
               //
               else {
                    // Ajout d'une case vide
                    $leCalendrier .= "\n\t\t<li>&nbsp;</li>";
               }
               if ($indexe == 7 && $pas < $nb_jour) { $leCalendrier .= "\n\t</ul>"; $indexe = 1;} else {$indexe++;}
          }
          // Ajustement du tableau
          for ($i = $indexe; $i <= 7; $i++) {
               $leCalendrier .= "\n\t\t<li>&nbsp;</li>";
          }
          $leCalendrier .= "\n\t</ul>\n";

          // Retour de la chaine contenant le Calendrier
          return $leCalendrier;
     }
}
?>
Cependant, je ne sais pas comment attacher mes données aux jours...
Auriez vous une idée??
j'ai commencé ca :
// Test de produit
                         if ($contenu['mois'] = monthNumToName(getMonth($periode))) {
                              $class = " class=\"itemExistingItem\"";
                              $afficheJour = "<a href='index.php?id=$contenu['id']'>" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>";
                         }
                         else {
                              $class = "";
MERCI et joyeux noel

par ouckileou » 22 déc. 2005, 17:44

Tu peux faire tout dans la même requête.

Si tu veux afficher ton calendrier pour une semaine, tu as donc une date de début, et une date de fin.

Tu peux donc récupérer tous les événements compris entre ces bornes, et les récupérer triés par date.

Ensuite, il te suffit de faire une boucle sur ces résultats, en incrément en parallèle la date, et si pour une date tu n'as pas d'événement et bien tu affiches une case vide ou autre.

C'est comme ça que je ferais personnellement parceque si tu fais une requête pour chaque jour, ça va alourdir ton traitement.

Mais tu devrais déjà sortir tes fonctions de ton while ;)

par 3LpH4Ri0N » 22 déc. 2005, 17:39

simplement pour relier un événement à chaque date.
oui c'est plus ca

par ouckileou » 22 déc. 2005, 17:37

Pourquoi la déclaration de tes fonctions est-elle dans le while ? Tu dosi définir une fonction une seule fois, et ne faire que l'appeler ensuite, éventuellement en lui passant des paramètres.

Pour ton problème, est-ce que c'est un problème d'affichage ? ou simplement pour relier un événement à chaque date.
J'avoue que là comme ça je ne me repère pas trop dans ton code :oops:

par 3LpH4Ri0N » 22 déc. 2005, 17:37

:shock:
hihihi wé merci ^^ :oops:

par ouckileou » 22 déc. 2005, 17:33

Salut,

j'édite ton message pour virer les codes d'accès à ta base de données ;)

Calendrier avec évènements

par 3LpH4Ri0N » 22 déc. 2005, 17:31

Bonjour,
Alors voilà, je souhaite créer un calendrier (no soucy) mais avec dedans (sous les dates) les évènements qui se passent...
VOici mon code :
<?
//----------------------------------------------------------------//
// CALENDRIER												      //
//----------------------------------------------------------------//

//Connexion
$mysql_host = 'sql.free.fr'; // entrer votre hote ici
$mysql_user = '***'; // entrer votre login
$mysql_password = '***'; // entrer votre password
$mysql_base = '***'; // entrer le nom de votre base
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");

//Requête pour les objets
$sql = "SELECT * FROM ph_objets";
$req = mysql_query($sql) or die("Erreur récup objets".mysql_error());
while( $contenu = mysql_fetch_array ($req))
{

// Fonction qui retourne le nom du mois passé en paramètre
function getMonth($month, $majuscule=false)
     {
     $mois = array('janvier','février','mars','avril','mai',
     'juin','juillet','août','septembre','octobre','novembre','décembre' );

     if ($majuscule) { return ucfirst($mois[($month-1)%12]); }
     else { return $mois[($month-1)%12]; }
     }

// Fonction qui retourne le nombre de jours du mois passé en paramètre
function getDaysNumber($month, $year)
     {
     return date("t", mktime(0,0,0,$month,1,$year));
     }

// Fonction qui retourne le jour de la semaine (lundi=1, dimanche=7)
// du jour passé en paramètre
function getDayOfWeekNumber($day, $month, $year)
     {
     $n = date("w", mktime(0,0,0,$month,1,$year));
     if ($n==0) { $n = 7; }
     return $n;
     }

function makeCalendar($month, $year)
     {
     // Si le nombre de mois est supérieur à 12,
     // on incrémente l'année de 1 et on ajuste le nombre de mois
     $year = (int)($year+($month-1)/12);
     $month = ($month-1)%12+1;

     // Affichage du mois et de l'année
     $html_code = "<table>";
     $html_code .= "<tr><th colspan=\"7\">";
     $html_code .= getMonth($month,1) . " " . $year;
     $html_code .= "</th></tr>";

     // Indice servant à faire un retour à la ligne à la fin de chaque semaine
     $x=0;
     // Prochain jour du mois à placer
     $j=1;
     // On récupère le nombre de jours du mois
     $daysNumber = getDaysNumber($month,$year);
     // On récupère le jour de la semaine du premier jour du mois
     $firstDayNumber = getDayOfWeekNumber(1,$month,$year);

     while ($j<=$daysNumber)
      {
      if ($x%7==0) { echo "<tr>"; }
      if ($j==1)
      {
      // On crée toutes les cases vides nécessaires
      // pour placer le premier du mois au bon endroit
      for ($i=1;$i<$firstDayNumber;$i++)
      {
      $html_code .= "<td>&nbsp;</td>";
      $x++;
      }
      }
      $html_code .= "<td";
      // On change la couleur de fond de la case si le jour affiché
      // est le jour courant
      if (date("j.m.y")==date("j.m.y", mktime(0,0,0,$month,$j,$year)))
      { $html_code .= " style=\"background:red;\""; }
      $html_code .= ">$j</td>";
      $x++;
      if ($x%7==0) { $html_code .= "</tr>"; }
      $j++;
      }

     $html_code .= "</table>";
	
     echo $html_code;
     }
	 makeCalendar(date("m")+$i,date("Y"));

?>
Bon alors jusque la tout va bien seulement j'ai beau essayer j'arrive pas à intégrer mon code pour que si j'ai un évènement il s'affiche en dessous de la date...
Quelqu'un saurait coment faire? ma table produits comprent id, nom, description, date (de vente)...

Merci d'avance :)