com.neolao.components.CalendarYear
Composant HTML calendrier année
Exemples
$calendar_year_view = new CalendarYear(); echo $calendar_year_view->html;
Propriétés
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
public | string | title | Titre du composant | |
public | array | dayNames | Les noms des jours de la semaine | |
public | string | dayLinkFormat | Le format des liens des jours (pour sprintf) | |
public | array | monthNames | Les noms des mois de l'année | |
public | int | year | L'année du calendrier | |
public | string | html | Lecture seule | L'affichage HTML du calendrier |
Méthodes
Visibilité | Nom | Param 1 | Param 2 | Param 3 | Param 4 | Param 5 | Param 6 | Param 7 | Description |
---|---|---|---|---|---|---|---|---|---|
public | addEvent | string $title | int $startMonth | int $starDay | int $length | string $url | string $description | string $style | Ajoute un événement |
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
- [08/05/2005] Version 1.0
Création
- [10/05/2005] Version 1.1
Correction de setHtml :
Si on ne définit aucun événement, le each($this→_events) renvoi une erreur parce que la variable n'a jamais été défini
Source
/** * Composant html calendrier année * @package com.neolao * @subpackage components * @author neolao <neo@neolao.com> * @version 1.0 (10/05/2005) * @link http://resources.neolao.com/php/classes/components/calendaryear */ class CalendarYear { // ----------------------------- CONSTANTES -------------------------------- // ----------------------------- VARIABLES --------------------------------- /** * Le style CSS du composant (class) * @var string */ private $_cssClass; /** * Le titre du composant * @var string */ private $_title; /** * Les mois de l'année * @var array */ private $_monthNames; /** * Les jours de la semaine * @var array */ private $_dayNames; /** * Le format des liens des jours (pour sprintf) * @var string */ private $_dayLinkFormat; /** * L'année * @var int */ private $_year; /** * Le lien "année suivante" * @var string */ private $_nextYearLink; /** * Le lien "année précédente" * @var string */ private $_previousYearLink; /** * Les événements * @var array */ private $_events; /** * 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->_title = ""; $this->_dayNames = array("S", "M", "T", "W", "T", "F", "S"); $this->_dayLinkFormat = "#"; $this->_monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); $this->_year = date("Y"); } /** * Destruction de la class */ function __destruct(){ } /*=============== FIN = CONSTRUCTEUR & DESCTRUCTEUR = FIN ================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ private function setHtml(){ $ok = false; // Vérification de la validité des variables qui vont être utilisées $year = date("Y", mktime(0, 0, 0, 1, 1, $this->_year)); $checkEvents = true; $eventsTotal = 0; if(isset($this->_events)){ while (list($i, $v1) = each($this->_events)) { // Pour chaque mois ... while (list($j, $v2) = each($v1)) { // Pour chaque jour ... while (list($k, $v3) = each($v2)) { // Pour chaque événement du jour ... $eventsTotal++; if(!checkdate($v3["month"], $v3["day"], $year)){ $checkEvents = false; } } } } } $ok = $checkEvents; if($ok){ // Génération des variables utiles // liste des événements déjà insérés $eventsAlreadySet = array(); // tableau à 2 niveaux : mois, jours $rows = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); for($i=0; $i<count($rows); $i++){ // Pour chaque mois ... $rows[$i] = array(); $dayTotal = date("t", mktime(0, 0, 0, $i+1, 1, $year)); for($j=0; $j<$dayTotal; $j++){ // Pour chaque jour ... $dayNameIndex = date("w", mktime(0, 0, 0, $i+1, $j+1, $year)); $rows[$i][$j] = "<a href=\"".sprintf($this->_dayLinkFormat, $year, $i+1, $j+1)."\">".substr($this->_dayNames[$dayNameIndex], 0, 1)."</a>"; } } // génération de ce tableau while($eventsTotal > 0){ // On initialise la longueur du prochain événement $length = 0; // Pour chaque mois ... for($i=1; $i<=12; $i++){ // Pour chaque jour de ce mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ // On vérifie s'il existe un événement à cette date if($length == 0 && isset($this->_events[$i][$j])){ for($k=0; $k<count($this->_events[$i][$j]); $k++){ // Pour chaque événement de ce jour ... if(!$eventsAlreadySet[$i][$j][$k]){ // Le contenu html $row = "<div class=\"".$this->_events[$i][$j][$k]["style"]."\"> </div>"; $rowFirst = "<div class=\"".$this->_events[$i][$j][$k]["style"]."\">"; $rowFirst .= "<a href=\"".$this->_events[$i][$j][$k]["link"]."\">•</a>"; $rowFirst .= "<dl class=\"description\">"; $rowFirst .= "<dt>".$this->_events[$i][$j][$k]["title"]."</dt>"; $rowFirst .= "<dd>".$this->_events[$i][$j][$k]["description"]."</dd>"; $rowFirst .= "</dl>"; $rowFirst .= "</div>"; // La durée de l'événement $length = $this->_events[$i][$j][$k]["length"]; $maxLength = $length; // On mémorise l'événement if(!isset($eventsAlreadySet[$i])){ $eventsAlreadySet[$i] = array(); } if(!isset($eventsAlreadySet[$i][$j])){ $eventsAlreadySet[$i][$j] = array(); } $eventsAlreadySet[$i][$j][$k] = true; // On décrémente le total des événements $eventsTotal--; // On sort de la boucle des événements $k = count($this->_events[$i][$j]); } } } if($length < 1){ // On n'est pas dans un événement $rows[$i - 1][$j - 1] .= "<div> </div>"; }else{ // On est dans un événement $rows[$i - 1][$j - 1] .= ($length == $maxLength)?$rowFirst:$row; $length--; } } } } // 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>"; } $content .= $this->_title; if(!empty($this->_nextYearLink)){ $content .= "<a class=\"nextYearLink\" href=\"".$this->_nextYearLink."\">>></a>"; } $content .= "</dt>"; // DD $content .= "<dd>"; // premier semestre $content .= "<table>"; $content .= "<thead>"; $content .= "<tr>"; for($i=0; $i<6; $i++){ $content .= "<th class=\"width17\">".$this->_monthNames[$i]."</th>"; } $content .= "</tr>"; $content .= "</thead>"; $content .= "<tfoot>"; $content .= "<tr>".str_repeat("<td> </td>", 6)."</tr>"; $content .= "</tfoot>"; $content .= "<tbody>"; $content .= "<tr>"; // De janvier à juin ... for($i=1; $i<=6; $i++){ $content .= "<td>"; $content .= "<ol>"; // Pour chaque jour du mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ $content .= "<li class=\"".strtolower(date("l", mktime(0, 0, 0, $i, $j, $year)))."\">".$rows[$i - 1][$j - 1]."</li>"; } $content .= "</ol>"; $content .= "</td>"; } $content .= "</tr>"; $content .= "</tbody>"; $content .= "</table>"; // second semestre $content .= "<table>"; $content .= "<thead>"; $content .= "<tr>"; for($i=6; $i<12; $i++){ $content .= "<th class=\"width17\">".$this->_monthNames[$i]."</th>"; } $content .= "</tr>"; $content .= "</thead>"; $content .= "<tfoot>"; $content .= "<tr>".str_repeat("<td> </td>", 6)."</tr>"; $content .= "</tfoot>"; $content .= "<tbody>"; $content .= "<tr>"; // De juillet à décembre ... for($i=7; $i<=12; $i++){ $content .= "<td>"; $content .= "<ol>"; // Pour chaque jour du mois ... for($j=1; $j<=count($rows[$i - 1]); $j++){ $content .= "<li class=\"".strtolower(date("l", mktime(0, 0, 0, $i, $j, $year)))."\">".$rows[$i - 1][$j - 1]."</li>"; } $content .= "</ol>"; $content .= "</td>"; } $content .= "</tr>"; $content .= "</tbody>"; $content .= "</table>"; $content .= "</dd>"; // DL fin $content .= "</dl>"; }else{ $content = "[CALENDAR YEAR - ERROR]"; } $this->_html = $content; } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ public function __get($var){ switch($var){ case "html": $this->setHtml(); return $this->_html; case "title": return $this->_title; case "dayNames": return $this->_dayNames; case "dayLinkFormat": return $this->_dayLinkFormat; case "monthNames": return $this->_monthNames; case "year": return $this->_year; default: return null; } } public function __set($var, $value){ switch($var){ case "title": $this->_title = (string) $value; break; case "dayNames": $this->_dayNames = (array) $value; break; case "dayLinkFormat": // pour sprintf, le premier arguments des l'année %d, puis le mois %d et enfin le jour %d $this->_dayLinkFormat = (string) $value; break; case "monthNames": $this->_monthNames = (array) $value; break; case "year": $this->_year = (int) $value; break; default: } } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Ajoute un événement * @param string $title Le titre de l'événement * @param int $startMonth Le mois de l'événement * @param int $startDay Le jour de l'événement * @param int $length La durée de l'événement, en jour * @param string $url Le lien de l'événement * @param string $description La description de l'événement * @param string $style Le style css de l'événement */ public function addEvent($title, $startMonth, $startDay, $length, $url, $description, $style="event"){ if(!isset($this->_events)){ $this->_events = array(); } $startMonth = ($startMonth >=1 && $startMonth <=12)?(int)$startMonth:1; $startDay = ($startDay >=1 && $startDay <=31)?(int)$startDay:1; if(!isset($this->_events[$startMonth])){ $this->_events[$startMonth] = array(); } if(!isset($this->_events[$startMonth][$startDay])){ $this->_events[$startMonth][$startDay] = array(); } $length = ($length >= 1)?(int)$length:1; $this->_events[$startMonth][$startDay,][] = array("title"=>$title, "month"=>$startMonth, "day"=>$startDay, "length"=>$length, "link"=>$url, "description"=>$description, "style"=>$style); } /** * 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 ====================*/ /*========================================================================*/ }