ГЛАВА 12. Шаблоны
Вывод файла
Вероятно, после обработки файла вы захотите отправить его в браузер, чтобы пользователь увидел результат обработки шаблона. В нашем примере для вывода
файла создается отдельный метод, приведенный в листинге 12.5, однако в зависимости от ситуации вывод также может интегрироваться с методом fiIe_parser().
Листинг 12.5. Метод вывода файла в браузере
function pnnt_file($file_id) {
// Вывести содержимое файла с идентификатором
$file_id print $this->files[$file id];
}
Все очень просто — при вызове print_file() содержимое файла, представленного ключом $file_id, передается в браузер.
В листинге 12.6 приведен пример использования класса template.
Листинг 12.6. Пример использования класса template
// Включить класс шаблона,
include("tempiate.class");
// Присвоить значения переменным
$page_title = "Welcome to your homepage!";
$bg_color = "white";
$user_name = "Chef Jacques";
// Создать новый экземпляр класса
$template= new template;
// Зарегистрировать файл "homepage.html" с псевдонимом "home"
$template->register_file("home", "homepage.html");
// Зарегистрировать переменные
$template->register_variables("home", "page_title, bg_color, user_name");
$template->file_parser("home");
// Передать результат в браузер
$template->print_file("home");
Если бы шаблон, приведенный в листинге 12.1, хранился в файле homepage.html в одном каталоге со сценарием из листинга 12.6, то в браузер был бы направлен следующий код HTML:
<html>
<head>
<title>:::::Welcome to your homepage!:::::</title>
</head>
<body bgcolor=white>
Welcome to your default home page, Chef Jacques!<br>
You have 5 MB and 3 email addresses at your disposal.<br>
Have fun!
</body>
</html>
Как видно из приведенного примера, все зарегистрированные переменные были заменены соответствующими значениями. При всей своей простоте класс template обеспечивает стопроцентное разделение уровней программирования и дизайна. Полный код класса template приведен в листинге 12.7.
Листинг 12.7. Полный код класса template
class template {
VAR $files = array();
VAR $variables = array();
VAR $opening_escape = '{';
VAR $closing_escape = '}' ;
// Функция: register_file()
// Назначение: сохранение в массиве содержимого файла.
// определяемого идентификатором $file_id
function register_file($file_id. $file_name) {
// Открыть $file_name для чтения или завершить программу
// с выдачей сообщения об ошибке.
$fh = fopen($file_name, "r") or die("Couldn't open $file_name!");
// Прочитать все содержимое файла $file_name в переменную.
$file_contents = fread($fh, filesize($file_name));
// Присвоить содержимое элементу массива с ключом $file_id.
$this->files[$file_id] = $file_contents;
// Работа с файлом завершена, закрыть его.
fclose($fh);
}
// Функция: register_variables()
// Назначение: сохранение переменных, переданных
// в параметре $variable_name. в массиве с ключом $file_id.
function register_variables($file_id, $variable_name) {
// Попытаться создать массив, содержащий переданные имена переменных
$input_variables = explode(".", $vahable_name);
// Перебрать имена переменных
while(list(, $value) = each($input_variables)) :
// Присвоить значение очередному элементу массива $this->variables
$this->variables[$file_id][] = $value;
endwhile;
}
// Функция: file_parser()
// Назначение: замена всех зарегистрированных переменных
// в файле с идентификатором $file_id
function file_parser($file_id) {
// Сколько переменных зарегистрировано для данного файла?
$varcount = count($this->variables[$file_id]);
// Сколько файлов зарегистрировано?
$keys = array_keys($this->files):
// Если файл $file_id существует в массиве $this->files
// и с ним связаны зарегистрированные переменные
if((in_array($file_id, $keys)) &&($varcount > 0) ) :
// Сбросить $х
$x = 0;
// Пока остаются переменные для обработки...
while($x < sizeof($this->variables[$file_id])) :
// Получить имя очередной переменной
$string = $this->variables[$file_id][$x];
// Получить значение переменной. Обратите внимание:
// для получения значения используется конструкция $$.
// Полученное значение подставляется в файл вместо
// указанного имени переменной.
GLOBAL $$string;
// Построить точный текст замены вместе с ограничителями
$needle = $this->opemng_escape.$string.$this->closing_escape;
// Выполнить замену.
$this->files[$file_id] = str_replace($needle, $$string, $this->files[$file_idj);
// Увеличить $х
$x++;
endwhile;
endif;
}
// Функция: print_file()
// Назначение: вывод содержимого файла,
// определяемого параметром $file_id
function print_file($file_id) {
// Вывести содержимое файла с идентификатором $file_id
print $this->files[$file_id];
}
} //END template.class
Назад |
Содержание раздела |
Общее Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|