<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>View. PHP-шаблонизатор.</title>
		<link>https://lily-software.com</link>
		<description>Лента комментариев страницы</description>
		<generator>Cotonti</generator>
		<language>ru</language>
		<pubDate>Thu, 16 Apr 2026 06:54:16 +0300</pubDate>

		<item>
			<title>Комментируемая страница</title>
			<description><![CDATA[<p style="text-align:justify;">Исторически сложилось так, что Cotonti использует шаблонизатор CoTemplate, что накладывает значительные ограничения на возможности самих шаблонов, даже несмотря на то, что за последние годы он стал намного удобнее.</p>

<p style="text-align:justify;">Но мы знаем, что PHP сконструирован специально<strong> для ведения Web-разработок</strong> и его код <strong>может внедряться непосредственно в HTML</strong>.<br />
PHP — сам по себе является не только очень мощьным языком программирования, но и самодостаточным шаблонизатором, позволяющим делать качественные шаблоны без ущерба для логики приложения.</p>

<p style="text-align:justify;">Такой стиль шаблонизации на PHP называют «pure-шаблонизация», т.е. чистая шаблонизация, основанная на возможностях самого PHP.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">Класс <strong>View</strong> позволяет использовать шаблоны на чистом PHP.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>Преимущества:</strong></p>

<p style="text-align:justify;">- Чистый PHP будет работать быстрее шаблонизаторов (интрепретаторов), написанных на PHP, т.к. нет программной "прослойки" между PHP и шаблоном, выполнение которой, как ни крути, а требует рессурсов. Хотя, многие современные шаблонизаторы компилируют шаблоны в PHP код.</p>

<p style="text-align:justify;">- PHP и есть шаблонизатор и в шаблоне доступны все его возможности.</p>

<p style="text-align:justify;">- Не нужно изучать дополнительный синтаксис. Знания HTML и шести - десяти конструкций на PHP вполне достаточно для верстки шаблона почти любой сложности.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;"><strong>Недостатки:</strong></p>

<p style="text-align:justify;">- Кто то считает, что «ужасный синтаксис». По-моему - это весьма субъективно и зависит от личных предпочтений. В моделях и контроллерах он уже не выглядит настолько ужасным )</p>

<p style="text-align:justify;">- Слишком много лишнего текста в шаблонах. Тоже зависит от личных предпочтений и субъективно.</p>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">Итак к делу.</p>

<p style="text-align:justify;">По существу применение <strong><span class="classname">View</span></strong> состоит из двух шагов:</p>

<p style="text-align:justify;">1. Ваш скрипт контроллера создает экземпляр <span class="classname">View</span> и объявляет переменные этого экземпляра.</p>

<p style="text-align:justify;">2. Контроллер приказывает <span class="classname">View</span> воспроизвести данный вид используя шаблон.</p>

<p style="text-align:justify;"> </p>

<p><strong>Скрипт контроллера</strong></p>

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

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

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

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

<p> </p>

<p><strong>Скрипт шаблона:</strong></p>

<p style="text-align:justify;">Теперь нам нужен сопутствующий скрипт шаблона "library.booklist.php". Это такой же скрипт PHP, как и остальные, за одним исключением: он выполняется в области видимости экземпляра View, это означает, что $this ссылается на экземпляр View. Переменные, присваиваемые в контроллере для скрипта вида, являются открытыми свойствами экземпляра View. Таким образом, базовый скрипт вида может выглядеть следующим образом:</p>

<pre class="brush:xml;">
&lt;p&gt;Список книг&lt;/p&gt;
&lt;?php if ($this-&gt;books): ?&gt;

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

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

&lt;/table&gt;

&lt;?php else: ?&gt;

&lt;p&gt;Нет книг для отображения.&lt;/p&gt;

&lt;?php endif; ?&gt;</pre>

<p style="text-align:justify;"> </p>

<p style="text-align:justify;">Класс View также подерживает присваивание переменных в стиле CoTemplate:</p>

<pre class="brush:php;">
$view-&gt;assign(array(
    'PAGE_TITLE'  =&gt;  $title,
    'BREADCRUMBS' =&gt;  cot_breadcrumbs($crumbs, cot::$cfg['homebreadcrumb']),
));</pre>

<p style="text-align:justify;">что аналогично:</p>

<pre class="brush:php;">
$view-&gt;PAGE_TITLE = $title;
$view-&gt;BREADCRUMBS = cot_breadcrumbs($crumbs, cot::$cfg['homebreadcrumb']);</pre>

<p style="text-align:justify;"> </p>

<h4>Основные методы класса <strong>View</strong>:</h4>

<p> </p>

<p><strong>render($viewFile, $type = 'module', $admin = null, $return = true)</strong></p>

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

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

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

<p> </p>

<p> </p>

<p><strong>addScriptPath($path, $prepend = true)</strong></p>

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

<p><strong>$path</strong> - Путь к папке с шаблонами. <br /><strong>$prepend </strong>- Поместить путь в начало стека.</p>

<p> </p>

<p> </p>

<p><strong>scriptFile($base, $type = 'module', $admin = null)</strong></p>

<p>Ищет и возвращает полый путь к файлу шаблона или <strong>false</strong>, если шаблон не найден. Параметры аналогичны методу <strong>render();</strong></p>
]]></description>
			<pubDate>сб, 13 сен 2014 23:21:00 +0300</pubDate>
			<link><![CDATA[https://lily-software.com/free-scripts/cotonti-lib/view]]></link>
		</item>
	</channel>
</rss>