| |
)=>$New)+$Book;
Часть V. Приемы программирования на PHP 420
// Записать книгу на диск.
SaveBook(GBook,$Book);
}
// Все. Теперь у нас в $Book хранится содержимое книги в формате:
// array (
// время_добавления => array(
// (или id) name => имя_пользователя,
// text => текст_пользователя
// ),
// . . .
// );
// Вот теперь загружаем шаблон страницы.
include "gbook.htm";
?>
Как видим, исполняемая часть довольно небольшая и, действительно, занимается
лишь подготовкой данных для их последующего вывода в шаблоне. Шаблон рассмат-
ривается этой составляющей как обычный PHP-файл, который она подключает при
помощи инструкции include. Ясно, что весь код шаблона (хотя его и очень мало)
выполнится в том же контексте, что и генератор данных, а значит, ему будет
доступна
переменная $Book.
Логически весь код можно разбить на 3 части. Первая из них — задание конфигура-
ции сценария, в нашем случае она состоит всего лишь в определении одной-
единственной константы GBook, хранящей имя файла гостевой книги. Во второй час-
ти, которую можно назвать "прикладным интерфейсом" гостевой книги, содержатся
описания функций, достаточных для работы с гостевой книгой. Это, конечно, функ-
ции загрузки и сохранения наполнения книги на диске. Наконец, третья часть
генера-
тора данных обрабатывает запросы пользователей на добавление данных в книгу.
Таким образом, для работы нашего сценария нужны три файла: генератор данных,
шаблон книги и файл с записями книги. В принципе, это минимум, если только не
привлекать для хранения записей базу данных (что, безусловно, лучше в больших
программах). Однако в нашем случае проще как раз работать с файлами, поэтому я
на них и остановился.
Обратите внимание: для того чтобы теперь переделать гостевую книгу так,
чтобы она использовала базу данных, а не файл, достаточно изменить всего
лишь 2 функции: LoadBook() и SaveBook(). Ни других частей генератора
данных, ни, тем более, шаблона это не затронет. На самом деле, такой подход
Глава 30. Код и шаблон страницы 421
не является случайностью: он очень тесно связан с трехуровневой схемой по-
строения интерактивных сценариев, о которой мы скоро будем говорить.
Взаимодействие генератора
данных и шаблона
Вернемся опять к тому же генератору данных. В нем мы проверяем, не запущен ли
сценарий книги в ответ на нажатие кнопки Добавить в форме. Тут я хочу кое-что
напомнить. Если вызвать программу без параметров, то пользователю будет просто
выдано содержимое гостевой книги, в противном же случае (то есть при запуске из
формы) осуществится добавление записи. Таким образом, мы "одним махом убиваем
двух зайцев": используем один и тот же шаблон для двух разных страниц, внешне
крайне похожих. Такую практику нужно только приветствовать, не правда ли? Опре-
деляем мы, нужно ли добавлять запись, по состоянию переменной $doAdd. Помните,
именно такое имя имеет submit-кнопка в форме? Когда ее нажимают, сценарию по-
ступает пара "doAdd=Добавить!", чем мы и воспользовались. Итак, если кнопка
нажата, то мы вставляем запись в начало массива $Book и сохраняем его на диске.
Обратите внимание, насколько проста операция добавления записи. Так получилось
вследствие того, что мы предусмотрительно дали полям формы с названием и тек-
стом имена, соответственно, New[name] и New[text], которые PHP преобразовал в
массив. Вообще говоря, придумывание таких имен для полей — задача как раз того
"третьего лица", о котором я говорил выше. Это — работа скорее программистская,
нежели дизайнерская (хотя, безусловно, от удачного планирования названий имен
полей зависит не так уж и мало).
Подчеркиваю, что в самом коде генератора данных gbook.php в принципе не при-
сутствует никаких данных о внешнем виде нашей гостевой книги. В нем нет ни
одной
строчки на HTML. Иными словами, генератору совершенно "все равно", как выгля-
дит книга. Он занимается лишь ее загрузкой и обработкой. Это значит, что в
будущем
для изменения внешнего вида гостевой книги нам не придется править этот код, т.
е.
мы добились некоторого желаемого разделения труда дизайнера и программиста.
С другой стороны, шаблон gbook.htm не делает никаких предположений о том, как
же именно хранится книга на диске и как она обрабат
|
|