26.3. Отделение HTML-кода от PHP-кода
И последнее, что мы рассмотрим в этой главе, - это использование функций include и require. Как вы знаете, эти функции включают в PHP-код целый файл (см. главу 7, "Операции ввода-вывода и доступ к диску"). Этот файл должен быть PHP-файлом независимо от его расширения. Если PHP-код появляется во включенном файле, он заключается в теги . Конечно, можно вспомнить о функциональных различиях между функциями include и require, но в данном случае это не суть важно.
Определенные фрагменты HTML-кода должны появляться на каждой хорошо спроектированной странице. Дополнительно можно разработать такие повторяющиеся элементы, как эмблема компании. Вместо того чтобы программировать ее на каждой странице, можно поместить ее в отдельный файл и динамически подключать его. В листинге 26.7 содержится HTML-код, который можно включить в верхнюю часть любой страницы на Web-узле. В листинге 26.8 есть две строки, завершающие страницу. Для того чтобы сформировать завершенную страницу, в листинге 26.10 объединено содержимое листинга 26.9 с открывающим и закрывающим кодом.
Таким образом, HTML- и PHP-код выделены в отдельные модули. В этом примере было запрограммировано включение двухстрочного HTML-файла, но с такой же легкостью можно включить и цветовые таблицы из листинга 26.2. HTML-код в листинге 26.7 может использоваться повторно; если программисту потребуется добавить что-либо на все страницы Web-узла, достаточно отредактировать только один этот файл. Добавив функцию из листинга 26.1, им можно воспользоваться в коде, представленном в листинге 26.9.

| Листинг 26.7. Начало HTML-страницы

PHP


| Листинг 26.8. Конец HTML-страницы


Листинг 26.9. Содержимое страницы


Это тело страницы.
Это только часть HTML-кода.



| Листинг 26.10. Сценарий создания страницы_

// вставить код открытия HTML- страницы
require("26.7");
// вставить содержимое
require("26.9");
// вставить завершающий код HTML- страницы require("26.8");
?>

 Такой подход помогает разработать определенный шаблон, при котором все страницы становятся тремя вызовами функции require. Первый и последний вызовы всегда одинаковы. Страницы будут отличаться только именем файла во втором операторе require, что позволяет создать узел, содержащий единственный сценарий PHP. Этот метод создания Web-узлов получит свое развитие в главе 27, "Проектирование". 

26.4. Создание HTML-кода и использование PHP-кода
HTML-тег select позволяет создать перечень вариантов, которые появляются в виде ниспадающего меню. Ситуации, когда содержимое этого списка необходимо создавать динамически, довольно нередки. Содержимое такого меню, как, например, выбор пользователей Web-приложения, выбирается из базы данных. В других случаях требуется выбрать месяц, день и год. Вот два аспекта этой проблемы. Во-первых, существует довольно простая проблема создания всех значений из тегов option. Это лучше всего делать в цикле. Во-вторых, необходимо предварительно выбрать одно из значений.
Независимо от источника содержимого, будь то база данных либо нечто другое, решение лежит в одной и той же плоскости. Продемонстрировать это можно на примере получения текущей даты от пользователя, месяца, дня и года, с помощью трех полей select. Для создания списка, включающего все месяцы, их лучше всего выбирать из массива. Дни и годы обозначаются цифрами, поэтому их значение и отображение совпадают (листинг 26.11).

Листинг 26.11. Выбор даты

** Получить три меню выбора месяца, дня и года */
function getDateSelectors($name, $date=NULL) {
static $monthName = array(1=>"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
if($date === NULL)
{
$date = time();
}
//создать меню выбора месяца $givenMonth = date("m", $date);
$fields = "n";
$fields .= "n";
$fields .= "n"; return($fields);
}
// начало документа print("n" . "n" .
"Листинг 26.11n" .
"n");
// начало тела страницы
print("n");
// выбрать дату по умолчанию
if(isset($_REQUEST['sample']))
{
//сконструировать время $UseDate = mktime(0, 0, 0,
$_REQUEST[,sample,][,month'],
$_REQUEST[,sample,][,day'],
$_REQUEST['sample,][,year']);
}
else
{
//использовать значение, заданное по умолчанию
$UseDate = NULL;
}
//создать простейшую форму
print("

n");
print(getDateSelectors("sample", $UseDate));
print("n");
print("

n");
// закрыть HTML- документ
print("n" .
"n");

Позиции меню для каждого селектора генерируются в цикле for. Месяцы лежат в диапазоне 1-12, а дни - в диапазоне 1-31. Для отображения годов был выбран 11-летний диапазон, в середине которого находится текущий год. Заметим, что при вводе даты происходит обновление страницы и устанавливается форма с выбранной датой. Здесь ключевым является добавление оператора if. Каждый раз в цикле текущее значение сравнивается с выбираемым значением.
Обратите внимание, каким образом эти три меню передают свои значения как часть массива. PHP "понимает", что из полей, заданных именами, заключенными в квадратные скобки, необходимо сформировать массив. Используя этот метод, никогда не заключайте ассоциативный ключ в кавычки, так как вместо {$name}['month'] необходимо использовать {$name}[month]. При анализе полей формы PHP не ожидает никаких ограничителей вокруг ключа.