| |
ючает перечисленные блоки, но она также состоит и из
всех блоков, которые заданы для каталогов /phil и /. Каталоги ведь ничем не
хуже
файлов. Соответственно, каждый каталог также может иметь собственный набор бло-
ков, которые будут унаследованы всеми файлами в нем, а также файлами его подка-
талогов.
Глава 30. Код и шаблон страницы 437
Предположим, что для каталога /phil определяется блок Title, содержащий, ска-
жем, строку Weekly. В то же время файл index.html также определяет блок Title.
Что произойдет в этом случае? А произойдет следующее: в шаблоне будет доступно
только тело последнего блока. Иными словами, тот блок, который определяется в
файле, заменит собой свое старое значение из каталога.
Нетрудно теперь догадаться, как происходит процесс сбора блоков для конкретной
запрошенной страницы. Вначале шаблонизатор получает все блоки корневого катало-
га, затем обрабатывает блоки подкаталога, причем уже имеющиеся одноименные
блоки перезаписываются. Описанный процесс продолжается до тех пор, пока не
будет
достигнут файл, который запрошен пользователем. Такая организация шаблонизато-
ра позволяет нам задавать для всех блоков значения по умолчанию. Эти значения
будут использованы шаблоном в случае, если те или иные блоки не
"переопределяют-
ся" в файле страницы. Чтобы задать тело по умолчанию для блока, достаточно
доба-
вить его к блокам корневого каталога сайта.
Мы знаем, что блоки файла хранятся в самом этом файле. Где же находятся блоки
каталога? Конечно, в специальном файле, расположенном в этом каталоге.
Хранить блоки каталогов в отдельном централизованном хранилище (наподо-
бие Реестра Windows) было бы большим просчетом. Этим мы перечеркнули
бы принцип минимизации зависимостей данных, о котором так много сказано в
этой главе.
Я предлагаю использовать в качестве такого файла .htaccess. Чтобы Apache не
"ругался" на не непонятные ему директивы , мы снабдим их симво-
лами комментария # в начале строки. Конечно, таким способом мы не сможем зада-
вать многострочные блоки для каталогов, но, как показывает практика, в
большинст-
ве случаев это и не нужно. В листинге 30.12 показан пример файла .htaccess,
расположенного в корневом каталоге сервера и задающего значения блоков по умол-
чанию.
Листинг 30.12. Блоки для корневого каталога: /.htaccess
#
#
#
#
# Связываем имя обработчика с конкретным файлом.
Action templhandler "/php/TemplateHandler.php?"
# Документы этого типа мы желаем "пропускать" через наш обработчик.
AddHandler templhandler .html .htm
Часть V. Приемы программирования на PHP 438
Обратите внимание на то, что в приведенном файле конфигурации задаются также и
некоторые директивы Apache, которые заставляют сервер запускать программу шаб-
лонизатора каждый раз, когда пользователь обращается к HTML-документу. Мы уже
знакомы с этими директивами: в главе 29 они использовались для того, чтобы
обес-
печить подключение библиотекаря к каждому сценарию сервера.
Наверное, вы уже заметили, что блочный файл, который обрабатывается шаб-
лонизатором, представляет собой ни что иное, как код на PHP с вызовами
управляющих функций типа Block(). Этим мы достигаем множества преиму-
ществ, самое главное из которых — значительное ускорение работы шаблони-
затора по сравнению со способом "ручного" разбора файлов. Кроме того, от-
ладочные качества сценария при таком подходе ничего не теряют: файлы
блоков загружаются с помощью include, а значит, случись там ошибка, PHP
исправно покажет имя файла и номер строки, где это произошло. Правда,
остается единственный недостаток: несколько некрасивый синтаксис
определения блоков, естественный лишь для программиста, но не для
дизайнера. Что же, всегда приходится идти на какие-то жертвы…
Внимательно взгляните на определение блока Template. Как уже упоминалось, этот
блок содержит имя шаблона, который будет задействоваться при отображении стра-
ницы. То, что блоки из родительских каталогов наследуются файлами, позволяет
нам
задать Template в одном-единственном месте, автоматически распространив его
действие на все файлы в каталоге. Не правда ли, это как раз то, чего мы так
долго
добивались?
Шаблонизатор также обрабатывает специальным образом еще один блок. Его назва-
ние — Output. Тело именно этого блока выводится в браузер пользователя, когда
вся
страница уже обработана. Обычно блок Output вставляют только в шаблон страни-
цы, потому что использование его в любом другом месте оказывается бессмыслен-
ным (все равно он переопределится в шаблоне).
Авто
|
|