CodeIgniter User Guide Version 2.0.0


Класс 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');

Загруженный класс доступен как $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, и последний отсылает их в браузер. Если вы хотите, чтобы данные возвращались функцией, но не попадали в вывод, передайте TRUE в качестве первого параметра:

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

$this->parser->parse_string()

Этот метод работает так же, как и parse(), только принимает строку первым параметром, для размещения в файле отображения.

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

В примере выше код позволяет заменять простые переменные. Что если вы хотите заменить целый блок повторяющихся переменных, которые с каждым повтором имеют новые значения? Рассмотрим пример:

<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);