Потребител Парола | Регистрация | Забравена парола
Меню
· Начало
· Файлове
· Форум
· Връзки
· Категории на уроците
· За контакти
· Фото галерия
· Търсене
Кажи на приятел

Вашия email:
email на приятел:
Копие за вас?
Реклама

Създаване на календарче.

PHP & MySQLОсновната функция в този урок се казва 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?!
С нейна помощ можете да променяте поведението на календара в зависимост от това, къде е щракнал потребителя или
пък да сменяте стила на визуализация на конкретни дни, но това ви го оставям като упражнение за вкъщи Smile

Съответно - можете да си поиграете и с разни цъкалки за смяна на месеца годината и прочее, но вярвам, че основната идея е станала ясна.
· smilev на January 12 2011 10:39:56 · 0 Коментари · 1833 Прочитания · Отпечатай
Коментари
Няма добавени коментари.
Напиши коментар
Моля влезте, за да коментирате.
Оценка
Рейтингите са достъпни само за регистрирани.

Моля влезте или се регистрирайте за да гласувате.

Няма оценки.
Вход
Потребител

Парола



Не сте регистрирани?
Натиснете тук за регистрация.

Забравена парола?
Натиснете тук за нова.
Анкета
С каква операционна система работите











Трябва да влезете за да гласувате.
ЧАТ
Трябва да влезате за да пуснете съобщение.

Няма съобщения.
Статистика