<?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>Pais porrada de Bethrezen &#187; yii</title> <atom:link href="http://blog.bethrezen.ru/tag/yii/feed" rel="self" type="application/rss+xml" /><link>http://blog.bethrezen.ru</link> <description>Блог веб-программиста</description> <lastBuildDate>Sat, 27 Aug 2011 08:51:33 +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>Создаём расширяемую структуру на Yii Framework</title><link>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html</link> <comments>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html#comments</comments> <pubDate>Wed, 16 Sep 2009 15:36:38 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[caction]]></category> <category><![CDATA[dotplant]]></category> <category><![CDATA[yii]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=222</guid> <description><![CDATA[Хочу предложить Вашему вниманию концепт расширяемой структуры приложения на Yii Framework. Я уже писал как сделать свои Actions на Yii. Сегодня же речь пойдёт о написании стандартных экшенов для контроллеров и их расширения. Предположим, в приложении у нас все контроллеры наследуются от класса dotPlantFrontMainController. Нам необходимо, чтобы у всех контроллеров было действие Breadcrumb. Для этого, [...]]]></description> <content:encoded><![CDATA[<p>Хочу предложить Вашему вниманию концепт расширяемой структуры приложения на <strong>Yii Framework</strong>. Я уже писал как сделать <a
href="http://blog.bethrezen.ru/2009/05/yii-action.html">свои Actions на Yii</a>.</p><p>Сегодня же речь пойдёт о написании стандартных экшенов для контроллеров и их расширения.</p><p>Предположим, в приложении у нас все контроллеры наследуются от класса dotPlantFrontMainController.</p><p>Нам необходимо, чтобы у всех контроллеров было действие Breadcrumb.</p><p>Для этого, в базовом контроллере dotPlantFrontMainController переопределяем функцию <strong>actions</strong>() следующим образом:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> actions<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #b1b100;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #990000;color: #8FB394;">array</span><span style="color: #009900;color: #CCC;">&#40;</span>
 <span style="color: #0000ff;">'breadcrumb'</span> <span style="color: #339933;color: #CCC;">=&gt;</span> <span style="color: #0000ff;">'application.extensions.actionBreadcrumb'</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Если в унаследованном контроллере(скажем News) мы используем экшены из других файлов, то нам необходимо также переопределить функцию примерно вот так:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> actions<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #666666; font-style: italic;color: #CDC;">// return external action classes, e.g.:</span>
 <span style="color: #b1b100;color:#DD2A24;font-weight:bold;">return</span> <span style="color: #990000;color: #8FB394;">array_merge</span><span style="color: #009900;color: #CCC;">&#40;</span>
 parent<span style="color: #339933;color: #CCC;">::</span><span style="color: #004000;">actions</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #990000;color: #8FB394;">array</span><span style="color: #009900;color: #CCC;">&#40;</span>
 <span style="color: #0000ff;">'admin'</span><span style="color: #339933;color: #CCC;">=&gt;</span><span style="color: #0000ff;">'application.controllers.News.ActionAdmin'</span><span style="color: #339933;color: #CCC;">,</span>
 <span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Таким образом, в News будут экшены определенные в базовом классе <strong>dotPlantFrontMainController</strong> плюс ActionAdmin.</p><p>Переписать же actionBreadcrumb можно уже в теле самого News.</p><p>В итоге имеем легко расширяемую структуру. В самом же базовом классе массив actions можно автоматически генерировать в соответствии с установленными расширениями. Всё легко и просто <img
src='http://blog.bethrezen.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Создаём расширяемую структуру на Yii Framework" class='wp-smiley' title="Создаём расширяемую структуру на Yii Framework" /></p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/09/yii-framework-addons-structure.html/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Yii &#8211; создание своих типов Action-ов</title><link>http://blog.bethrezen.ru/2009/05/yii-action.html</link> <comments>http://blog.bethrezen.ru/2009/05/yii-action.html#comments</comments> <pubDate>Fri, 29 May 2009 12:49:00 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[php]]></category> <category><![CDATA[yii]]></category><guid
isPermaLink="false"></guid> <description><![CDATA[Пишу одно прлиожение на Yii Framework. Структура приложения такова, что необходимо разграничить экшены контроллеров(CController) по папкам и сделать их типовыми. Экшены разграничиваются легко. Предположим, что у нас есть ряд экшенов для администрирования. Всем им надо установить какие-либо свойства или же сделать при их вызове какие-то типовые действия. Рассмотрим на примере изменения титла страницы. Вот код [...]]]></description> <content:encoded><![CDATA[<p>Пишу одно прлиожение на <strong>Yii Framework</strong>. Структура приложения такова, что необходимо разграничить экшены контроллеров(<strong>CController</strong>) по папкам и сделать их типовыми.<br
/> Экшены разграничиваются легко.<br
/> Предположим, что у нас есть ряд экшенов для администрирования. Всем им надо установить какие-либо свойства или же сделать при их вызове какие-то типовые действия.<br
/> Рассмотрим на примере изменения титла страницы.<br
/> Вот код моего базового экшена:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">class</span> dotPlantAdminAction <span style="color: #000000; font-weight: bold;color: #577A61;">extends</span> CAction
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #009933; font-style: italic;">/**
 * Constructor.
 * Runs CAction constructor and makes some changes for Admin action type
 */</span>
 <span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span>  __construct<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$controller</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$id</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 parent<span style="color: #339933;color: #CCC;">::</span>__construct<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$controller</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$id</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000088;">$this</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">controller</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">pageTitle</span>       <span style="color: #339933;color: #CCC;">=</span> dotPlant<span style="color: #339933;color: #CCC;">::</span><span style="color: #004000;">getName</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span> <span style="color: #339933;color: #CCC;">.</span> <span style="color: #0000ff;color: #111;">&quot; - Admin &quot;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
<span style="color: #009900;color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> run<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
&nbsp;
 <span style="color: #009900;color: #CCC;">&#125;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>В конструкторе мы сначала вызываем <span
style="font-family: courier new,courier;">parent::__construct</span> с необходимыми параметрами. Это грубо-говоря идёт инициализация базового <strong>CAction</strong>.</p><p>Допустим у нас есть контроллер SettingsController. И нам нужно сделать его на основе нашего экшена. Создаем папку  <strong>protected/controllers/Settings/</strong>. В ней создаем файл <strong>ActionAdmin.php</strong> с таким вот кодом:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000000; font-weight: bold;color: #577A61;">class</span> ActionAdmin <span style="color: #000000; font-weight: bold;color: #577A61;">extends</span> dotPlantAdminAction
<span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000000; font-weight: bold;color: #577A61;">public</span> <span style="color: #000000; font-weight: bold;color: #577A61;">function</span> run<span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">controller</span><span style="color: #339933;color: #CCC;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>    
 <span style="color: #009900;color: #CCC;">&#125;</span>
<span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Видите? Нам достаточно только объявить run() и уже всё готово. При загрузке запустится необходимый нам конструктор базового контроллера с нашими действиями.</p><p>Вот по такому принципу я разграничиваю например админку в своей CMS <a
title="dotPlant CMS based on Yii Framework" href="http://code.google.com/p/dotplant/">dotPlant</a> на Yii Framework. Слава PHP пятому!</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/05/yii-action.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching 28/49 queries in 0.026 seconds using apc

Served from: blog.bethrezen.ru @ 2012-02-06 13:50:30 -->
