CodeIgniter, руководство пользователя к версии 1.6.1


Класс Template Parser

Класс Template Parser позволяет разбирать псевдо-переменные расположенные в ваших файлах Отображения. Он позволяет разбирать как простые переменные, так и переменные парных тегов. Если вы никогда не использовали шаблонизаторы, то псевдо-переменные выглядят так:

<html>
<head>
<title>{blog_title}</title>
</head>
<body>

<h3>{blog_heading}</h3>

{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>

Эти переменные на самом деле не PHP переменные, скорее это обычные текстовые представления, которые позволяют вам отделить PHP код от ваших шаблонов (файлов Отображения).

Примечание: CodeIgniter не требует от вас использовать этот класс, так как использование «чистого» PHP в ваших страницах Отображения позволяет им выполняться немного быстрее. Тем не менее, некоторые разработчики предпочитают использовать шаблонизаторы, особенно в тех случаях, когда они работают с дизайнерами, у которых работа с PHP может вызвать затруднения.

Еще примечание: Класс Template Parser не полнофункциональный шаблонизатор. Мы специально оставили его очень простым, чтобы сохранить максимум производительности.

Инициализация класса

Как и большинство других классов в CodeIgniter, класс Parser инициализируется в вашем контроллере при помощи функции $this->load->library:

$this->load->library('parser');

Однажды загруженный, объект библиотеки Parser будет доступен с помощью: $this->parser

В этой библиотеке доступны следующие функции:

$this->parser->parse()

Этот метод принимает имя шаблона и массив входных данных, и генерирует разобранную версию шаблона. Пример:

$this->load->library('parser');

$data = array(
            'blog_title' => 'My Blog Title',
            'blog_heading' => 'My Blog Heading'
            );

$this->parser->parse('blog_template', $data);

Первый параметр содержит имя файла Отображения (в этом примере этот файл назван blog_template.php), а второй параметр содержит ассоциативный массив с данными, которые необходимо заменить в шаблоне. В вышеприведенном примере, шаблон содержт две переменные: {blog_title} и {blog_heading}

Нет никакой необходимости выводить «echo» или делать что-то с данными возвращаемых $this->parser->parse(). Данные автоматически передаются в Output класс для отправки в броузер. Однако если вы хотите, чтобы функция все-таки возвращала данные, вместо отправки их в Output класс, вам необходимо передать TRUE (boolean) в качестве третьего параметра:

$string = $this->parser->parse('blog_template', $data, TRUE);

Парные переменные

Вышеприведенный пример показывает как заменять простые переменные. Но что, если вам необходимо заменить переменные в текущем блоке, которые при каждой итерации содержат новые значения? Пример рассматриваемого шаблона мы привели в начале этой страницы:

<html>
<head>
<title>{blog_title}</title>
</head>
<body>

<h3>{blog_heading}</h3>

{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
</body>
</html>

В вышеприведенном примере вы возможно уже заметили парные переменные: {blog_entries} данные... {/blog_entries}. В случае подобного этому, фрагмент данных между этими парными переменными будет повторяться несколько раз, в соотвествии с количеством строк в результате.

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

$this->load->library('parser');

$data = array(
              'blog_title'   => 'My Blog Title',
              'blog_heading' => 'My Blog Heading',
              'blog_entries' => array(
                                      array('title' => 'Title 1', 'body' => 'Body 1'),
                                      array('title' => 'Title 2', 'body' => 'Body 2'),
                                      array('title' => 'Title 3', 'body' => 'Body 3'),
                                      array('title' => 'Title 4', 'body' => 'Body 4'),
                                      array('title' => 'Title 5', 'body' => 'Body 5')
                                      )
            );

$this->parser->parse('blog_template', $data);

Если ваши «парные» данные поступают из результата запроса к базе данных, который уже является многомерным массивом, то вы можете просто использовать функцию базы данных result_array():

$query = $this->db->query("SELECT * FROM blog");

$this->load->library('parser');

$data = array(
              'blog_title'   => 'My Blog Title',
              'blog_heading' => 'My Blog Heading',
              'blog_entries' => $query->result_array()
            );

$this->parser->parse('blog_template', $data);