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

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

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

заинтересовавшей его странице "Современность", то, конечно, в заголовке окна 
брау- 
зера ему бы хотелось видеть что-то вроде "Книжный магазин | Философия | Совре- 
менность", а не просто "Современность". Мы уже договорились хранить название 
страницы в блоке Title. Но, конечно, мы бы не хотели записывать в каждой 
страни- 
це название полностью, потому что: 
r в будущем мы можем перенести страницу в другой раздел; 
r мы, возможно, захотим сменить разделитель | на /; 
r это нарушает концепцию минимальной избыточности данных, что, как мы уже 
неоднократно убеждались, не приводит ни к чему хорошему. 

Глава 30. Код и шаблон страницы 439 
Специально для решения такого рода задач в нашем шаблонизаторе предусмотрим 
механизм, который я далее буду называть автоматической склейкой тел блоков. Вот 

как он работает. Если при обработке очередного блока шаблонизатор видит, что 
его 
тело начинается с подстроки [Клей], он определяет, что текст должен быть 
"присты- 
кован" к предыдущему телу одноименного блока, но не должен заменить его. В 
каче- 
стве "строки-клея" выступает значение блока с именем Клей. Это позволяет нам в 
будущем изменить символ "склейки" лишь в одном месте, чтобы это затронуло весь 
сайт. В случае, если указана пустая пара квадратных скобок [] (то есть имя 
блока 
было опущено), используется тело блока с именем DefaultGlue (см. листинг 30.12),
 
а если и он отсутствует — то |. 
Теперь при загрузке страницы /phil/index.html из листинга 30.11, пользователь 
увидит ее полное название, составленное из блоков Title всех "надкаталогов" и 
са- 
мого файла страницы. Мы добиваемся этого, определив блок Title следующим об- 
разом: 
 
Поддержка механизма поиска 
включаемых файлов 
В шаблонизаторе есть одна полезная функция. Называется она Load() и занимается 
тем, что загружает указанный в параметрах файл, который как предполагается, 
также 
имеет блочную структуру. Имя этого файла можно задавать относительно текущего 
каталога (в котором расположен код, вызвавший Load()), либо же в абсолютном 
формате (относительно корневого каталога сервера). 
С помощью данной функции мы можем разбивать сложные шаблоны на части. На- 
пример, так можно было бы поступить с блоком, занимающимся формированием 
карты текущего раздела, особенно если существует несколько шаблонов, отображаю- 

щих эту карту. Функцию Load() можно вызывать в любом месте страницы или даже 
из файла .htaccess. Блоки, генерируемые ей, будут вставлены непосредственно пе- 

ред тем блоком, в котором она была вызвана. 
На примере использования библиотекаря мы уже убедились, насколько утомитель- 
ным может быть указание абсолютных путей к файлам. Поэтому функция Load() 
умеет сама искать включаемые файлы по серверу. Она делает это всякий раз, когда 

ей задан относительный путь к файлу. Поиск ведется на основе списка так 
называе- 
мых каталогов для поиска шаблонизатора. Этот список можно пополнять с помощью 
вызова Inc(), как это сделано, например, в листинге 30.12. Функция Inc() 
доволь- 
но интеллектуальна: даже если ей передан относительный путь к каталогу, она 
пере- 
водит его в абсолютный. Так что при использовании Load() из файла, расположен- 
ного в другом каталоге, не происходит никаких недоразумений. 

Часть V. Приемы программирования на PHP 440 
Фильтры блоков 
После того, как тело блока вычислено, шаблонизатор производит его 
дополнительную 
обработку. Делается это с помощью специальных функций-фильтров. Например, 
"склеивание" названий осуществляется именно таким фильтром. Система устроена 
таким образом, что позволяет добавлять и удалять ф
 
<<-[Весь Текст]
Страница: из 287
 <<-