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