com.neolao.components.Calendar
Cette class s'occupe d'afficher un calendrier en HTML
Exemple
$calendar_view = new Calendar("calendar_view"); echo $calendar_view->html;
Propriétés
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
public | array | dayNames | Les noms des jours de la semaines. Par défaut : array(“S”, “M”, “T”, “W”, “T”, “F”, “S”) | |
public | int | firstDay | Le premier jour de la semaine. Par défaut : 0 (=Dimanche) | |
public | array | monthNames | Les noms mois de l'année | |
public | int | year | L'année du calendrier | |
public | int | month | Le mois du calendrier | |
public | int | day | Le jour du calendrier | |
public | string | html | Lecture seule | L'affichage HTML du calendrier |
Méthodes
Visibilité | Nom | Param 1 | Param 2 | Description |
---|---|---|---|---|
public | addEvent | $dayNumber | Ajoute un événement à un jour. Uniquement visuel | |
public | addLink | $dayNumber | $url | Ajoute un lien à un jour du mois |
public | removeLink | $dayNumber | Supprime un lien à un jour du mois | |
public | addNextMonth | $url | Ajoute un lien “mois suivant” | |
public | removeNextMonth | Supprime le lien “mois suivant” | ||
public | addPreviousMonth | $url | Ajoute un lien “mois précédent” | |
public | removePreviousMonth | Supprime le lien “mois précédent” | ||
public | addNextYear | $url | Ajoute un lien “année suivante” | |
public | removeNextYear | Supprime le lien “année suivante” | ||
public | addPreviousYear | $url | Ajoute un lien “année précédente” | |
public | removePreviousYear | Supprime le lien “année précédente” |
Change log
- [06/05/2005] Version 1.0
- [12/05/2005] Version 1.1
Ajout de la méthode addEvent et tout ce qui va avec
On indique juste s'il y a un événement ce jour là, sans détails. Peut-être un jour un peu plus …
Source
/** * Composant html calendrier * @package com.neolao * @subpackage components * @author neolao <neo@neolao.com> * @version 1.1 (12/05/2005) * @link http://resources.neolao.com/php/classes/components/calendar */ class Calendar { // ----------------------------- CONSTANTES -------------------------------- // ----------------------------- VARIABLES --------------------------------- /** * L'année * @var int */ private $_year; /** * Le mois * @var int */ private $_month; /** * Le jour mis en valeur * @var int */ private $_day; /** * Les jours de la semaine * @var array */ private $_dayNames; /** * Les liens des jours * @var array */ private $_dayLinks; /** * Les mois de l'année * @var array */ private $_monthNames; /** * Indique le premier jour de la semaine * @var int */ private $_weekFirstDay; /** * Le lien "mois suivant" * @var string */ private $_nextMonthLink; /** * Le lien "mois précédent" * @var string */ private $_previousMonthLink; /** * Le lien "année suivante" * @var string */ private $_nextYearLink; /** * Le lien "année précédente" * @var string */ private $_previousYearLink; /** * Les événements du mois * @var array */ private $_events; /** * Le style CSS du composant (class) * @var string */ private $_cssClass; /** * Le calendrier en html * @var string */ private $_html; /*===================== CONSTRUCTEUR & DESCTRUCTEUR ======================*/ /*========================================================================*/ /** * Initialisation de la class * @param string $cssClass Le style CSS du composant (class) */ function __construct($cssClass=null){ if(!is_null($cssClass)){ $this->_cssClass = $cssClass; } // valeurs par défaut $this->_dayNames = array("S", "M", "T", "W", "T", "F", "S"); $this->_monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); $this->_weekFirstDay = 0; // 0 = Sunday $this->_year = (int) date("Y"); $this->_month = (int) date("n"); $this->_day = (int) date("j"); $this->_events = array(); } /** * Destruction de la class */ function __destruct(){ } /*=============== FIN = CONSTRUCTEUR & DESCTRUCTEUR = FIN ================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Génération du html */ private function _setHtml(){ $ok = false; // Vérification de la validité des variables qui vont être utilisées if(checkdate($this->_month, $this->_day, $this->_year)){ // La date existe if(count($this->_dayNames) == 7){ // Il y a bien 7 noms de jour de semaine if(count($this->_monthNames) == 12){ // Il y a bien 12 noms de mois if($this->_weekFirstDay >=0 && $this->_weekFirstDay <=6){ // Le premier jour de la semaine est valide $ok = true; } } } } if($ok){ // Génération des variables utiles $dayFirst = date("w", mktime(0, 0, 0, $this->_month, 1, $this->_year)); $dayTotal = date("t", mktime(0, 0, 0, $this->_month, 1, $this->_year)); $days = array(); $i = 1; // nombre de jour du mois créé $n = 0; // semaine while($i <= $dayTotal){ $days[$n] = array(); for($j=0; $j<7; $j++){ if($i > 1 || ($n == 0 && $j == ($dayFirst + 7 - $this->_weekFirstDay)%7)){ if($i <= $dayTotal){ $days[$n][$j] = $i++; }else{ $days[$n][$j] = ""; } }else{ $days[$n][$j] = ""; } } $n++; } // DL $content = "<dl"; if(!empty($this->_cssClass)){ $content .= " class=\"".$this->_cssClass."\""; } $content .= ">"; // DT $content .= "<dt>"; if(!empty($this->_previousYearLink)){ $content .= "<a class=\"previousYearLink\" href=\"".$this->_previousYearLink."\"><<</a>"; } if(!empty($this->_previousMonthLink)){ $content .= "<a class=\"previousMonthLink\" href=\"".$this->_previousMonthLink."\"><</a>"; } $content .= $this->_monthNames[$this->_month - 1]." ".$this->_year; if(!empty($this->_nextMonthLink)){ $content .= "<a class=\"nextMonthLink\" href=\"".$this->_nextMonthLink."\">></a>"; } if(!empty($this->_nextYearLink)){ $content .= "<a class=\"nextYearLink\" href=\"".$this->_nextYearLink."\">>></a>"; } $content .= "</dt>"; // DD $content .= "<dd>"; $content .= "<table>"; $content .= "<thead><tr>"; for($i=0; $i<count($this->_dayNames); $i++){ $content .= "<th>".$this->_dayNames[($i + $this->_weekFirstDay)%7]."</th>"; } $content .= "</tr></thead>"; $content .= "<tfoot><tr>"; for($i=0; $i<count($this->_dayNames); $i++){ $content .= "<td> </td>"; } $content .= "</tr></tfoot>"; $content .= "<tbody>"; for($i=0; $i<count($days); $i++){ $content .= "<tr>"; for($j=0; $j<7; $j++){ $content .= "<td"; // Jour particulier if($days[$i][$j] == $this->_day){ // C'est le jour sélectionné $content .= " class=\"light\""; }else if($this->_events[$days[$i][$j]] === true){ // Il n'est pas sélectionné mais il y a au moins un événement $content .= " class=\"event\""; } $content .= ">"; if(!empty($this->_dayLinks[$days[$i][$j]])){ $content .= "<a href=\"".$this->_dayLinks[$days[$i][$j]]."\">".$days[$i][$j]."</a>"; }else{ $content .= $days[$i][$j]; } $content .= "</td>"; } $content .= "</tr>"; } $content .= "</tbody>"; $content .= "</table>"; $content .= "</dd>"; // DL fin $content .= "</dl>"; }else{ $content = "[CALENDAR - ERROR]"; } $this->_html = $content; } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ public function __get($var){ switch($var){ case "html": $this->_setHtml(); return $this->_html; case "firstDay": return $this->_weekFirstDay; case "dayNames": return $this->_weekDays; case "monthNames": return $this->_monthNames; case "year": return $this->_year; case "month": return $this->_month; case "day": return $this->_day; default: return null; } } public function __set($var, $value){ switch($var){ case "firstDay": $this->_weekFirstDay = (int) $value % 7; break; case "dayNames": $this->_dayNames = (array) $value; break; case "monthNames": $this->_monthNames = (array) $value; break; case "year": $this->_year = (int) $value; $timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year); $this->_year = date("Y", $timestamp); $this->_month = date("m", $timestamp); $this->_day = date("d", $timestamp); break; case "month": $this->_month = (int) $value; $timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year); $this->_year = date("Y", $timestamp); $this->_month = date("m", $timestamp); $this->_day = date("d", $timestamp); break; case "day": $this->_day = $value; $timestamp = mktime(0, 0, 0, $this->_month, $this->_day, $this->_year); $this->_year = date("Y", $timestamp); $this->_month = date("m", $timestamp); $this->_day = date("d", $timestamp); break; default: } } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Ajoute un événement à un jour * Ca ne rajoute qu'un style à la case * @param int $dayNumber Le jour de l'événement */ public function addEvent($dayNumber){ if(!isset($this->_events)){ $this->_events = array(); } $this->_events[$dayNumber] = true; } /** * Ajoute un lien à un jour du mois * @param int $dayNumber Le numéro du mois * @param string $url Le contenu du lien (contenu du href) */ public function addLink($dayNumber, $url){ if(!isset($this->_dayLinks)){ $this->_dayLinks = array(); } $this->_dayLinks[$dayNumber] = $url; } /** * Supprime un lien à un jour du mois * @param int $dayNumber Le numéro du mois */ public function removeLink($dayNumber){ if(!isset($this->_dayLinks)){ $this->_dayLinks = array(); } $this->_dayLinks[$dayNumber] = null; } /** * Ajoute un lien "mois suivant" * @param string $url Le contenu du lien (contenu du href) */ public function addNextMonth($url){ $this->_nextMonthLink = $url; } /** * Supprime le lien "mois suivant" */ public function removeNextMonth(){ $this->_nextMonthLink = null; } /** * Ajoute un lien "mois précédent" * @param string $url Le contenu du lien (contenu du href) */ public function addPreviousMonth($url){ $this->_previousMonthLink = $url; } /** * Supprime le lien "mois précédent" */ public function removePreviousMonth(){ $this->_previousMonthLink = null; } /** * Ajoute un lien "année suivante" * @param string $url Le contenu du lien (contenu du href) */ public function addNextYear($url){ $this->_nextYearLink = $url; } /** * Supprime le lien "année suivante" */ public function removeNextYear(){ $this->_nextYearLink = null; } /** * Ajoute un lien "année précédente" * @param string $url Le contenu du lien (contenu du href) */ public function addPreviousYear($url){ $this->_previousYearLink = $url; } /** * Supprime le lien "année précédente" */ public function removePreviousYear(){ $this->_previousYearLink = null; } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }