Създаване на сайт с Dreamweaver MX 2004, PHP и MySQL, Урок 3.1

Генериране на HTML изход от PHP. Календарната променлива съдържа кода генериран от PHP и от HTML кода, използван за плана на разположението и форматирането.


Генериране на HTML изход от PHP

Календарната променлива съдържа кода генериран от PHP и от HTML кода, използван за плана на разположението и форматирането. Ще построите променливата $calendar , като последователно прикачвате към нея код, с използване на PHP оператора .= .

Решетката на календара, ще бъде HTML таблица, със седем колони за всеки ден от седмицата. Вмъкнете под останалите редове следния код:
$calendar = "<table>";

Следва левия контрол от навигацията, използван за показване на предходния месец. По друг начин казано - намаляване числото на текущия месец. Контролът има линк към страницата day.php и подава месеца, годината и деня като URL параметри: m, y и d съответно. Под останалите редове вмъкнете:
$calendar .= "<tr><td><a href=day.php?m=$mn&y=$yn&d=$day><</a></td>";

След като таблицата за календара има 7 колони и две от тях ще бъдат използвани за изобразяване на лява и дясна навигация, то останалите пет, ще бъдат сляти в една, която ще показва текущия месец и годината. Вмъкнете следния код под останалите:
$calendar .="<td colspan=5 align=center>$monthName, $year</td>";

Накрая дясната навигация ще бъде построена, както по-горе беше сторено с лявата. Ще има линк към страницата day.php и ще подава месеца, годината и деня като URL параметри. Под другите редове код добавете:
$calendar .="<td><a href=day.php?m=$mn2&y=$yn2&d=$day>></a></td></tr>";

Поздравления: Завършихте хедъра на календара. Следва да генерирате хедъра с дните от седмицата.

Хедъра ще бъде показан на нов ред от таблицата. Под останалите редове код вмъкнете:
$calendar .="<tr>";

Използвайки цикъла foreach, ще изобразите дните от седмицата. Всеки ден ще бъде изобразен в отделна таблична клетка. Под другите редове код вмъкнете:
foreach($daysOfWeek as $day) {
$calendar .= "<td>$day</td>";
}

За да приключите с хедъра за дните от седмицата, под останалите редове код, вмъкнете затварящия таг за ред:
$calendar .= "</tr>";

След като хедърите са вече по местата си, трябва да се заемете с тялото на календара. Следвайте стъпките долу и вмъкнете PHP кода във функцията body , точно в предложената последователност.

Започнете нов ред от таблицата
$calendar .= "<tr>";

Define a cursor variable that you will use to recurse through the days of the month. The variable will be initiated to 1.
$currentDay = 1;

Ако първият ден от месеца, не е първия ден от седмицата (такъв е Sunday), ще трябва да генерирате няколко празни клетки в началото на календарната таблица. Променливата $dayOfWeek гарантира, че календарната таблица има точно седем колони.
if ($dayOfWeek > 0) {
$calendar .= "<td colspan='$dayOfWeek'> </td>";
}

Генерирайте дните от месеца рекурсивно. Променливата $currentDay, ще бъде пресмятана, докато стане равна на броя на дните от избрания месец. Така също, променливата $dayOfWeek, може да приема стойности, само между 0 и 6. Когато достигне 7, това означава, че сте достигнали края на реда и променливата ще бъде пренастроена на 0, за да маркира началото на новата седмица.
while ($currentDay <= $noDays) {
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "</tr><tr>";
}

Генерирайте дните от месеца - всеки в отделна клетка.
$calendar .= "<td>$currentDay</td>";

Трябва да извършите две итерации, в посока преминаване през дните от месеца
}
$currentDay++;
$dayOfWeek++;
}

Трябва да извършите една последна проверка : Дали последния ден от месеца е последен ден от седмицата? Ако не е, ще трябва да генерирате няколко празни клетки в края на таблицата, за да попълните липсващите дни. В противен случай, календарната таблица ще се разруши.
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= "<td colspan='$remainingDays'> </td>";
}

Накрая, поставете затварящия табличен таг
$calendar .= "</table>";

Вие построихте функцията build_calendar. Функцията връща обекта $calendar , който да бъде използван в средата на приложението, но той няма да бъде изобразен на страницата. За да се появи календара на Вашите страници, напишете този код след дефиницията на функцията , във същия PHP кодов блок.

echo build_calendar($month,$year,$day);

Обаче, ако запишете темплейтната страница и се опитате да я разгледате с браузъра, ще видите един некоректен календар като на фиг.10.




фиг.10. Некоректно изобразяване на календара

Това е, защото не сте дефинирали параметрите на build_calendar функцията ($month, $year и $day). По подразбиране, тези параметри, ще имат стойности, зададени от съответните URL параметри, изпратени когато потребителя е направил запитване:

$month приема стойността на URL параметъра m
$year приема стойността на URL параметъра y
$day приема стойността на URL параметъра d
Или иначе казано, ако няма потребителско запитване за определен ден или месец , параметрите ще бъдат настроени на текущата дата , върната от функцията getdate.

За да приложите това поведение (behavior) , първо проверявате дали URL параметрите са били зададени ( потребителя е отправил запитване за преглед на месец или ден от blog архива). Вмъкнете следния код преди echo израза.
if (isset($_GET['m']) && isset($_GET['y']) && isset($_GET['d'])){
$month = $_GET['m'];
$year = $_GET['y'];
$day = $_GET['d'];
} else {
}

Както можете да видите, за да имате пълната дата и трите параметъра трябва да бъдат проверени. Ако искате да въвеждате ръчно горния код, можете да използвате свойството на Dreamweaver, за автоматично попълване на кода: $_GET и други PHP променливи, ще бъдат разпознати, след като стартирате изписването им, както е показано на фиг.11.


фиг.11. Свойството на DW MX за автоматично попълване на PHP кода

Забележка: $_GET е аналогична на стария $HTTP_GET_VARS масив, използван в по-стари PHP версии. По-стария вариант е на разположение, но е непрепоръчителен (отхвърлен ).

Във кодовия блок else, вмъкнете следните алтернативни стойности:
$dateComponents = getdate();
$month = $dateComponents['mon'];
$year = $dateComponents['year'];
$day = $dateComponents['mday'];

Сега, календара трябва да показва текущия месец . Направете кода четлив и лесно разбираем, като вмъкнете коментари и ...........

Следва продължение в Урок 3.2



/ Трябва да сте регистриран за да напишете коментар /