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

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

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

сто интерфейсом, хотя это, возможно, и не совсем корректно) сценария. Генератор 

данных — по-прежнему сущность, являющаяся объединением ядра и интерфейса. 
Кроме того, при использовании трехуровневой схемы пользователь никогда "не ви- 
дит" генератор данных. Он всегда имеет дело только с шаблоном страницы, который 

иногда выглядит, как программа. Это происходит при обращении к шаблону (а сле- 
довательно, и к генератору данных) из формы в браузере. 
Шаблон страницы 
Теперь шаблон сам вызывает генератор, который предоставляет ему нужные данные, 
а заодно и реагирует на запросы пользователя. Он выполняет это, например, при 
по- 
мощи все той же инструкции include: 
Листинг 30.3. Шаблон: gbook.html 
 
Гостевая книга 
 

Добавьте свое сообщение:

Ваше имя:
. . . Я не буду приводить текст страницы целиком, т. к. после определения формы он идентичен листингу 30.1. Итак, мы помещаем инструкцию include самой первой строчкой шаблона, и на это есть своя причина. Дело в том, что при различных, ска- жем так, "аварийных" событиях генератор данных может перенаправить браузер на другой адрес, не вернув управление в шаблон. Конечно, если бы include размеща- лась где-нибудь в середине шаблона, мы не смогли бы этого сделать, поскольку часть страницы могла быть уже отослана пользователю. Часть V. Приемы программирования на PHP 424 К слову сказать, при использовании шаблонизатора, описанного ближе к концу этой главы, мы преодолеваем и этот недостаток. А именно, имеется возмож- ность вставлять вызов генератора данных в любое удобное место шаблона. Заметьте, что шаблон имеет расширение HTML и выглядит для пользователя как обычная HTML-страница. Пользователь может и не подозревать, что в действитель- ности сценарий написан на PHP. Но, чтобы описанный механизм заработал, нам не- обходимо связать расширение HTML с обработчиком PHP. Мы уже делали это в гла- ве 29. Вот какую строчку нужно добавить в файл .htaccess, расположенный в каталоге (или "надкаталоге") сценария: AddHandler application/x-httpd-php .html Мы должны использовать директиву AddHandler, а не AddType, на случай, если для расширения HTML был ранее установлен другой обработчик. Им мо- жет быть, например, SSI (Server-Side Includes — Включения на стороне серве- ра) или даже PHP версии 3. В этом случае директива AddType "не срабатыва- ет". Пока применение include является для нас единственным средством обращения к генератору данных. Я все время повторяю эту фразу — "обращение к генератору дан- ных". Вообще говоря, она не совсем верна. В действительности обращение из шабло- на происходит лишь к интерфейсу сценария, но не к его ядру. Ядро доступно для шаблона лишь посредством общения с интерфейсом, и никак не иначе. В свою оче- редь, ядро также не может "разговаривать" с шаблоном (во всяком случае, не долж- но). Мы видим, что во всех операциях передачи данных неизменно используется "посред- ник" — интерфейсная часть программы. Это открывает для нас интересные потенци- альные возможности (которые на практике задействуются довольно редко). А имен- но, ядро и шаблон могут в принципе "разговаривать на разных языках", тогда интерфейс будет служить их "переводчиком". Если задуматься, то это и есть главная задача интерфейса. Диаграммы двухуровневой и трехуровневой моделей Наверное, пришло время нарисовать схему взаимодействия частей программы при использовании двухуровневой и трехуровневой модели построения, а также еще раз подчеркнуть их различия. Стрелками (рис. 30.1 и 30.2) обозначены зависимости, ко- торые можно охарактеризовать словами как "предоставляет данные". Пунктирные стрелки отмечают зависимости, реализуемые достаточно редко. На схемах это не что Глава 30. Код и шаблон страницы 425 иное, как переадресация на другую страницу, возможно, выполняемая генератором данных. Генератор данных Шаблон страницы Пользователь Рис. 30.1. Двухуровневая схема Мы видим, что в случае двухуровневой схемы связи между компонентами сценария исключительно циклические (см. рис. 30.1). Каждая часть программы взаимодейст- вует на равных с другой ее частью. Легко заметить, что рис. 30
 
<<-[Весь Текст]
Страница: из 287
 <<-