| ||
|
Създаване на календарче.Основната функция в този урок се казва calender_parse() и приема три параметъра: $month, $year, $cfg Функцията връща приготвения HTML, който може директно да се принтне някъде в страницата или да се вложи в темплейт. function calender_parse($month, $year, $cfg='') { //в началото събираме информация за това колко дни има в месеца и в кой ден от седмицата е 1-во число. $total_days = cal_days_in_month(CAL_GREGORIAN, $month, $year); $first_day = calender_firstDayOfMonth($month, $year); // попълваме масив от 5 реда и 7 колони с for ($i=1; $i<=5; $i++){ for ($j=1; $j<=7; $j++){ $pa[$i][$j] = ' '; } } //сега започвайки от клетка $first_day-1 на 1-ви ред, започваме да пишем номерата на дните докато стигнем $total_days $crr_day = 1; for ($i=$first_day - 1; $i<$first_day+$total_days-1; $i++){ if($i >= 35) $cellID = $i-35; //ако прехвърлим последната клетка на последния ред, започваме от 1-ва клетка на 1-ви ред. else $cellID = $i; //понеже въртим цикъла линейно е нужно да изнамерим номера на реда и колоната. $rowID = floor($cellID/7)+1; $colID = $cellID - ($rowID-1)*7 + 1; //попълваме клетката. $pa[$rowID][$colID] = $crr_day; $crr_day++; } //тук поставяме заглавките на седмичните дни. $str = "<tr><td><b>П</b></td><td><b>В</b></td> <td><b>С</b></td><td><b>Ч</b></td><td><b>П</b></td> <td><span style="color: #FF0000"><b>С</b></span></td> <td><span style="color: #FF0000"><b>Н</b></span></td></tr>"; //а тук приготвяме HTML кода. foreach($pa as $rwID => $rwData){ $str .= '<tr>'; foreach($rwData as $colID=>$day){ if(calender_isToday($day, $month, $year)) $day = "<b>$day</b>"; if($colID >= 6) $day = "<span style="color: #FF0000">$day</span>"; $str .= "<td align="right">$day</td>"; } $str .= '</tr>'; } return "<table bgcolor=FFFFFF align=center style="border: solid 1px;">$str</table>"; } //Помощтните ни функции са две и са много прости. //Първата изважда индекса на деня от седмицата, в който е 1-во число на месеца. Съответно: 1 - Понеделник, 2 - Вторник, ... , 7 - Неделя function calender_firstDayOfMonth($month, $year) { $ret = JDDayOfWeek(unixtojd(mktime(0, 0, 0, $month, 1, $year))); if($ret == 0) $ret=7; return $ret; } //И следващата функция просто проверява дали посочените $day, $month, $year оговарят на днешния ден. //Тук да споменем, че $day е число от 1 до 31; function calender_isToday($day, $month, $year) { $beg = mktime(0, 0, 0, $month, $day, $year); $end = mktime(0, 0, 0, $month, $day+1, $year); $now = time(); return ($beg <= $now && $now < $end); } ?> Ето и резултата, ако повикаме функцията така: calender_parse(3,2007): [img]http://uroci.net/images/stories/uroci_17/calender.gif [/img] Може би забелязахте, че никъде не използвахме променливата $cfg?! С нейна помощ можете да променяте поведението на календара в зависимост от това, къде е щракнал потребителя или пък да сменяте стила на визуализация на конкретни дни, но това ви го оставям като упражнение за вкъщи Съответно - можете да си поиграете и с разни цъкалки за смяна на месеца годината и прочее, но вярвам, че основната идея е станала ясна.
|
|