Фреймворк CodeIgniter Version 2.1.3


Класс Парсера шаблонов (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);
    Поддержать сайт на родительском проекте КГБ