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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ассива. Если $Vars===false, то вместо 
// него используется массив $GLOBALS (то есть делаются доступными все 
// глобальные переменные). Значение параметра $ReadFile "истина" 
// указывает, что в $templ хранится не содержимое шаблона, а имя файла, 
// из которого его можно получить. 
// Замечание: параметр $Vars передается по ссылке, т. к. для 
// массивов передача ссылки работает значительно быстрее, чем 
// копирование. 
function _RunTemplate($tmpl, $ReadFile, &$Vars) 
{ // Перехватываем стандартный поток вывода 
ob_start(); 
// Если $Vars опущен, использовать вместо него $GLOBALS. Мы 
// используем ссылки для убыстрения работы, чтобы PHP не пришлось 
// копировать значения, чем экономим время. 
if($Vars===false) $Vars=&$GLOBALS; 
// Делаем доступными коду шаблона все переменные. Также создаем 
// ссылки из соображений производительности. 
foreach($Vars as $k=>$v) $$k=&$Vars[$k]; 
// Включаем файл по include, либо же запускаем eval(). 
if($ReadFile) { include $tmpl; } 
else eval("?>$tmpl; 
Зачем нам две различных функции для "раскрытия" шаблона — 
ExpandTemplate() и ExpandFile()? Почему бы не использовать всегда 
ExpandTemplate(), предварительно загружая тело шаблона с помощью 
функций чтения файлов? Все дело в тонкостях обработки ошибочных ситуаций 
в PHP. А именно, в случае ошибки внутри файла, загружаемого по include, 
PHP сообщит нам имя этого файла. Если же ошибка произойдет в eval(), 
выведется только номер строки, что сильно затруднит отладку. Поэтому реко- 
мендуется везде, где это допустимо, вызывать функцию ExpandFile(). 
Отправка и перекодирование писем 
Приступим ко второй части нашей задачи — напишем функцию PostMail(), кото- 
рая будет отправлять письмо адресату, преобразовав его предварительно в нужную 
кодировку. Вот какие возможности она будет обеспечивать: 
r вставку заголовка From в письмо, если он еще не присутствует в сообщении; 
r преобразование письма в нужную кодировку кириллицы; 
r вставку соответствующего значения в заголовок Content-type, чтобы письмо 
было "понятно" любой почтовой программе; 
r поддержку функций мини-шаблонизатора, который мы уже написали. 
В листинге 32.2 приведен исходный код функции. Как обычно, мы помещаем функ- 
цию в отдельный модуль библиотекаря (библиотекарь описан в главе 29). Этот мо- 
дуль будет использовать возможности, предоставляемые библиотекой 
Minitemplate.phl. 

Глава 32. Почтовые шаблоны 489 
Листинг 32.2. Функция PostMail(): Mail.phl 

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