Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещев Web - программирование 2015-02-17.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.93 Mб
Скачать

1) Регистрация файлов

В процессе регистрации содержимое файла сохраняется в массиве с ключом, однозначно идентифицирующим этот файл. Метод register_file( ) открывает и читает содержимое файла, имя которого передается в качестве параметра. Код этого метода приведен ниже.

function register_file($file_id, $file_name) {

// Открыть $file_name для чтения или завершить программу с сообщением об ошибке

$fh = fopen($file_name, "r") or exit("Невозможно открыть файл $file_name!");

$file_contents = fread($fh, filesize($file_name)); // Прочитать файл $file_name в переменную

// Присвоить содержимое элементу массивас ключом $file_id.

$this->files[$file_id] = $file_contents;

fclose($fh); // Работа с файлом завершена, закрыть его.

}

Параметр $file_id содержит идентификатор — «псевдоним» для последующих операций с файлом, упрощающий последующие вызовы метода. Идентификатор используется в качестве ключа для индексирования массива $files.

Пример регистрации файла:

include("tempiate.class"); // Включить класс шаблона

$template = new template; // Создать новый экземпляр класса

// Зарегистрировать файл "homepage.HTML", присвоив ему псевдоним "home"

$template->register_file("home", "homepage.HTML");

2) Регистрация переменных

После регистрации файлов необходимо зарегистрировать все переменные, которые будут интерпретироваться особым образом.

Метод register_variables( ) работает по тому же принципу, что и register_file( ) - он читает имена переменных и сохраняет их в массиве $variables:

function register_vanables($file_id, $variable_name) {

// Попытаться создать массив, содержащий переданные имена переменных

$input_variables = explode(".", $variable_name);

while (Iist($value) = each($input_variables)) // Перебрать имена переменных

$this->variables $this->variables[$file_id][] = $value // Присвоить значение элементу массива

}

В параметре $file_id передается ранее присвоенный псевдоним файла. Например, в предыдущем примере файлу homepage.HTML был присвоен псевдоним home. Обратите внимание — при регистрации имен переменных, которые должны особым образом обрабатываться в файле homepage.HTML, вы должны ссылаться на файл по псевдониму! В параметре $variable_name передаются имена одной или нескольких переменных, регистрируемых для указанного псевдонима.

Пример.

// Включить класс шаблона include("tempiate.class");

// Создать новый экземпляр класса $template = new template;

// Зарегистрировать файл "homepage.HTML",

// присвоив ему псевдоним "home" $template->register_file("home", "homepage.HTML");

// Зарегистрировать несколько переменных

$template->register_variablest"home", "page_title.bg_color,user_name");

3) Обработка файла

После того как файлы и переменные будут зарегистрированы в системе шаблонов, можно переходить к обработке зарегистрированных файлов и замене всех ссылок на переменные с соответствующими значениями.

Метод file_parser( ):

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 $x = 0 Пока остаются переменные для обработки...

while ($x < sizeof($this->variables[$file_id]))

{ // Получить имя очередной переменной $string = $this->variables[$file_id][$x];

// Получить значение переменной. Обратите внимание:

// для получения значения используется конструкция $$.

// Полученное значение подставляется в файл вместо

// указанного имени переменной.GLOBAL $$string:

// Построить точный текст замены вместе с ограничителями

$needle = $this->opening_escape.$string.$this->closing_escape;

// Выполнить замену.

$this->files[$file_id] = str_replace( $needle.$$string.$this->files[$file_id]); $x++;

}

}

}

Сначала проверяем, присутствует ли указанное имя файла в массиве $this->files. Если файл был зарегистрирован, мы также проверяем, были ли для него зарегистрированы переменные, и если были - значения этих переменных подставляются в содержимое $file_id.

Пример.

// Включить класс шаблона include("template. class") ;

$page_title = "Приветствуем Вас на нашей домашней страничке!";

$bg_color = "white"; $user_name = "Chef Jacques";

$template = new template; // Создать новый экземпляр класса

// Зарегистрировать файл "homepage.HTML", присвоив ему псевдоним "home"

$template->register_file( "home", "homepage.HTML");

// Зарегистрировать несолько переменных

$template->register_variables("home", "page_titie, bg_color, user_name");

$template->file_parser("home");

Поскольку переменные page_title, bg_color и user_name были зарегистрированы, значения каждой переменной (присвоенные в начале сценария) подставляются в страницу homepage.HTML, хранящуюся в массиве files (атрибуте объекта-шаблона). На этом предварительная подготовка завершается, остается лишь вывести полученный шаблон в браузере.