Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ючает перечисленные блоки, но она также состоит и из 

всех блоков, которые заданы для каталогов /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 вставляют только в шаблон страни- 
цы, потому что использование его в любом другом месте оказывается бессмыслен- 
ным (все равно он переопределится в шаблоне). 
Авто
 
<<-[Весь Текст]
Страница: из 287
 <<-