<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Статьи про web-разработку, PHP, CakePHP.</title>
	<atom:link href="http://blog.michas.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.michas.ru</link>
	<description>php, mysql, javascript, cakephp, jquery</description>
	<lastBuildDate>Wed, 24 Aug 2011 15:04:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CakePHP. Перенос на хостинг</title>
		<link>http://blog.michas.ru/2011/08/24/cakephp-move-to-hosting/</link>
		<comments>http://blog.michas.ru/2011/08/24/cakephp-move-to-hosting/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:04:54 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cakephp для начинающих]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=161</guid>
		<description><![CDATA[На различных форумах часто вижу что люди спрашивают как перенести проект на CakePHP с одного хостинга на другой, или с локальной машины на хостинг. Чтобы без проблем перенести сайт достаточно всего нескольких простых действий: Задаем права 777 для каталога /app/tmp и всех его подкаталогов Удаляем все файлы(только файлы, каталоги оставляем) из каталога /app/tmp/cache В файле [...]]]></description>
			<content:encoded><![CDATA[<p>На различных форумах часто вижу что люди спрашивают как перенести проект на CakePHP с одного хостинга на другой, или с локальной машины на хостинг.<br />
Чтобы без проблем перенести сайт достаточно всего нескольких простых действий:</p>
<ol>
<li>Задаем права 777 для каталога /app/tmp и всех его подкаталогов</li>
<li>Удаляем все файлы(только файлы, каталоги оставляем) из каталога /app/tmp/cache</li>
<li>В файле /app/config/core.php находим строчку &laquo;Configure::write(&#8216;debug&#8217;, 2)&raquo; и проверяем чтобы на месте цифры 2 был ноль</li>
<li>В файле /app/config/database.php меняем имя базы данных и информацию для доступа к ней.(если на новом хостинге эта информация отличается от старой)</li>
</ol>
<p>В большинстве случаев этих простых шагов будет достаточно и ваш сайт заработает.<br />
Если этого не произошло то можно попробовать сделать следующее:</p>
<ol>
<li>В файле /app/config/core.php находим строчку &laquo;Configure::write(&#8216;debug&#8217;, 0)&raquo; и вставляем вместо 0 число 2. Это включит вывод ошибок на сайте</li>
<li>Смотрим логи которые пишет фреймворк в каталоге /app/tmp/logs/</li>
<li>Смотрим лог ошибок вебсервера. Его расположение зависит от используемого вебсервера и его настроек</li>
</ol>
<p>Эти действия позволят вам найти и исправить возможные ошибки.</p>
<p>Так же следует обратить внимание на используемую версию php. В некоторых случаях(к примеру при использовании сторонних классов и библиотек) ваш проект может содержать код который не может быть выполнен установленной версией php.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2011/08/24/cakephp-move-to-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP и относительные пути url в JavaScript</title>
		<link>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/</link>
		<comments>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 09:07:48 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[решения проблем]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[relative]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=150</guid>
		<description><![CDATA[Способность web-приложения работать не только в корневом каталоге сайта, но и в любом подкаталоге делает его более привлекательным для использования. Если при использовании CakePHP соблюдать стандарты и для формирования url использовать $html->link() и Router::url() то ссылки в приложении всегда будут с учетом того из какого каталога оно запущенно. Но, как всегда есть &#171;но&#187;. JavaScript ничего [...]]]></description>
			<content:encoded><![CDATA[<p>Способность web-приложения работать не только в корневом каталоге сайта, но и в любом подкаталоге делает его более привлекательным для использования. </p>
<p>Если при использовании CakePHP соблюдать стандарты и для формирования url использовать $html->link() и Router::url() то ссылки в приложении всегда будут с учетом того из какого каталога оно запущенно.</p>
<p>Но, как всегда есть &laquo;но&raquo;. JavaScript ничего не подозревает о том из какого каталога запущено приложение. Из-за этого возникает проблема с url для AJAX запросов. Ниже я приведу один из способов решения этой проблемы.</p>
<p>Первым делом добавим во все layout&#8217;ы строчку в секцию head:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;base href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> Router<span style="color: #339933;">::</span><span style="color: #004000;">url</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; /&gt;</pre></div></div>

<p><span id="more-150"></span></p>
<p>Теперь добавим JavaScript функцию в js файл который доступен для всего приложения:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">url</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">return</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'base'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>url.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Все. Теперь осталось только использовать решение.<br />
Пример получения данных:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#foo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>$.<span style="color: #660066;">url</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/posts/index));</span></pre></div></div>

<p>*В статье приведены примеры с использованием jQuery.<br />
**Были использованы материалы с сайта <a href="http://debuggable.com">http://debuggable.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Защищенное соединение (SSL/HTTPS) для сайта на CakePHP</title>
		<link>http://blog.michas.ru/2011/03/17/force-ssl-https-in-cakephp/</link>
		<comments>http://blog.michas.ru/2011/03/17/force-ssl-https-in-cakephp/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 20:25:23 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=130</guid>
		<description><![CDATA[Недавно в одном проекте над которым я работаю возникла необходимость для всего сайта принудительно использовать защищенный протокол Https. Как всегда фреймворк CakePHP позволил сделать это с минимальными затратами. Для начало необходимо подключить Security компонент. Для тех кто забыл или не помнит как это делается напомню: &#60;?php class AppController extends Controller &#123; var $components = array&#40;'Security'&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.michas.ru/wp-content/uploads/2011/03/force-ssl-250.jpg"><img class="alignleft size-full wp-image-131" title="force-ssl-250" src="http://blog.michas.ru/wp-content/uploads/2011/03/force-ssl-250.jpg" alt="" width="250" height="175" /></a> Недавно в одном проекте над которым я работаю возникла необходимость для всего сайта <strong>принудительно</strong> использовать защищенный протокол <a href="http://ru.wikipedia.org/wiki/Https">Https</a>. Как всегда фреймворк CakePHP позволил сделать это с минимальными затратами.</p>
<p><span id="more-130"></span><br />
Для начало необходимо подключить <a href="http://book.cakephp.org/view/1296/Security-Component">Security</a> компонент. Для тех кто забыл или не помнит как это делается напомню:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$components</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Security'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span>;</pre></div></div>

<p>Теперь создадим метод &laquo;forceSSL&raquo; который будет перенаправлять пользователей которые набрали адрес сайта в браузере без https://</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$components</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Security'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> forceSSL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'https://'</span> <span style="color: #339933;">.</span> env<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">here</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span>;</pre></div></div>

<p>И последним шагом будет задать условие при котором будет использоваться наш новый метод.<br />
Для этого зададим в beforeFilter контроллера <a href="http://ru.wikipedia.org/wiki/Callback_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)">функцию обратного вызова</a> в Seciruty компоненте:<br />
$this->Security->blackHoleCallback = &#8216;forceSSL&#8217;;</p>
<p>и вызовем метод который проверяет используется ли защищенное соединение:<br />
$this->Security->requireSecure();</p>
<p>Весь код целиком:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span> 
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$components</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Security'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> beforeFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Security</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">blackHoleCallback</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'forceSSL'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Security</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">requireSecure</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> forceSSL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'https://'</span> <span style="color: #339933;">.</span> env<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">here</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span>;</pre></div></div>

<p>В приведенном примере условие срабатывает для любого контроллера и любого экшена. Этого можно избежать если вызывать метод requireSecure() не в AppController, а только в необходимом. Если передать этому методу аргументы в виде имен экшенов, то условие будет срабатывать только для этих экшенов. К примеру: requireSecure(&#8216;login&#8217;, &#8216;register&#8217;).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2011/03/17/force-ssl-https-in-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обновление CakePHP. Версия 1.3.5</title>
		<link>http://blog.michas.ru/2010/10/26/cakephp-1-3-5-released/</link>
		<comments>http://blog.michas.ru/2010/10/26/cakephp-1-3-5-released/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 09:20:40 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=125</guid>
		<description><![CDATA[С прошлого обновления прошло полтора месяца. За это время разработчики успели сделать больше 50-ти комитов в репозиторий и закрыть 40 тикетов. Список самых значительных изменений: На главную (по умолчанию) страницу добавлено уведомление о возможно неправильно работающих библиотеках PCRE; RequestHandlerComponent теперь автоматически отправляет загаловки content-type и encoding; Названия таблиц содержащие пробелы теперь работают корректно; Улучшена совестимость с Postgres 9.0; MemcacheEngine [...]]]></description>
			<content:encoded><![CDATA[<p>С <a href="http://blog.michas.ru/2010/09/12/cakephp-1-3-4-released/">прошлого</a> обновления прошло полтора месяца. За это время разработчики успели сделать больше 50-ти комитов в репозиторий и закрыть 40 тикетов.</p>
<p>Список самых значительных изменений:</p>
<ul>
<li>На главную (по умолчанию) страницу добавлено уведомление о возможно неправильно работающих библиотеках PCRE;</li>
<li>RequestHandlerComponent теперь автоматически отправляет загаловки content-type и encoding;</li>
<li>Названия таблиц содержащие пробелы теперь работают корректно;</li>
<li>Улучшена совестимость с Postgres 9.0;</li>
<li>MemcacheEngine теперь корректно работает с IPv6 адресами;</li>
<li>Тэг &lt;cake:nocache&gt; теперь удаляется даже если CacheHelper не загружен;</li>
<li>SecurityComponent теперь корректно работает с иенами пользователей которые состоят из e-mail адресов;</li>
<li>Роутер теперь правильно обрабатывает выражения для параметра :action.</li>
</ul>
<p>Скачать новую версию можно <a href="http://github.com/cakephp/cakephp/downloads">здесь</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/10/26/cakephp-1-3-5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Использование UUID в качестве первичного ключа</title>
		<link>http://blog.michas.ru/2010/10/15/using-uuid-as-primary-key/</link>
		<comments>http://blog.michas.ru/2010/10/15/using-uuid-as-primary-key/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 14:09:56 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp для начинающих]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[primary key]]></category>
		<category><![CDATA[uuid]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=120</guid>
		<description><![CDATA[Первичные ключи в таблицах обычно имеют целочисленный тип и обычно автоинкрементные. При добавлении новой записи СУБД автоматически подставляет значение этого поля которое на единицу больше чем предыдущее. В CakePHP существует возможность вместо числа использовать UUID. Для этого всего лишь необходимо для вашего первичного ключа указать тип CHAR(36) или  BINARY(36), все остальное CakePHP сделает сам.]]></description>
			<content:encoded><![CDATA[<p>Первичные ключи в таблицах обычно имеют целочисленный тип и обычно автоинкрементные. При добавлении новой записи СУБД автоматически подставляет значение этого поля которое на единицу больше чем предыдущее.</p>
<p>В CakePHP существует возможность вместо числа использовать <a href="http://ru.wikipedia.org/wiki/UUID">UUID</a>. Для этого всего лишь необходимо для вашего первичного ключа указать тип CHAR(36) или  BINARY(36), все остальное CakePHP сделает сам.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/10/15/using-uuid-as-primary-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Используем шаблонизатор Twig в CakePHP</title>
		<link>http://blog.michas.ru/2010/10/11/using-twig-in-cakephp/</link>
		<comments>http://blog.michas.ru/2010/10/11/using-twig-in-cakephp/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 13:27:42 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cakephp-plugins]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[twig]]></category>
		<category><![CDATA[шаблонизатор]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=105</guid>
		<description><![CDATA[Есть такой замечательный php-шаблонизатор Twig которым с недавнего времени занимается автор фреймворка Symfony &#8211; Fabien Potencier. По заверениям авторов этот шаблонизатор один из самых быстрых. Сторонние разработчики тоже подтверждают это. Но речь в посте пойдет не о прелестях Twig, а о том как его можно &#171;прикрутить&#187; к CakePHP. Порядок действий: Скачаем плагин cakephp-twig-view с помощью Git или архивом; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.michas.ru/wp-content/uploads/2010/10/twig_logo.jpg"><img class="alignleft size-full wp-image-106" style="margin: 5px;" title="Логотип Twig" src="http://blog.michas.ru/wp-content/uploads/2010/10/twig_logo.jpg" alt="" width="250" height="100" /></a>Есть такой замечательный php-шаблонизатор <a href="http://www.twig-project.org/">Twig</a> которым с недавнего времени занимается автор фреймворка <a href="http://www.symfony-project.org/">Symfony</a> &#8211; Fabien Potencier.</p>
<p>По заверениям авторов этот шаблонизатор один из самых быстрых. Сторонние разработчики тоже подтверждают это.</p>
<p>Но речь в посте пойдет не о прелестях Twig, а о том как его можно &laquo;прикрутить&raquo; к CakePHP.<br />
<span id="more-105"></span><br />
Порядок действий:</p>
<ol>
<li>Скачаем плагин <a href="http://github.com/m3nt0r/cakephp-twig-view">cakephp-twig-view</a> с помощью Git или <a href="http://github.com/m3nt0r/cakephp-twig-view/zipball/master">архивом</a>;</li>
<li>Скопируем плагин в каталог /app/plugins/twig_view;</li>
<li>Скачаем сам <a href="http://github.com/fabpot/Twig">Twig</a> Git&#8217;ом или <a href="http://github.com/fabpot/Twig/zipball/master">архивом</a>;</li>
<li>Скачанный Twig необходимо разместить в каталоге /app/plugins/twig_view/vendors;</li>
<li>В AppController&#8217;е вашего приложения добавим переменную var $view = &#8216;TwigView.Twig&#8217;;</li>
<li>Установка завершена.</li>
</ol>
<p>По умолчанию скомпилированные шаблоны сохраняются в каталоге APP/plugins/twig_view/tmp/views (не забыть проверить что каталог доступен для записи), но этот путь можно изменить :</p>
<p style="padding-left: 30px;">- в bootstrap.php добавим define(&#8216;TWIG_VIEW_CACHE&#8217;, &#8216;/your/cache/path&#8217;);</p>
<p>Плагин работает с файлами шаблона имеющими расширение &laquo;.tpl&raquo;, таким образом можно совмещать использование стандартного шаблонизатора (файлы с расширением &laquo;.ctp&raquo;) и Twig.</p>
<p>Пример как может выглядеть ваш default.tpl:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;!</span>DOCTYPE HTML <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD HTML 4.01//EN&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
	<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> html<span style="color: #339933;">.</span>charset<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
	<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> <span style="color: #0000ff;">'CakePHP: the rapid development php framework'</span><span style="color: #339933;">|</span>trans <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> title_for_layout <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
	<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> html<span style="color: #339933;">.</span>meta<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'icon'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> html<span style="color: #339933;">.</span>css<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cake.generic'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> scripts_for_layout <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
  <span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;container&quot;</span><span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;header&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span>
				html<span style="color: #339933;">.</span><span style="color: #990000;">link</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CakePHP: the rapid development php framework'</span><span style="color: #339933;">|</span>trans<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://cakephp.org'</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;content&quot;</span><span style="color: #339933;">&gt;</span>
			<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> session<span style="color: #339933;">.</span>flash<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span> content_for_layout <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
		<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;footer&quot;</span><span style="color: #339933;">&gt;</span>
		<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span>
			html<span style="color: #339933;">.</span>image<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cake.power.gif'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span>
				<span style="color: #0000ff;">'alt'</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">'Powered by CakePHP'</span><span style="color: #339933;">|</span>trans<span style="color: #339933;">,</span>
				<span style="color: #0000ff;">'url'</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">'http://cakephp.org'</span>
			<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/10/11/using-twig-in-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новый релиз CakePHP. Версия 1.3.4</title>
		<link>http://blog.michas.ru/2010/09/12/cakephp-1-3-4-released/</link>
		<comments>http://blog.michas.ru/2010/09/12/cakephp-1-3-4-released/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 15:36:11 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=97</guid>
		<description><![CDATA[Новая версия включает 77 коммитов в репозиторий и 54 закрытых тикета. Вот несколько изменений которые могут повлиять на работу вашего приложения: Файл схемы БД для плагинов теперь имеет переменную имени класса $PluginSchema, вместо AppSchema; Параметры роутинга содержащие внутри &#171;-&#187; теперь работают как ожидается; Исправленна ошибка при которой метод SessionComponent::destroy() не всегда удалял данные; Улучшенна работа [...]]]></description>
			<content:encoded><![CDATA[<p>Новая версия включает 77 коммитов в репозиторий и 54 закрытых тикета.</p>
<p>Вот несколько изменений которые могут повлиять на работу вашего приложения:</p>
<ul>
<li>Файл схемы БД для плагинов теперь имеет переменную имени класса $PluginSchema, вместо AppSchema;</li>
<li>Параметры роутинга содержащие внутри &laquo;-&raquo; теперь работают как ожидается;</li>
<li>Исправленна ошибка при которой метод SessionComponent::destroy() не всегда удалял данные;</li>
<li>Улучшенна работа &laquo;<a href="http://book.cakephp.org/view/1103/Scaffolding">Scaffold&#8217;инга</a>&raquo; при работе с темами;</li>
<li>Метод String::insert() теперь работает лучше с ключами в начале которых содержатся другие ключи;</li>
<li>DboMysql теперь корректно работает с получением столбцов и параметров таблицы;</li>
<li>Исправленна ошибка функции setlocale(), связанная с использованием символа &laquo;,&raquo; ;</li>
<li>EmailComponent теперь более корректно обрабатывает адреса электронной почты имеющие алиасы.</li>
</ul>
<p>Скачать новую версию можно из <a href="http://github.com/cakephp/cakephp/downloads">оффициального репозитория</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/09/12/cakephp-1-3-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP Utils Plugin. Новый, мега плагин.</title>
		<link>http://blog.michas.ru/2010/09/08/cakephp-utils-plugin-new-and-awesome/</link>
		<comments>http://blog.michas.ru/2010/09/08/cakephp-utils-plugin-new-and-awesome/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 12:23:28 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cakephp-plugins]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=74</guid>
		<description><![CDATA[Команда разработчиков моего любимого фреймворка CakePHP не перестает радовать каждый день. На днях они выпустили новый плагин, который будет полезен каждому разработчику на CakePHP. Итак, встречайте CakePHP Utils Plugin. Плагин содержит в себе: Behaviors(поведения моделей): Importable &#8211; добавляет возможность импортировать CSV данные; Inheritable &#8211; добавляет возможность модели действовать как подкласс другой модели; Keyvalue &#8211; позволяет [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.michas.ru/wp-content/uploads/2010/09/cake-logo.png"><img class="alignleft size-full wp-image-82" style="margin: 5px;" title="cake-logo" src="http://blog.michas.ru/wp-content/uploads/2010/09/cake-logo.png" alt="" width="125" height="125" /></a><a href="http://cakedc.com/">Команда разработчиков</a> моего любимого фреймворка <a href="http://cakephp.org/">CakePHP</a> не перестает радовать каждый день. На днях они выпустили новый плагин, который будет полезен каждому разработчику на CakePHP.</p>
<p>Итак, встречайте CakePHP Utils Plugin.</p>
<p><span id="more-74"></span></p>
<h2>Плагин содержит в себе:</h2>
<h3>Behaviors(поведения моделей):</h3>
<ul>
<li>Importable &#8211; добавляет возможность импортировать CSV данные;</li>
<li>Inheritable &#8211; добавляет возможность модели действовать как подкласс другой модели;</li>
<li>Keyvalue &#8211; позволяет получать и сохранять группы настроек в виде пары ключ/значение;</li>
<li>List &#8211; предостовляет возможность упорядочивать списки;</li>
<li>Lookupable &#8211; подставляет значения из ассоциированной модели по заданному полю и его значению;</li>
<li>Pingbackable &#8211; позволяет модели отправлять пингбэки и трэкбеки при сохранении данных;</li>
<li>Serializable &#8211; позволяет серелиазовать и десерелиазовать массив данных в строковое представление;</li>
<li>Sluggable &#8211; реализовывает slug поведение;</li>
<li>SoftDelete &#8211; режим &laquo;мягкого&raquo; (с возможностью восстановления) удаления данных;</li>
<li>TinySluggable &#8211; создает короткие slug&#8217;и, как в системах сокращения ссылок;</li>
<li>Toggleable &#8211; возможность &laquo;переключать&raquo; значение поля.</li>
</ul>
<h3>Libraries(библиотеки)</h3>
<ul>
<li>Languages &#8211; список языков которые могут быть использованны в выподающем списке.</li>
</ul>
<h3>Components(расширения контроллеров)</h3>
<ul>
<li>Archive &#8211; Создает данные с диапозоном дат которые могут быть использованны в ссылках типа May 2010, March 2010,&#8230;;</li>
<li>FormPreserver &#8211; позволяет сохранять данные формы в момент редиректа на страницу авторизации и обратно;</li>
<li>Pingbacks &#8211; реализует механизм пингбэков и трэкбеков на сайте;</li>
<li>Referer &#8211; позволяет хранить адрес referer в форма для добавления и редактирования данных для того чтобы произвести редирект после удачного сохранения.</li>
</ul>
<h3>Helpers(помощники в шаблонах)</h3>
<ul>
<li>Cleaner &#8211; позволяет очищять входящие данные от тэгов разметки;</li>
<li>Gravatar &#8211; хэлпер для вывода аватаров с сервиса Gravatar;</li>
<li>Tree &#8211; используется для вывода данных хранимых в древовидной структуре.</li>
</ul>
<p>Скачать все это добро можно с <a href="http://github.com/CakeDC/utils">GitHub&#8217;а</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/09/08/cakephp-utils-plugin-new-and-awesome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Плагин для создания многоязычного сайта</title>
		<link>http://blog.michas.ru/2010/09/07/plugin-for-multilanguage-site/</link>
		<comments>http://blog.michas.ru/2010/09/07/plugin-for-multilanguage-site/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 07:24:32 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cakephp-plugins]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=70</guid>
		<description><![CDATA[Разработчики CakePHP выпустили плагин для упрощения создания многоязычного сайта. Скачать можно на github’е.]]></description>
			<content:encoded><![CDATA[<div><a id="internal-source-marker_0.07636680896393955" href="http://cakedc.com/">Разработчики</a> <a href="http://cakephp.org/">CakePHP</a> выпустили плагин для упрощения создания многоязычного сайта.<br />
Скачать можно на <a href="http://github.com/CakeDC/i18n">github’е</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/09/07/plugin-for-multilanguage-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Серия статей о создании приложения на CakePHP</title>
		<link>http://blog.michas.ru/2010/06/21/acrticle-about-full-cakephp-application/</link>
		<comments>http://blog.michas.ru/2010/06/21/acrticle-about-full-cakephp-application/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 16:07:17 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=67</guid>
		<description><![CDATA[Вот тут первая статья из 12, в которых описывается процесс создания полноценного приложения на CakePHP с нуля. Статьи не очень свежие, но будут очень полезны для новичков. Там же можно найти кучу полезных статей,  которые пригодятся каждый день.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jamesfairhurst.co.uk/posts/view/full_cakephp_application_part_1/">Вот тут</a> первая статья из 12, в которых описывается процесс создания полноценного приложения на CakePHP с нуля. Статьи не очень свежие, но будут очень полезны для новичков.</p>
<p>Там же можно найти кучу полезных статей,  которые пригодятся каждый день.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/06/21/acrticle-about-full-cakephp-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

