Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.0

Search User Guide

# Класс Парсера шаблонов (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' => '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(). Они автоматически передаются классу вывода, чтобы быть отправленными в браузер. Однако, если вы хотите вернуть данные, вместо того, чтобы отправлять их в браузер, вы можете передать 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);`

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter