Spec-Zone.ru › CodeIgniter 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 не требует использования этого класса, так как использование чистого PHP в ваших страницах представления позволяет им работать немного быстрее. Однако некоторые разработчики предпочитают использовать движок шаблонов, если они работают с дизайнерами, которые, по их мнению, столкнутся с некоторыми трудностями при работе с PHP.

Важно

Класс Template Parser не является полным решением для разбора шаблонов. Мы специально сделали его очень компактным, чтобы сохранить максимальную производительность.

  • Использование класса Template Parser
    • Инициализация класса
    • Разбор шаблонов
    • Пары переменных
    • Примечания по использованию
    • Фрагменты представления
  • Справочник по классу

Использование класса Template Parser

Инициализация класса

Как и большинство других классов в CodeIgniter, класс Parser инициализируется в вашем контроллере с помощью метода $this->load->library():

$this->load->library('parser');

После загрузки объект библиотеки Parser будет доступен с помощью: $this->parser

Разбор шаблонов

Вы можете использовать метод parse() для разбора (или рендеринга) простых шаблонов, например:

$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}

Нет необходимости «выводить» или что-либо делать с данными, возвращаемыми $this->parser->parse(). Они автоматически передаются в класс вывода для отправки в браузер. Однако, если вы хотите получить данные вместо их отправки в класс вывода, вы можете передать TRUE (булево значение) в качестве третьего параметра:

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

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

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

<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}. В таком случае весь кусок данных между этими парами будет повторяться несколько раз, соответствуя количеству строк в элементе «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);

Примечания по использованию

Если вы включите параметры подстановки, которые не указаны в вашем шаблоне, они игнорируются:

$template = 'Hello, {firstname} {lastname}';
$data = array(
        'title' => 'Mr',
        'firstname' => 'John',
        'lastname' => 'Doe'
);
$this->parser->parse_string($template, $data);

// Result: Hello, John Doe

Если вы не включите параметр подстановки, который указан в вашем шаблоне, исходная псевдопеременная отображается в результате:

$template = 'Hello, {firstname} {initials} {lastname}';
$data = array(
        'title' => 'Mr',
        'firstname' => 'John',
        'lastname' => 'Doe'
);
$this->parser->parse_string($template, $data);

// Result: Hello, John {initials} Doe

Если вы предоставляете строковый параметр подстановки, когда ожидается массив, т. е. для пары переменных, подстановка выполняется для открывающего тега пары переменных, но закрывающий тег пары переменных не отображается должным образом:

$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})';
$data = array(
        'degrees' => 'Mr',
        'firstname' => 'John',
        'lastname' => 'Doe',
        'titles' => array(
                array('degree' => 'BSc'),
                array('degree' => 'PhD')
        )
);
$this->parser->parse_string($template, $data);

// Result: Hello, John Doe (Mr{degree} {/degrees})

Если вы назовете один из ваших отдельных параметров подстановки так же, как один, используемый внутри пары переменных, результаты могут быть не такими, как ожидалось:

$template = 'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})';
$data = array(
        'degree' => 'Mr',
        'firstname' => 'John',
        'lastname' => 'Doe',
        'degrees' => array(
                array('degree' => 'BSc'),
                array('degree' => 'PhD')
        )
);
$this->parser->parse_string($template, $data);

// Result: Hello, John Doe (Mr Mr )

Фрагменты представления

Вам не нужно использовать пары переменных, чтобы получить эффект итерации в ваших представлениях. Вы можете использовать фрагмент представления для того, что должно быть внутри пары переменных, и контролировать итерацию в вашем контроллере вместо представления.

Пример с итерацией, контролируемой в представлении:

$template = '<ul>{menuitems}
        <li><a href="{link}">{title}</a></li>
{/menuitems}</ul>';

$data = array(
        'menuitems' => array(
                array('title' => 'First Link', 'link' => '/first'),
                array('title' => 'Second Link', 'link' => '/second'),
        )
);
$this->parser->parse_string($template, $data);

Результат:

<ul>
        <li><a href="/first">First Link</a></li>
        <li><a href="/second">Second Link</a></li>
</ul>

Пример с итерацией, контролируемой в контроллере, используя фрагмент представления:

$temp = '';
$template1 = '<li><a href="{link}">{title}</a></li>';
$data1 = array(
        array('title' => 'First Link', 'link' => '/first'),
        array('title' => 'Second Link', 'link' => '/second'),
);

foreach ($data1 as $menuitem)
{
        $temp .= $this->parser->parse_string($template1, $menuitem, TRUE);
}

$template = '<ul>{menuitems}</ul>';
$data = array(
        'menuitems' => $temp
);
$this->parser->parse_string($template, $data);

Результат:

<ul>
        <li><a href="/first">First Link</a></li>
        <li><a href="/second">Second Link</a></li>
</ul>

Справочник по классу

class CI_Parser
parse($template, $data[, $return = FALSE])
Параметры:
  • $template (строка) – Путь к файлу представления
  • $data (массив) – Данные переменных
  • $return (логический) – Нужно ли только вернуть обработанный шаблон
Возвращает:

Обработанная строка шаблона

Тип возвращаемого значения:

строка

Обрабатывает шаблон из указанного пути и переменных.

parse_string($template, $data[, $return = FALSE])
Параметры:
  • $template (строка) – Путь к файлу представления
  • $data (массив) – Данные переменных
  • $return (логический) – Нужно ли только вернуть обработанный шаблон
Возвращает:

Обработанная строка шаблона

Тип возвращаемого значения:

строка

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

set_delimiters([$l = '{'[, $r = '}']])
Параметры:
  • $l (строка) – Левый разделитель
  • $r (строка) – Правый разделитель
Тип возвращаемого значения:

void

Устанавливает разделители (открывающий и закрывающий) для псевдопеременной «тега» в шаблоне.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/parser.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API