Класс Парсера шаблонов (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 НЕ требует, чтобы вы использовали этот класс, но просто дает вам такую возможность.
Еще примечание: Класс шаблонов Template Parser Class не является полноценным движком шаблонов. Мы сохранили его очень простым, для обеспечения максимальной производительности.
Инициализация класса
Как и большинство других классов в CodeIgniter, класс парсера инициализируется в вашем контроллере посредством функции $this->load->library:
$this->load->library('parser');
Загруженный объект класса доступен как: $this->parser
Следующие функции доступны в этой библиотеке:
$this->parser->parse()
Этот метод принимает имя шаблона и любые данные на вход, и генерирует обработанную версию. Пример:
$this->load->library('parser');
$data = array(
'blog_title' => 'Залоговок моего блога',
'blog_heading' => 'Заглавие блога'
);
$this->parser->parse('blog_template', $data);
Первый параметр принимает имя файла отображения (в этом примере это будет blog_template.php), а второй параметр содержит ассоциативный массив данных, которыми должны быть заменены псевдопеременные в шаблоне. В примере выше, шаблон будет содержать две переменных: {blog_title} и {blog_heading}
Не нужно делать echo() или что-то еще с данными, возвращаемыми $this->parser->parse(). Они автоматически передаются классу вывода, чтобы быть отправленными в браузер. Однако, если вы хотите вернуть данные, вместо того, чтобы отправлять их в браузер, вы можете передать 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' => 'Заголовок моего блога',
'blog_heading' => 'Заглавие блога',
'blog_entries' => array(
array('title' => 'Заголовок 1', 'body' => 'Содержимое 1'),
array('title' => 'Заголовок 2', 'body' => 'Содержимое 2'),
array('title' => 'Заголовок 3', 'body' => 'Содержимое 3'),
array('title' => 'Заголовок 4', 'body' => 'Содержимое 4'),
array('title' => 'Заголовок 5', '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' => 'Заголовок моего блога',
'blog_heading' => 'Заглавие блога',
'blog_entries' => $query->result_array()
);
$this->parser->parse('blog_template', $data);