Page 67 - 4636
P. 67
При перегляді цього лістингу зверніть увагу, що функції DisplayStyles(),
DisplayHeader() і DisplayFooter() повинні відображати великий блок статичного HTML-
коду без якої-небудь обробки з допомогою РНР. Тому всередині функцій ми просто вказали
завершальний РНР-дескриптор (?>), ввели HTML-код, а потім за допомогою відкриваючого РНР-
дескриптора (<?php) знову перейшли до РНР.У цьому класі визначені ще дві операції. Операція
DisplayButton() виводить одиночну кнопку меню. Якщо кнопка вказує на поточну сторінку,
замість неї з'являється кнопка неактивна, яка виглядає дещо інакше і не пов'язана з жодними
сторінками. Це забезпечує однаковий зовнішній вигляд сторінок і дозволяє відвідувачам візуально
визначати місцезнаходження. Операція IsURLCurrentPage() визначає, вказує пов'язаний з
кнопкою URL-адресу на поточну сторінку. Для цього служить безліч технологій. Ми скористалися
строковою функцією strpos(), щоб визначити, чи містить даний URL в одній із змінних,
встановлених сервером. Оператор strpos ($_SERVER['PHP SELF'],$url) повертає число,
якщо рядок, що зберігається у змінній $url, наявне всередині суперглобальної змінної
$_SERVER['PHP_SELF'], або false, якщо це не так. Щоб можна було користуватися класом Page,
файл раді. inc потрібно включити в сценарій і викликати Display(). КОД, показаний у лістингу 2.5,
створює домашню сторінку сайту компанії ВОВАН Convulsing і забезпечує висновок, який дуже
схожий на згенерований раніше. Цей код виконує перераховані нижче дії.
1. Використовує оператор require для включення вмісту файлу page.inc, який містить визначення
класу Page.
2. Створює екземпляр класу Page. Цьому примірнику призначається ім'я $homepage.
3. Створює контент - деякий текст і HTML-дескриптори, які повинні бути на сторінці. (При цьому
неявно викликається __set.)
4. Викликає операцію Display() всередині об'єкта $homepage, яка забезпечує відображення
сторінки у вікні браузера відвідувача.
Лістинг 2.5. home.php - ця домашня сторінка використовує клас Раді для виконання більшої
частини дій, необхідних для її генерації
<?phprequire ("page.inc");$homepage = new Page();$homepage->content =
"<р>Ласкаво просимо на сайт компанії "."ВОВАН Convulsing. Познайомтеся
з нашою діяльністю.</р>"."<р>Ви забудете про свої проблеми, коли ми
розповімо вам про наших!</р>"; $homepage->Display();?>
Як видно з лістингу 2.5, для генерації нових сторінок з використанням класу Page потрібно
виконати зовсім незначний обсяг роботи. Таке використання класу означає, що всі сторінки будуть
дуже схожі одна на одну. Якщо потрібно, щоб у деяких розділах сайту використовувався варіант
стандартної сторінки, можна просто скопіювати page. inc в новий файл page2.inc і внести в нього деякі
зміни. Це означає, що при кожному оновленні або виправлення в файлі page.inc не можна забувати
внести ці зміни в файл page2.іnс.
Більш раціональний підхід передбачає використання механізму успадкування для створення нового
класу, який успадковує більшу частину своїх функціональних можливостей від класу Page, але
перевизначає ті частини, які повинні відрізнятися. Нам потрібно, щоб сторінка послуг на сайті ВОВАН
Convulsing містила другу навігаційну панель. Сценарій, показаний у лістингу 2.6, вирішує це завдання
шляхом створення нового класу ServicesPage, успадкованого від Page. У цьому класі ми
визначаємо новий масив $row2buttons, який містить кнопки та посилання, необхідні у другому
рядку. Оскільки ми хочемо, щоб цей клас в основному зберіг поведінку батьківського класу, ми
перевизначаємо тільки ту частину, яка повинна бути змінена, а саме - операцію Display().
Лістинг 2.6. services .php - сторінка послуг, успадкована від класу Page, але з перевизначеною
операцією Display () для зміни висновку
<?phprequire ("page.inc”);class ServicesPage extends Page (private
$row2buttons » array("Реінжиніринг" => "reengineering.php",
"Відповідність стандартам" -> "standards.php", "Тренування дикції" ->
"buzzword.php", "Формулювання мети" -> "mission.php" ) ;function
DisplayO ( echo "<html>\n<head>\n";$this -> DisplayTitle0 ;$this ->
64