View. PHP-шаблонизатор.

Исторически сложилось так, что Cotonti использует шаблонизатор CoTemplate, что накладывает значительные ограничения на возможности самих шаблонов, даже несмотря на то, что за последние годы он стал намного удобнее.

Но мы знаем, что PHP сконструирован специально для ведения Web-разработок и его код может внедряться непосредственно в HTML.
PHP — сам по себе является не только очень мощьным языком программирования, но и самодостаточным шаблонизатором, позволяющим делать качественные шаблоны без ущерба для логики приложения.

Такой стиль шаблонизации на PHP называют «pure-шаблонизация», т.е. чистая шаблонизация, основанная на возможностях самого PHP.

 

Класс View позволяет использовать шаблоны на чистом PHP.

 

Преимущества:

- Чистый PHP будет работать быстрее шаблонизаторов (интрепретаторов), написанных на PHP, т.к. нет программной "прослойки" между PHP и шаблоном, выполнение которой, как ни крути, а требует рессурсов. Хотя, многие современные шаблонизаторы компилируют шаблоны в PHP код.

- PHP и есть шаблонизатор и в шаблоне доступны все его возможности.

- Не нужно изучать дополнительный синтаксис. Знания HTML и шести - десяти конструкций на PHP вполне достаточно для верстки шаблона почти любой сложности.

 

Недостатки:

- Кто то считает, что «ужасный синтаксис». По-моему - это весьма субъективно и зависит от личных предпочтений. В моделях и контроллерах он уже не выглядит настолько ужасным )

- Слишком много лишнего текста в шаблонах. Тоже зависит от личных предпочтений и субъективно.

 

Итак к делу.

По существу применение View состоит из двух шагов:

1. Ваш скрипт контроллера создает экземпляр View и объявляет переменные этого экземпляра.

2. Контроллер приказывает View воспроизвести данный вид используя шаблон.

 

Скрипт контроллера

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

// Для наглядности, у нас есть массив с данными о книгах
$data = array(
	array(
	    'author' => 'Hernando de Soto',
	    'title' => 'The Mystery of Capitalism'
	),
	array(
	    'author' => 'Henry Hazlitt',
	    'title' => 'Economics in One Lesson'
	),
	array(
	    'author' => 'Milton Friedman',
	    'title' => 'Free to Choose'
	)
);

// теперь присваиваем данные по книгам экземпляру View
$view = new View();
$view->books = $data;

// и выполняем скрипт вида "booklist.php"
echo $view->render('library.booklist.php');

 

Скрипт шаблона:

Теперь нам нужен сопутствующий скрипт шаблона "library.booklist.php". Это такой же скрипт PHP, как и остальные, за одним исключением: он выполняется в области видимости экземпляра View, это означает, что $this ссылается на экземпляр View. Переменные, присваиваемые в контроллере для скрипта вида, являются открытыми свойствами экземпляра View. Таким образом, базовый скрипт вида может выглядеть следующим образом:

<p>Список книг</p>
<?php if ($this->books): ?>

<!-- Таблица из нескольких книг. -->
<table>
    <tr>
        <th>Author</th>
        <th>Title</th>
    </tr>

    <?php foreach ($this->books as $key => $val): ?>
    <tr>
        <td><?=htmlspecialchars($val['author']) ?></td>
        <td><?=htmlspecialchars($val['title']) ?></td>
    </tr>
    <?php endforeach; ?>

</table>

<?php else: ?>

<p>Нет книг для отображения.</p>

<?php endif; ?>

 

Класс View также подерживает присваивание переменных в стиле CoTemplate:

$view->assign(array(
    'PAGE_TITLE'  =>  $title,
    'BREADCRUMBS' =>  cot_breadcrumbs($crumbs, cot::$cfg['homebreadcrumb']),
));

что аналогично:

$view->PAGE_TITLE = $title;
$view->BREADCRUMBS = cot_breadcrumbs($crumbs, cot::$cfg['homebreadcrumb']);

 

Основные методы класса View:

 

render($viewFile, $type = 'module', $admin = null, $return = true)

Рендерит  HTML код из шаблона и полученных данных.Принимает следующие параметры:

$viewFile - имя файла шаблона. Если не указано расширение или оно не входит в свойство класса $_extensions, будет использовано ".php".
$type
- тип расширения. Может быть 'plug', 'module' or 'core'
$admin - использовать файл admin-темы, если возможно. По умолчанию эту опцию метод пытается определить исходя из параметра $viewFile
$return - Вернуть готовый HTML-код в виде строки (если TRUE) или выполнить require($viewFile)

Файл шаблона ищется по тем же правилам, что и при использовании функции cot_tplfile() для CoTemplate.

 

 

addScriptPath($path, $prepend = true)

Добавить дополнительный путь для поиска шаблонов.

$path - Путь к папке с шаблонами. 
$prepend - Поместить путь в начало стека.

 

 

scriptFile($base, $type = 'module', $admin = null)

Ищет и возвращает полый путь к файлу шаблона или false, если шаблон не найден. Параметры аналогичны методу render();

 
Автор: Alex
Опубликовано: Alex
Комментарии: (0)
Рейтинги:  
0

Теги:

Нет тегов

Комментарии:


Комментарии отсутствуют

Оставить комментарий:

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

* Для редактирования комментария осталось 15 минут