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

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

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

"стандартный" фильтр. Его задача — удалить из тел блоков все начальные символы 
табуляции, сколько бы их ни было. Это позволяет программистам и дизайнерам сво- 

бодно делать отступы в HTML-коде документов, не думая о том, что символы 
табуля- 
ции будут увидены пользователем при просмотре кода страницы. Впрочем, возмож- 
но, это и излишество (в конце концов, кому какое дело, как выглядит исходный 
код 
страницы). 
Ради интереса вы можете написать фильтр, который превращает все символы 
перевода строки в пробелы. Таким образом, исходный код страницы, которую 
получит пользователь, будет представлять собой одну длинную строку. Код 
этого фильтра занимает буквально одну строку на PHP! 
Поддержка трехуровневой схемы 
разработки сценариев 
Несомненно, наш шаблонизатор будет поддерживать трехуровневую схему разработ- 
ки сценариев. Иначе и быть не могло: мы не должны удалять из системы то, что 
пре- 
красно работает. Наверное, вы уже заметили, что в телах блоков мы можем 
свободно 
применять операторы PHP, а это требование является главным для любой схемы. 
Чтобы не "засорять" каталоги сайта сценариями — интерфейсами и генераторами 
данных — предлагается разместить все, что не относится к HTML-файлам и блокам, 
в отдельном (недоступном извне) каталоге. Им может быть, например, тот самый 
каталог, где располагаются различные модули. Ведь что такое ядро сценария, как 
не 
обычная библиотека, предоставляющая функции для всеобщего использования?! Взя- 
тие на вооружение такой техники также снимает с нас заботу об указании полного 
пути к файлам ядра, поскольку они находятся в общедоступном каталоге модулей, а 

значит, могут быть включены при помощи Uses(). 
С загрузкой интерфейсов посредством Uses() все обстоит несколько сложнее. 
Вполне может возникнуть ситуация, когда один и тот же интерфейс требуется в 
разных местах шаблона страницы для выполнения различных действий. Функ-

Глава 30. Код и шаблон страницы 441 
ция же Uses() всегда загружает файл лишь однажды, следя за тем, чтобы в 
следующий раз ее вызов был просто проигнорирован. Так что она нам не со- 
всем подходит. В качестве альтернативы предлагается добавить в код библио- 
текаря еще одну функцию (назвав ее, например, UsesMulti()), которая могла 
бы загружать указанный файл несколько раз. Единственное отличие ее кода от 
кода Uses() состоит в том, что она использует инструкцию include, а не 
include_once. Написание этой функции предоставляю читателю. 
Вот и подошло к концу описание нашего шаблонизатора. Надеюсь, я ничего не упус- 

тил. Впрочем, если вдруг в приведенном ниже коде вы обнаружите еще какую-нибудь 

возможность, которую я здесь забыл описать, ничего страшного, наверное, не 
случит- 
ся…. 
Обработчик Apache для шаблонизатора 
Так как шаблонизатор должен запускаться при обращении к любой странице на сер- 
вере, для него придется написать обработчик. Я привожу здесь его код без 
дополни- 
тельных пояснений, поскольку он практически полностью аналогичен тому коду, ко- 

торый мы рассматривали в главе 29. 
Листинг 30.13. Обработчик шаблонизатора: TemplateHandler.php 

		
 
<<-[Весь Текст]
Страница: из 287
 <<-