<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7091769368651685109</atom:id><lastBuildDate>Sat, 19 Oct 2024 14:58:43 +0000</lastBuildDate><category>CodeIgniter</category><category>DX Auth</category><category>Kohana</category><category>blog</category><category>css</category><category>ubuntu</category><category>opera</category><category>php</category><category>vim</category><category>python</category><category>ruby</category><category>Ion Auth</category><category>Zend Framework</category><category>googleCL</category><category>altlinux</category><category>google chrome</category><category>mysql</category><title>Заметки разработчика</title><description>Заметки об используемых в работе языках программирования, фреймворках, инструментах и технологиях.&lt;br&gt;&#xa;Новая версия сайта находится по адресу &lt;a href=&quot;https://www.dev-notes.ru/&quot;&gt;https://www.dev-notes.ru/&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/</link><managingEditor>noreply@blogger.com (alex)</managingEditor><generator>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-2374865271100331437</guid><pubDate>Thu, 08 Nov 2012 11:49:00 +0000</pubDate><atom:updated>2012-12-16T22:40:21.330+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: транслитерация кириллицы</title><description>&lt;p&gt;Kohana уже доросла до версии 3.3, а проблема с транслитерацией кириллицы тянется уже довольно давно.&lt;/p&gt;
&lt;p&gt;Использую следующие костыли/надстройки для решения этой проблемы.&lt;/p&gt;
&lt;p&gt;В &lt;span class=&#39;monospace&#39;&gt;&#39;APPPATH/classes&#39;&lt;/span&gt; создаём скрипт &lt;span class=&#39;monospace&#39;&gt;&#39;utf8.php&#39;&lt;/span&gt; со следующим содержимым:&lt;/p&gt;
&lt;pre class=&#39;brush: php&#39;&gt;
&amp;lt;?php defined(&#39;SYSPATH&#39;) OR die(&#39;No direct script access.&#39;);
class UTF8 extends Kohana_UTF8 {

 /**
  * @var  boolean  Does the server support UTF-8 natively?
  */
 public static $server_utf8 = NULL;

 /**
  * @var  array  List of called methods that have had their required file included.
  */
 public static $called = array();


 /**
  * Replaces special/accented UTF-8 characters by ASCII-7 &amp;quot;equivalents&amp;quot;.
  *
  *     $ascii = UTF8::transliterate_to_ascii($utf8);
  *
  * @author  Andreas Gohr &amp;lt;andi@splitbrain.org&amp;gt;
  * @param   string   $str
  * @param   integer  $case
  * @return  string
  */
 public static function transliterate_to_ascii($str, $case = 0)
 {
  if ( ! isset(self::$called[__FUNCTION__]))
  {
   require APPPATH.&#39;utf8&#39;.DIRECTORY_SEPARATOR.__FUNCTION__.EXT;

   // Function has been called
   self::$called[__FUNCTION__] = TRUE;
  }

  return _transliterate_to_ascii($str, $case);
 }
}
&lt;/pre&gt;
&lt;p&gt;В каталоге &lt;span class=&#39;monospace&#39;&gt;&#39;APPPATH&#39;&lt;/span&gt; создадим каталог &lt;span class=&#39;monospace&#39;&gt;&#39;utf8&#39;&lt;/span&gt; и поместим в него скрипт &lt;span class=&#39;monospace&#39;&gt;&#39;transliterate_to_ascii.php&#39;&lt;/span&gt; со следующим содержимым:&lt;/p&gt;
&lt;pre class=&#39;brush: php&#39;&gt;
&amp;lt;?php defined(&#39;SYSPATH&#39;) or die(&#39;No direct script access.&#39;);
/**
 * UTF8::transliterate_to_ascii
 *
 * @package    Kohana
 * @author     Kohana Team
 * @copyright  (c) 2007-2011 Kohana Team
 * @copyright  (c) 2005 Harry Fuecks
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
 */
function _transliterate_to_ascii($str, $case = 0)
{
 static $utf8_lower_accents = NULL;
 static $utf8_upper_accents = NULL;

 if ($case &amp;lt;= 0)
 {
  if ($utf8_lower_accents === NULL)
  {
   $utf8_lower_accents = array(
    &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,  &#39;d&#39; =&amp;gt; &#39;d&#39;,  &#39;?&#39; =&amp;gt; &#39;f&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;s&#39; =&amp;gt; &#39;s&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,
    &#39;?&#39; =&amp;gt; &#39;ss&#39;, &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;r&#39; =&amp;gt; &#39;r&#39;,  &#39;?&#39; =&amp;gt; &#39;t&#39;,  &#39;n&#39; =&amp;gt; &#39;n&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;k&#39; =&amp;gt; &#39;k&#39;,
    &#39;s&#39; =&amp;gt; &#39;s&#39;,  &#39;?&#39; =&amp;gt; &#39;y&#39;,  &#39;n&#39; =&amp;gt; &#39;n&#39;,  &#39;l&#39; =&amp;gt; &#39;l&#39;,  &#39;h&#39; =&amp;gt; &#39;h&#39;,  &#39;?&#39; =&amp;gt; &#39;p&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,
    &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;c&#39; =&amp;gt; &#39;c&#39;,  &#39;?&#39; =&amp;gt; &#39;w&#39;,  &#39;c&#39; =&amp;gt; &#39;c&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,
    &#39;?&#39; =&amp;gt; &#39;s&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,  &#39;g&#39; =&amp;gt; &#39;g&#39;,  &#39;t&#39; =&amp;gt; &#39;t&#39;,  &#39;?&#39; =&amp;gt; &#39;s&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;c&#39; =&amp;gt; &#39;c&#39;,
    &#39;s&#39; =&amp;gt; &#39;s&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;c&#39; =&amp;gt; &#39;c&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;w&#39; =&amp;gt; &#39;w&#39;,  &#39;?&#39; =&amp;gt; &#39;t&#39;,
    &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;c&#39; =&amp;gt; &#39;c&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;y&#39; =&amp;gt; &#39;y&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;l&#39; =&amp;gt; &#39;l&#39;,
    &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;s&#39; =&amp;gt; &#39;s&#39;,  &#39;g&#39; =&amp;gt; &#39;g&#39;,  &#39;l&#39; =&amp;gt; &#39;l&#39;,  &#39;?&#39; =&amp;gt; &#39;f&#39;,  &#39;z&#39; =&amp;gt; &#39;z&#39;,
    &#39;?&#39; =&amp;gt; &#39;w&#39;,  &#39;?&#39; =&amp;gt; &#39;b&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;?&#39; =&amp;gt; &#39;d&#39;,  &#39;t&#39; =&amp;gt; &#39;t&#39;,
    &#39;r&#39; =&amp;gt; &#39;r&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;r&#39; =&amp;gt; &#39;r&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,
    &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;n&#39; =&amp;gt; &#39;n&#39;,  &#39;n&#39; =&amp;gt; &#39;n&#39;,  &#39;h&#39; =&amp;gt; &#39;h&#39;,  &#39;g&#39; =&amp;gt; &#39;g&#39;,  &#39;d&#39; =&amp;gt; &#39;d&#39;,  &#39;j&#39; =&amp;gt; &#39;j&#39;,
    &#39;y&#39; =&amp;gt; &#39;y&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;t&#39; =&amp;gt; &#39;t&#39;,  &#39;y&#39; =&amp;gt; &#39;y&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,
    &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;l&#39; =&amp;gt; &#39;l&#39;,  &#39;?&#39; =&amp;gt; &#39;w&#39;,  &#39;z&#39; =&amp;gt; &#39;z&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,  &#39;g&#39; =&amp;gt; &#39;g&#39;,
    &#39;?&#39; =&amp;gt; &#39;m&#39;,  &#39;o&#39; =&amp;gt; &#39;o&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;i&#39; =&amp;gt; &#39;i&#39;,  &#39;z&#39; =&amp;gt; &#39;z&#39;,  &#39;a&#39; =&amp;gt; &#39;a&#39;,
    &#39;u&#39; =&amp;gt; &#39;u&#39;,  &#39;?&#39; =&amp;gt; &#39;th&#39;, &#39;?&#39; =&amp;gt; &#39;dh&#39;, &#39;?&#39; =&amp;gt; &#39;ae&#39;, &#39;µ&#39; =&amp;gt; &#39;u&#39;,  &#39;e&#39; =&amp;gt; &#39;e&#39;,  &#39;?&#39; =&amp;gt; &#39;i&#39;,
    &#39;а&#39; =&amp;gt; &#39;a&#39;, &#39;б&#39; =&amp;gt; &#39;b&#39;, &#39;в&#39; =&amp;gt; &#39;v&#39;, &#39;г&#39; =&amp;gt; &#39;g&#39;, &#39;д&#39; =&amp;gt; &#39;d&#39;, &#39;е&#39; =&amp;gt; &#39;e&#39;, &#39;ё&#39; =&amp;gt; &#39;yo&#39;, &#39;ж&#39; =&amp;gt; &#39;zh&#39;,
    &#39;з&#39; =&amp;gt; &#39;z&#39;, &#39;и&#39; =&amp;gt; &#39;i&#39;, &#39;й&#39; =&amp;gt; &#39;j&#39;, &#39;к&#39; =&amp;gt; &#39;k&#39;, &#39;л&#39; =&amp;gt; &#39;l&#39;, &#39;м&#39; =&amp;gt; &#39;m&#39;, &#39;н&#39; =&amp;gt; &#39;n&#39;, &#39;о&#39; =&amp;gt; &#39;o&#39;,
    &#39;п&#39; =&amp;gt; &#39;p&#39;, &#39;р&#39; =&amp;gt; &#39;r&#39;, &#39;с&#39; =&amp;gt; &#39;s&#39;, &#39;т&#39; =&amp;gt; &#39;t&#39;, &#39;у&#39; =&amp;gt; &#39;u&#39;, &#39;ф&#39; =&amp;gt; &#39;f&#39;, &#39;х&#39; =&amp;gt; &#39;h&#39;, &#39;ц&#39; =&amp;gt; &#39;c&#39;,
    &#39;ч&#39; =&amp;gt; &#39;ch&#39;, &#39;ш&#39; =&amp;gt; &#39;sh&#39;, &#39;щ&#39; =&amp;gt; &#39;shh&#39;, &#39;ъ&#39; =&amp;gt; &#39;?&#39;, &#39;ы&#39; =&amp;gt; &#39;y&#39;, &#39;ь&#39; =&amp;gt; &#39;?&#39;, &#39;э&#39; =&amp;gt; &#39;e&#39;, &#39;ю&#39; =&amp;gt; &#39;ju&#39;,
    &#39;я&#39; =&amp;gt; &#39;ja&#39;,
   );
  }

  $str = str_replace(
   array_keys($utf8_lower_accents),
   array_values($utf8_lower_accents),
   $str
  );
 }

 if ($case &amp;gt;= 0)
 {
  if ($utf8_upper_accents === NULL)
  {
   $utf8_upper_accents = array(
    &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,  &#39;D&#39; =&amp;gt; &#39;D&#39;,  &#39;?&#39; =&amp;gt; &#39;F&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;S&#39; =&amp;gt; &#39;S&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,
    &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;R&#39; =&amp;gt; &#39;R&#39;,  &#39;?&#39; =&amp;gt; &#39;T&#39;,  &#39;N&#39; =&amp;gt; &#39;N&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;K&#39; =&amp;gt; &#39;K&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,
    &#39;S&#39; =&amp;gt; &#39;S&#39;,  &#39;?&#39; =&amp;gt; &#39;Y&#39;,  &#39;N&#39; =&amp;gt; &#39;N&#39;,  &#39;L&#39; =&amp;gt; &#39;L&#39;,  &#39;H&#39; =&amp;gt; &#39;H&#39;,  &#39;?&#39; =&amp;gt; &#39;P&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,
    &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;C&#39; =&amp;gt; &#39;C&#39;,  &#39;?&#39; =&amp;gt; &#39;W&#39;,  &#39;C&#39; =&amp;gt; &#39;C&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,
    &#39;?&#39; =&amp;gt; &#39;S&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,  &#39;G&#39; =&amp;gt; &#39;G&#39;,  &#39;T&#39; =&amp;gt; &#39;T&#39;,  &#39;?&#39; =&amp;gt; &#39;S&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;C&#39; =&amp;gt; &#39;C&#39;,
    &#39;S&#39; =&amp;gt; &#39;S&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;C&#39; =&amp;gt; &#39;C&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;W&#39; =&amp;gt; &#39;W&#39;,  &#39;?&#39; =&amp;gt; &#39;T&#39;,
    &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;C&#39; =&amp;gt; &#39;C&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;Y&#39; =&amp;gt; &#39;Y&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;L&#39; =&amp;gt; &#39;L&#39;,
    &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;S&#39; =&amp;gt; &#39;S&#39;,  &#39;G&#39; =&amp;gt; &#39;G&#39;,  &#39;L&#39; =&amp;gt; &#39;L&#39;,  &#39;?&#39; =&amp;gt; &#39;F&#39;,  &#39;Z&#39; =&amp;gt; &#39;Z&#39;,
    &#39;?&#39; =&amp;gt; &#39;W&#39;,  &#39;?&#39; =&amp;gt; &#39;B&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;?&#39; =&amp;gt; &#39;D&#39;,  &#39;T&#39; =&amp;gt; &#39;T&#39;,
    &#39;R&#39; =&amp;gt; &#39;R&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;R&#39; =&amp;gt; &#39;R&#39;,  &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,
    &#39;E&#39; =&amp;gt; &#39;E&#39;,  &#39;N&#39; =&amp;gt; &#39;N&#39;,  &#39;N&#39; =&amp;gt; &#39;N&#39;,  &#39;H&#39; =&amp;gt; &#39;H&#39;,  &#39;G&#39; =&amp;gt; &#39;G&#39;,  &#39;D&#39; =&amp;gt; &#39;D&#39;,  &#39;J&#39; =&amp;gt; &#39;J&#39;,
    &#39;Y&#39; =&amp;gt; &#39;Y&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;T&#39; =&amp;gt; &#39;T&#39;,  &#39;Y&#39; =&amp;gt; &#39;Y&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,
    &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;L&#39; =&amp;gt; &#39;L&#39;,  &#39;?&#39; =&amp;gt; &#39;W&#39;,  &#39;Z&#39; =&amp;gt; &#39;Z&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,  &#39;G&#39; =&amp;gt; &#39;G&#39;,
    &#39;?&#39; =&amp;gt; &#39;M&#39;,  &#39;O&#39; =&amp;gt; &#39;O&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;I&#39; =&amp;gt; &#39;I&#39;,  &#39;Z&#39; =&amp;gt; &#39;Z&#39;,  &#39;A&#39; =&amp;gt; &#39;A&#39;,
    &#39;U&#39; =&amp;gt; &#39;U&#39;,  &#39;?&#39; =&amp;gt; &#39;Th&#39;, &#39;?&#39; =&amp;gt; &#39;Dh&#39;, &#39;?&#39; =&amp;gt; &#39;Ae&#39;, &#39;I&#39; =&amp;gt; &#39;I&#39;,
    &#39;А&#39; =&amp;gt; &#39;A&#39;, &#39;Б&#39; =&amp;gt; &#39;B&#39;, &#39;В&#39; =&amp;gt; &#39;V&#39;, &#39;Г&#39; =&amp;gt; &#39;G&#39;, &#39;Д&#39; =&amp;gt; &#39;D&#39;, &#39;Е&#39; =&amp;gt; &#39;E&#39;, &#39;Ё&#39; =&amp;gt; &#39;Yo&#39;, &#39;Ж&#39; =&amp;gt; &#39;Zh&#39;,
    &#39;З&#39; =&amp;gt; &#39;Z&#39;, &#39;И&#39; =&amp;gt; &#39;I&#39;, &#39;Й&#39; =&amp;gt; &#39;J&#39;, &#39;К&#39; =&amp;gt; &#39;K&#39;, &#39;Л&#39; =&amp;gt; &#39;L&#39;, &#39;М&#39; =&amp;gt; &#39;M&#39;, &#39;Н&#39; =&amp;gt; &#39;N&#39;, &#39;О&#39; =&amp;gt; &#39;O&#39;,
    &#39;П&#39; =&amp;gt; &#39;P&#39;, &#39;Р&#39; =&amp;gt; &#39;R&#39;, &#39;С&#39; =&amp;gt; &#39;S&#39;, &#39;Т&#39; =&amp;gt; &#39;T&#39;, &#39;У&#39; =&amp;gt; &#39;U&#39;, &#39;Ф&#39; =&amp;gt; &#39;F&#39;, &#39;Х&#39; =&amp;gt; &#39;Kh&#39;, &#39;Ц&#39; =&amp;gt; &#39;Tc&#39;,
    &#39;Ч&#39; =&amp;gt; &#39;Ch&#39;, &#39;Ш&#39; =&amp;gt; &#39;Sh&#39;, &#39;Щ&#39; =&amp;gt; &#39;Sch&#39;, &#39;Ъ&#39; =&amp;gt; &#39;\&#39;&#39;, &#39;Ы&#39; =&amp;gt; &#39;Y&#39;, &#39;Ь&#39; =&amp;gt; &#39;&#39;, &#39;Э&#39; =&amp;gt; &#39;E&#39;, &#39;Ю&#39; =&amp;gt; &#39;Ju&#39;,
    &#39;Я&#39; =&amp;gt; &#39;Ja&#39;
   );
  }

  $str = str_replace(
   array_keys($utf8_upper_accents),
   array_values($utf8_upper_accents),
   $str
  );
 }

 return $str;
}
&lt;/pre&gt;
&lt;p&gt;P.S. Под &lt;em&gt;&#39;APPPATH&#39;&lt;/em&gt; подразумеваю константу &lt;span class=&#39;monospace&#39;&gt;APPPATH&lt;/span&gt; определяемую в &lt;span class=&#39;monospace&#39;&gt;index.php&lt;/span&gt;:&lt;/p&gt;
&lt;pre class=&#39;brush: php&#39;&gt;
define(&#39;APPPATH&#39;, realpath($application).DIRECTORY_SEPARATOR);
&lt;/pre&gt;
</description><link>http://dev-mark.blogspot.com/2012/11/kohana3.html</link><author>noreply@blogger.com (alex)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1770539264752799045</guid><pubDate>Thu, 08 Nov 2012 07:34:00 +0000</pubDate><atom:updated>2012-11-08T14:43:39.023+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">DX Auth</category><title>DX Auth: нашёлся на github&#39;е</title><description>&lt;p&gt;Некоторое время назад остро стояла проблема где скачать DX Auth, на&amp;nbsp;http://dexcell.shinsengumiteam.com/dx_auth библиотека стала не доступна.&lt;/p&gt;
&lt;p&gt;Несколько дней назад обнаружил свежую версию библиотеки на github&#39;е:&amp;nbsp;&lt;a href=&quot;https://github.com/eyoosuf/DX-Auth&quot;&gt;https://github.com/eyoosuf/DX-Auth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Там же но в ветке initial &lt;a href=&quot;https://github.com/eyoosuf/DX-Auth/tree/initial&quot;&gt;https://github.com/eyoosuf/DX-Auth/tree/initial&lt;/a&gt; можно найти версию 1.0.6.&lt;/p&gt;</description><link>http://dev-mark.blogspot.com/2012/11/dx-auth-github.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-6164560603392410717</guid><pubDate>Thu, 08 Nov 2012 04:49:00 +0000</pubDate><atom:updated>2012-12-16T22:39:32.716+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: небольшая оптимизация ORM</title><description>&lt;p&gt;ORM в Kohana очень удобная штука, но она постоянно выполняет запросы типа:&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
SHOW FULL COLUMNS FROM `users`
&lt;/pre&gt;
&lt;p&gt;Запрос выполняется почти на каждое действие связанное с таблицей, в данном случае &lt;em&gt;&#39;users&#39;&lt;/em&gt;. Это происходит из-за того, что для выполнения различных операций с данными ORM необходимо знать структуру таблицы и наименование полей.&lt;/p&gt;
&lt;p&gt;Что бы избавиться от таких запросов необходимо добавить модель описание структуры таблицы - массив &lt;strong&gt;$_table_columns&lt;/strong&gt;. Думаю детально описывать стурктуру массива с данными не имеет смысла, так как в ниже приведённом примере всё хорошо понятно.&lt;/p&gt;

&lt;p&gt;Например для модели &lt;em&gt;User&lt;/em&gt;, расширим стандартную модель &lt;em&gt;Model_Auth_User&lt;/em&gt; добавив описание столбцов таблицы:&lt;/p&gt;
&lt;pre class=&#39;brush: php&#39;&gt;
&amp;lt;?php
defined(&#39;SYSPATH&#39;) OR die(&#39;No direct script access.&#39;);

class Model_User extends Model_Auth_User {

     protected $_table_columns     = array(
          &#39;id&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;int&#39;,
               &#39;is_nullable&#39; =&amp;gt; FALSE
          ),
          &#39;email&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;string&#39;,
               &#39;is_nullable&#39; =&amp;gt; FALSE
          ),
          &#39;username&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;string&#39;,
               &#39;is_nullable&#39; =&amp;gt; FALSE
          ),
          &#39;password&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;string&#39;,
               &#39;is_nullable&#39; =&amp;gt; FALSE
          ),
          &#39;logins&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;int&#39;,
               &#39;is_nullable&#39; =&amp;gt; TRUE
          ),
          &#39;last_login&#39; =&amp;gt; array(
               &#39;data_type&#39;   =&amp;gt; &#39;int&#39;,
               &#39;is_nullable&#39; =&amp;gt; TRUE
          ));
}
&lt;/pre&gt;
&lt;p&gt; Больше запросов SHOW FULL COLUMNS FROM `users` не будет, так как модель &#39;знает&#39; поля таблицы и их свойства.&lt;/p&gt;
</description><link>http://dev-mark.blogspot.com/2012/11/kohana-3-orm.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-2862635150795977788</guid><pubDate>Tue, 06 Nov 2012 18:28:00 +0000</pubDate><atom:updated>2012-12-16T22:37:14.700+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mysql</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu: как добавить/удалить пользователя в MySQL из консоли?</title><description>&lt;p&gt;Бывает, что удалённая/виртуальная машина установлена и необходимо создать пользователей/базы данных и раздать им права, а ставить phpmyadmin не хочется. Или просто блеснуть умением работать с пользователя mysql из консоли перед коллегами ;)&lt;/p&gt;
&lt;p&gt;Для начала необходимо войти под суперпользователем:&lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;
mysql -u root -p
&lt;/pre&gt;
&lt;p&gt;После ввода пароля мы окажемся в консоле mysql.&lt;/p&gt;
&lt;p&gt;Создадим пользователя test с localhost и паролем &#39;password&#39;.&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
create user &#39;test&#39;@&#39;localhost&#39; identified by &#39;password&#39;;
&lt;/pre&gt;
&lt;p&gt;Пользователь создан. Для проверки посмотрим список пользователей:&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
select user,host,password from mysql.user;
&lt;/pre&gt;
&lt;p&gt;Создадим базу данных testdb.&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
create database testdb;
&lt;/pre&gt;
&lt;p&gt;Дадим пользователю test полные права на базу testdb&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
grant all on testdb.* to &#39;test&#39;@&#39;localhost&#39;
&lt;/pre&gt;
&lt;p&gt;Удалим пользователя &#39;test&#39;@&#39;localhost&#39;&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
drop user &#39;test&#39;@&#39;localhost&#39;
&lt;/pre&gt;
&lt;p&gt;Если вы создали пользователей для разных хостов и хотите всех удалить, то необходимо удалить их по одному через команду &#39;drop user&#39; с указанием хоста&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Внимание!&lt;/b&gt; Команда &#39;DROP USER&#39; не закрывает автоматически все сессии открытые удаляемым пользователем. Если пользователь с открытой сессией был удалён, то удаление не будет иметь эффекта до закрытии сессии пользователем. После закрытия сессии следующая попытка входа в систему пользователем которого удалили не удастся.&lt;/p&gt;
&lt;p&gt;Удаляем базу testdb&lt;/p&gt;
&lt;pre class=&#39;brush: sql&#39;&gt;
drop database testdb;
&lt;/pre&gt;
</description><link>http://dev-mark.blogspot.com/2012/11/ubuntu-mysql.html</link><author>noreply@blogger.com (alex)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-4049442209718555896</guid><pubDate>Sun, 04 Nov 2012 12:45:00 +0000</pubDate><atom:updated>2012-12-16T22:27:16.342+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu Server: не реагирует на сигнал &quot;Завершение работы&quot;</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;img align=&quot;left&quot; alt=&quot;Ubuntu Server 8.04.04 under VirtualBox&quot; border=&quot;0&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJcO9dgN3j-qIvm9m8R57ztJHTiMA6TX_X00PF_8JjSNzVrgYwDycvnB83BPtyBH9tkIPFSu74PwgN4ur6rYIAQVedovNTyZ3PPI8ArZIbj6iHaQbQmfllI6exjmJ560dTpaJu6W7ctKg/s320/2012-11-04_192745.png&quot; width=&quot;320&quot; /&gt;
&lt;br /&gt;
&lt;strong&gt;Ubuntu Server&lt;/strong&gt; установленный в виртуальной машине (&lt;em&gt;Oracle VirtualBox&lt;/em&gt;) не срабатывает на команду «Завершение работы», а логинится в каждую машину и шатдаунить в ручную довольно утомительно. Впрочем, это относить и к Ubuntu Server установленному на реальное железо.&lt;br /&gt;
Причина отсутствия реакции на «Завершени работы» или нажитае кнопки «Power» - не установленный демон отслеживающий события &lt;strong&gt;ACPI&lt;/strong&gt;.&lt;br /&gt;
Для решения проблемы устанавливаем демон ACPI:&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;sudo apt-get install acpid
&lt;/pre&gt;
Проблема решена, теперь сервер срабатывает на сигнал &quot;Завершение работы&quot; и корректно работает команда:&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;sudo shutdown -P now
&lt;/pre&gt;
&lt;/div&gt;
</description><link>http://dev-mark.blogspot.com/2012/11/ubuntu-server.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJcO9dgN3j-qIvm9m8R57ztJHTiMA6TX_X00PF_8JjSNzVrgYwDycvnB83BPtyBH9tkIPFSu74PwgN4ur6rYIAQVedovNTyZ3PPI8ArZIbj6iHaQbQmfllI6exjmJ560dTpaJu6W7ctKg/s72-c/2012-11-04_192745.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-2203762920298011629</guid><pubDate>Fri, 02 Nov 2012 06:53:00 +0000</pubDate><atom:updated>2012-12-16T22:45:53.594+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu: vsftpd в не показывает .htaccess и другие dotfiles</title><description>&lt;p&gt;Настраивал сервер в виртуальной машине c Ubuntu 8.04.4 LTE и столкнулся со следующей проблемой: &lt;strong&gt;vsftpd&lt;/strong&gt; не отображает файлы начинающиеся с точки &#39;&lt;em&gt;dotfiles&lt;/em&gt;&#39;.&lt;/p&gt;
&lt;p&gt;Начал искать параметр отвечающий за отображение файлов начинающихся с &#39;.&#39;. Несколько раз бегло пролистал файл конфигурации... Затем прочитал весь файл с комментариями и не нашёл ни одного упоминания &lt;em&gt;dot files&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Тут на помощь приходит &#39;&lt;em&gt;man&lt;/em&gt;&#39;&lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;
man vsftpd.conf
&lt;/pre&gt;
&lt;pre class=&#39;text&#39;&gt;
force_dot_files
    If  activated,  files  and  directories  starting with . will be
    shown in directory listings even if the &quot;a&quot; flag was not used by
    the client. This override excludes the &quot;.&quot; and &quot;..&quot; entries.

    Default: NO
&lt;/pre&gt;
&lt;p&gt;По умолчанию значение параметра &#39;NO&#39;.&lt;/p&gt;
&lt;p&gt;Дальше проще.&lt;/p&gt;

&lt;p&gt;Открываем в текстовом редакторе с правами суперюзера файл конфигурации (&lt;em&gt;/etc/vsftpd.conf&lt;/em&gt;)&lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;
sudo vim /etc/vsftpd.conf
&lt;/pre&gt;
&lt;p&gt;или&lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;
sudo nano /etc/vsftpd.conf
&lt;/pre&gt;
&lt;p&gt;Вставляем в конец файла следующую строку, явно указав значение параметра &lt;em&gt;force_dot_files&lt;/em&gt;:&lt;/p&gt;
&lt;pre class=&#39;text&#39;&gt;
force_dot_files=YES
&lt;/pre&gt;
&lt;p&gt;Сохраняем файл и перезапускаем &lt;em&gt;vsftpd&lt;/em&gt;.&lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;
sudo /etc/init.d/vsftpd restart
&lt;/pre&gt;

</description><link>http://dev-mark.blogspot.com/2012/11/ubuntu-vsftpd-htaccess-dotfiles.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-567888149260526929</guid><pubDate>Sat, 18 Aug 2012 17:36:00 +0000</pubDate><atom:updated>2012-12-16T22:45:37.071+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altlinux</category><title>Восстановление пароля в Alt Linux.</title><description>&lt;p&gt;Попросили помочь решить проблему. Работал человек, а после увольнения забыл пароль от сервера...&lt;/P&gt;
&lt;p&gt;Нашлось решение&lt;/p&gt;
&lt;p&gt;В меню загрузчика пропишите в параметрах init=/bin/sh &lt;/p&gt;
&lt;p&gt;Загрузится консоль. Выполните в ней команды: &lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;mount / -o rw,remount
passwd&lt;/pre&gt;
&lt;p&gt;Указываем новый пароль для рута или другого пользователя passwd user_login&lt;/p&gt;
&lt;p&gt;Далее выполните команды: &lt;/p&gt;
&lt;pre class=&#39;brush: bash&#39;&gt;mount / -o ro,remount
reboot&lt;/pre&gt;
&lt;p&gt;Можно логиниться с новым паролем...&lt;/p&gt;
&lt;a href=&quot;http://www.altlinux.org/Восстановление_пароля_администратора&quot;&gt;Восстановление пароля администратора&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2012/08/alt-linux.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1436399433370046430</guid><pubDate>Tue, 17 Apr 2012 07:51:00 +0000</pubDate><atom:updated>2012-12-16T22:39:54.347+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">blog</category><title>Планы</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;p&gt;В ближайшее время планирую обновить и продолжить статьи по Kohana 3.2 и начинать готовиться к Kohana 3.3 и соответствующими проблемами с совместимостью, ибо опять изменения &lt;/p&gt;
&lt;p&gt;По немного начинаю работать с Zend Framework, в связи с чем появятся статьи по этому фреймворку. Хотя после Kohana работать с Zend&#39;ом тяжеловато... некоторые вещи кажутся избыточными, для некоторых требуются дополнительные телодвижения.&lt;/p&gt;
&lt;p&gt;Плотно подсел на sass. В одном из проектов с макетом у которого не была до конца определена цветовая гамма, решил попробовать... понравилось, теперь вся вёрстка с sass. В ближайшее время хочу поковыряться с less, благо повод есть.&lt;/p&gt;
&lt;p&gt;Решил проблему с мучениями административного интерфейса, перевёл на twitter bootstrap. Быстро прототипизируется, удобно, можно оптимизировать для мобильных устройств. Всё лишнее можно вырезать. CSS собирается из less, собственно повод по ковырять с less. Плагины на js с алертами, модальными окнама, прогресс-барами, выпадающими списками, табами и т.д.&lt;/p&gt;
&lt;p&gt;Перешёл с ant на phing, если потратить несколько часов на написание и отладку build.xml для проекта, то потраченное время окупиться с лихвой. Проект сам бэкапиться, кэш отчищается, sass/scss пересобирается, все js и css файлы минифицируются, создаётся дамп базы, скрипты проверяются на соответствию стандарту кодирования, документация генерируется, файлы для размещения складываются в отдельный каталог для выкладывания на продакшен, девелоперские конфиги меняются на &quot;боевые&quot;. Выкладываю в ручную, хотя и это можно делигировать phing&#39;у.&lt;/p&gt;
&lt;p&gt;Начав изучать Zend Framework наткнулся на несколько внятных статей по юнит-тестированию, в которых описываются не какие-то абстрактные классы или объекты с абстрактными вызовами, а весьма конкретные контроллеры приложения с соответствующими тестами на них и объясняется что такое code coverage... После этого понял, что во всех проектах использовал ручное тестирование. Постараюсь и эту тему раскрыть, ибо полезное, важно и удобное, но в документации чёрт ногу сломит, никто внятно не может объяснить зачем это нужно и как использовать.&lt;/p&gt;
&lt;p&gt;p.s. Что меня бесит в Zend coding standards, это 4 пробела вместо табуляции, я понимаю в python блоки выделяются парными пробелами и замена табуляцией не прокатит на уровне компилятора, но в php может быть табуляция или любое количество пробелов.&lt;/p&gt;
&lt;p&gt;Решение: добавил в начало скриптов // vim:ts=4:sts=4:sw=4:et&lt;/p&gt;
&lt;/div&gt;</description><link>http://dev-mark.blogspot.com/2012/04/blog-post.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-8924943095907535374</guid><pubDate>Sun, 20 Mar 2011 09:24:00 +0000</pubDate><atom:updated>2012-12-16T22:47:08.199+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Ubuntu: Устанавливаем и настраиваем MySQL</title><description>&lt;p&gt;Немного о установке и настройке &lt;strong&gt;MySQL&lt;/strong&gt; сервера на &lt;strong&gt;Ubuntu&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Сам процесс установки не является чем-то сложным (если не рассматривать сборку из исходников связки &lt;strong&gt;Apache&lt;/strong&gt; + &lt;strong&gt;PHP&lt;/strong&gt; + &lt;strong&gt;MySQL&lt;/strong&gt;, хотя и это несложно :) ) устанавливаются пакеты и немного правятся файлы конфигурации.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/03/ubuntu-mysql.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/03/ubuntu-mysql.html</link><author>noreply@blogger.com (alex)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-8753552978512405081</guid><pubDate>Tue, 08 Feb 2011 19:10:00 +0000</pubDate><atom:updated>2012-12-16T22:40:09.966+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3.1: Руководство по обновлению и миграции</title><description>&lt;h3&gt;Изменения в классе Request&lt;/h3&gt;&lt;p&gt;Класс &lt;strong&gt;Request&lt;/strong&gt; был разделён на два класс &lt;strong&gt;Request&lt;/strong&gt; и &lt;strong&gt;Response&lt;/strong&gt;. Для установки ответа вы использовали:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;$this-&amp;gt;request-&amp;gt;response = &#39;foo&#39;;
&lt;/pre&gt;&lt;p&gt;Оно было изменено на:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;$this-&amp;gt;response-&amp;gt;body(&#39;foo&#39;);
&lt;/pre&gt;&lt;p&gt;Некоторые свойста существовавшие в классе &lt;span class=&#39;monospace&#39;&gt;Request&lt;/span&gt; были преобразованы в методы класса:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;Request::$controller -&amp;gt; Request::controller()
&lt;/pre&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;Request::$action -&amp;gt; Request::action()
&lt;/pre&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;Request::$directory -&amp;gt; Request::directory()
&lt;/pre&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;Request::$uri -&amp;gt; Request::uri()
&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Request::instance()&lt;/strong&gt; был заменен на &lt;strong&gt;Request::current()&lt;/strong&gt; и &lt;strong&gt;Request::initial()&lt;/strong&gt;. Обычно вы будете использовать &lt;span class=&#39;monospace&#39;&gt;Request::current()&lt;/span&gt;, но если вы уверены что хотите оригинальный запрос (когда запущен HMVC), используйте &lt;span class=&#39;monospace&#39;&gt;Request::initial()&lt;/span&gt;&lt;/p&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Изменения в классе Validation&lt;/h3&gt;&lt;p&gt;Класс проверки был улучшен для включения поддержки &amp;quot;контекста&amp;quot;, из-за этого изменился &lt;span class=&#39;monospace&#39;&gt;API&lt;/span&gt;. Кроме того класс был разделён: ядро логики проверки теперь отделено от встроенных правил проверки. Новый класс ядра называется &lt;strong&gt;Validation&lt;/strong&gt;, а правила расположены в классе &lt;strong&gt;Valid&lt;/strong&gt;.&lt;/p&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Проверка контекста&lt;/h3&gt;&lt;p&gt;Класс проверки теперь содержит поддержку &amp;quot;контекста&amp;quot;. Это позволило объединить методы &lt;strong&gt;rule()&lt;/strong&gt; и &lt;strong&gt;callback()&lt;/strong&gt;, и в теперь это просто метод &lt;span class=&#39;monospace&#39;&gt;rule()&lt;/span&gt; который может использоваться в обоих случаях.&lt;/p&gt;&lt;p&gt;Старый вариант использования:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;rule(&#39;password&#39;, &#39;matches&#39;, array(&#39;repeat_password&#39;))
&lt;/pre&gt;&lt;p&gt;Новый вариант использования:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;rule(&#39;password&#39;, &#39;matches&#39;, array(&#39;:validation&#39;, &#39;password&#39;, &#39;repeat_password&#39;))
&lt;/pre&gt;&lt;p&gt;Третий параметр содержит все параметры которые должны пройти проверку правилом. Если взглянуть на &lt;strong&gt;Valid::matches()&lt;/strong&gt;, то увидим:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;public static function matches($array, $field, $match)
&lt;/pre&gt;&lt;p&gt;&lt;span class=&#39;monospace&#39;&gt;:validation&lt;/span&gt; первый параметр, &lt;span class=&#39;monospace&#39;&gt;&#39;password&#39;&lt;/span&gt; - второй (поле которое мы хотим проверить) и &lt;span class=&#39;monospace&#39;&gt;&#39;repeat_password&#39;&lt;/span&gt; это третье (которое мы хотим сравнить)&lt;/p&gt;&lt;p&gt;&lt;span class=&#39;monospace&#39;&gt;:validation&lt;/span&gt; это специальная переменная &amp;quot;контекста&amp;quot; которая указывает классу &lt;strong&gt;Validation&lt;/strong&gt; о замене текущего класса проверки. Таким образом правила &lt;strong&gt;matches()&lt;/strong&gt; не отличаются от &lt;strong&gt;callback()&lt;/strong&gt; в работе, но более мощные. Есть и другие контекстные переменные:&lt;/p&gt;&lt;p&gt;&lt;span class=&#39;monospace&#39;&gt;:validation&lt;/span&gt; - Объект проверки&lt;/p&gt;&lt;p&gt;&lt;span class=&#39;monospace&#39;&gt;:field&lt;/span&gt; - Имя поля (rule(&#39;username&#39;, &#39;min_length&#39;, array(&#39;:field&#39;, 4)))&lt;/p&gt;&lt;p&gt;&lt;span class=&#39;monospace&#39;&gt;:value&lt;/span&gt; - Значение поля&lt;/p&gt;&lt;p&gt;Можно использовать любую php функцию, если она возвращает логическое значение.&lt;/p&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Куки salt&lt;/h3&gt;&lt;p&gt;Класс &lt;strong&gt;Cookie&lt;/strong&gt; вызывает исключение, если &lt;strong&gt;salt&lt;/strong&gt; не установлена, по умолчанию &lt;span class=&#39;monospace&#39;&gt;salt&lt;/span&gt; не установлена. Вы должны убедиться, что установили &lt;span class=&#39;monospace&#39;&gt;salt&lt;/span&gt; в файле инициализации (&lt;span class=&#39;monospace&#39;&gt;bootstrap.php&lt;/span&gt;):&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;Cookie::$salt = &#39;foobar&#39;;
&lt;/pre&gt;&lt;p&gt;Или определить расширение класса &lt;strong&gt;Cookie&lt;/strong&gt; в вашем приложении:&lt;/p&gt;&lt;pre class=&#39;brush: php&#39;&gt;class Cookie extends Kohana_Cookie
{
    public static $salt = &#39;foobar&#39;;
}
&lt;/pre&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Изменение конструктора контроллера&lt;/h3&gt;&lt;p&gt;Если по какой-то причине вы хотите изменить свой конструктор контроллера, он изменился на:&lt;/p&gt;&lt;pre class=&#39;brush: php; gutter: false;&#39;&gt;public function __construct(Request $request, Response $response)
&lt;/pre&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Изменения index.php и bootstrap.php&lt;/h3&gt;&lt;p&gt;Основным изменением стало удаление запроса из &lt;strong&gt;bootstrap.php&lt;/strong&gt; и перенос его в &lt;strong&gt;index.php&lt;/strong&gt;. Это позволит использовать один файл инициализации для выполнения тестирования. Причина изменения в том, что инициализации выполняет только установку среды, она не должна запускать её.&lt;/p&gt;&lt;!-- --&gt;&lt;br /&gt;
&lt;h3&gt;Обработка 404&lt;/h3&gt;&lt;p&gt;Теперь &lt;strong&gt;Kohana&lt;/strong&gt; имеет встроенную поддержку исключения для 404 и других кодов статуса HTTP. Если вы использовали &lt;span class=&#39;monospace&#39;&gt;ReflectionException&lt;/span&gt; для обнаружения 404, то сейчас должны использовать &lt;strong&gt;Http_Exception_404&lt;/strong&gt;. Подробности &lt;a href=&#39;http://kohanaframework.org/3.1/guide/kohana/errors&#39;&gt;обработка ошибок&lt;/a&gt;&lt;/p&gt;</description><link>http://dev-mark.blogspot.com/2011/02/kohana-31_09.html</link><author>noreply@blogger.com (alex)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-3057639518012986657</guid><pubDate>Tue, 08 Feb 2011 18:40:00 +0000</pubDate><atom:updated>2012-12-16T22:40:34.379+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3.1</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Вышел новый релиз фреймворка &lt;strong&gt;Kohana 3.1&lt;/strong&gt;. Вместе со сменой версии произошли изменения &lt;span class=&#39;monospace&#39;&gt;API&lt;/span&gt;, поэтому необходимо провести миграцию приложений на новый &lt;span class=&#39;monospace&#39;&gt;API&lt;/span&gt;, если вы хотите использовать его для существующих приложений.&lt;/p&gt;&lt;div style=&#39;clear: both&#39;&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&#39;http://kohanaframework.org/download&#39;&gt;Скачать&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#39;http://dev.kohanaframework.org/projects/kohana3/issues?query_id=36&#39;&gt;Изменения&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#39;http://kohanaframework.org/3.1/guide&#39;&gt;Руководство пользователя&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Также следует отметить, что этот релиз означает начало конца поддержки 3.0.x. В течении 6 месяцев в 3.0.x не будет исправлений ошибок и новых релизов. Когда выйдет 3.2.0 (летом 2011), 3.0.x больше не будет поддерживаться, 3.1.x будет поддерживаться в течении одного года, после этого релиза (выход 3.3.0 будет означать конец поддержки 3.1.x)&lt;/p&gt;&lt;p&gt;Кроме того, есть &lt;a href=&#39;http://dev-mark.blogspot.com/2011/02/kohana-31_09.html&#39;&gt;руководство по обновлению/миграции&lt;/a&gt; включающее в себя большую часть информации, возможно некоторые не существенные детали там отсутствуют.&lt;/p&gt;</description><link>http://dev-mark.blogspot.com/2011/02/kohana-31.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s72-c/kohana_.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-2661331007335743133</guid><pubDate>Sat, 05 Feb 2011 14:05:00 +0000</pubDate><atom:updated>2012-12-16T22:38:59.916+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: Работа с моделью</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Мы уже более-менее разобрались с двумя компонентами архитектуры &lt;strong&gt;MVC&lt;/strong&gt;, остался третий &lt;strong&gt;M&lt;/strong&gt; - &lt;em&gt;Model&lt;/em&gt; (Модель).&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Модель&lt;/strong&gt; - это &lt;span class=&#39;monospace&#39;&gt;PHP класс&lt;/span&gt; предназначенный для работы с информацией предоставленной или запрошенной контроллером. Например у вас есть гостевая книга, контроллер передаёт запрос в модель на получение последних десяти записей, модель возвращает эти записи контроллеру, который может передать эти данные в отображение. Контроллер так же может посылать новые записи в модель, обновлять или удалять существующие.&lt;p&gt;&lt;p&gt;Проще говоря, модель занимается обработкой и управлением данными.&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/02/kohana-3.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/02/kohana-3.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s72-c/kohana_.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-5259313086709233743</guid><pubDate>Sat, 29 Jan 2011 10:17:00 +0000</pubDate><atom:updated>2012-12-16T22:40:51.966+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: Примеры из руководства</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguLcmyZCrlrqDoCYSQPU0FNf2VmQAeBr-mbzmiae_hodOttwg9FnL8m6FCm3ys1XwF2jKLmQ6diN4THoM0IS6fqyNMSJmWpEOmMtcP3Fe2vyfkbOjW0BnqkVMkcE3gOtYdRL-b-dDqUyA/s1600/google_code_logo.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguLcmyZCrlrqDoCYSQPU0FNf2VmQAeBr-mbzmiae_hodOttwg9FnL8m6FCm3ys1XwF2jKLmQ6diN4THoM0IS6fqyNMSJmWpEOmMtcP3Fe2vyfkbOjW0BnqkVMkcE3gOtYdRL-b-dDqUyA/s1600/google_code_logo.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;В связи с тем, что в примерах руководства по &lt;strong&gt;Kohana 3&lt;/strong&gt; становиться всё больше файлов, я начал их выкладывать на &lt;a href=&#39;http://code.google.com/p/dev-mark/&#39;&gt;google code&lt;/a&gt;.&lt;/p&gt;&lt;pre class=&#39;brush: bash&#39;&gt;svn checkout http://dev-mark.googlecode.com/svn/trunk/dev-mark/Kohana3-tutorial Kohana3-tutorial
&lt;/pre&gt;&lt;p&gt;Что бы не захламлять репозитарий выкладываются только те файлы, которые используются в руководстве. То есть, нужно предварительно установить &lt;strong&gt;фреймворк Kohana 3&lt;/strong&gt;, а затем в него скопировать файлы руководства.&lt;/p&gt;&lt;p&gt;Имена каталогов с файлами руководства обозначаются по принципу: &lt;span class=&#39;monospace&#39;&gt;tutorial_XX&lt;/span&gt;, где &lt;span class=&#39;monospace&#39;&gt;XX&lt;/span&gt; - номер руководства.&lt;/p&gt;&lt;p&gt;Каталоги с дополнениями к руководству именуются по такому же принципу, только вместо номера руководства будет название дополения. Например каталог с файлами для &lt;a href=&#39;http://dev-mark.blogspot.com/2011/01/kohana-3-ubuntu.html&#39;&gt;Kohana 3: Установка под Ubuntu&lt;/a&gt; будет называться &lt;span class=&#39;monospace&#39;&gt;&#39;tutorial_ubuntu&#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Структура содержимого папок с файлами руководства:&lt;/p&gt;&lt;p&gt;&lt;em&gt;kohana&lt;/em&gt; - каталог с файлами фреймворка для проекта, файлы расположены в соответствующих каталогах&lt;/p&gt;&lt;p&gt;&lt;em&gt;webroot&lt;/em&gt; - DocumentRoot проекта&lt;/p&gt;</description><link>http://dev-mark.blogspot.com/2011/01/kohana-3_6944.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguLcmyZCrlrqDoCYSQPU0FNf2VmQAeBr-mbzmiae_hodOttwg9FnL8m6FCm3ys1XwF2jKLmQ6diN4THoM0IS6fqyNMSJmWpEOmMtcP3Fe2vyfkbOjW0BnqkVMkcE3gOtYdRL-b-dDqUyA/s72-c/google_code_logo.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1584217139723810963</guid><pubDate>Sat, 29 Jan 2011 06:28:00 +0000</pubDate><atom:updated>2012-12-16T22:30:53.797+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: Работа с контроллерами</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;В прошлой части мы познакомились с отображениями, в этой части мы  будем расширять классы &lt;span class=&#39;monospace&#39;&gt;Controller&lt;/span&gt;, что позволит нам создавать шаблоны для сайтов. Шаблон - обычное отображение которое более или менее базируется на &lt;span class=&#39;monospace&#39;&gt;(X)HTML&lt;/span&gt; коде. Это позволит содержать наши отображения в рамках &lt;abbr title=&quot;Don&amp;#39;t Repeat Yourself&quot;&gt;DRY&lt;/abbr&gt; или &lt;abbr title=&#39;Duplication is Evil&#39;&gt;DIE&lt;/abbr&gt; принципа разработки.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/kohana-3_29.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/kohana-3_29.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s72-c/kohana_.jpg" height="72" width="72"/><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-8102395343345036534</guid><pubDate>Sun, 23 Jan 2011 15:10:00 +0000</pubDate><atom:updated>2012-12-16T22:41:10.512+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Kohana 3: Установка под Ubuntu</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtxav2XOQ6wbc0AN1g_vfz8EZUl4AJWHvxJwvEh1cUatUF27hkQwo22FBjJRbl4po0GFhtH3S5ILT3tn4Xotu4OkOBcKfyQCHoE037ytFe00iXC7Yvpvj-NcpaAp2cHt3KYzB0fVeiQ3U/s1600/LAMPKohana.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtxav2XOQ6wbc0AN1g_vfz8EZUl4AJWHvxJwvEh1cUatUF27hkQwo22FBjJRbl4po0GFhtH3S5ILT3tn4Xotu4OkOBcKfyQCHoE037ytFe00iXC7Yvpvj-NcpaAp2cHt3KYzB0fVeiQ3U/s1600/LAMPKohana.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Раскопав в закромах немного старого железа, было решено взгромоздить всё это дело Ubuntu и использовать под небольшой www сервер.&lt;/p&gt;&lt;p&gt;В &lt;a href=&#39;http://dev-mark.blogspot.com/2011/01/kohana3.html&#39;&gt;Kohana 3: Первые шаги&lt;/a&gt; я обещал рассказать о процеесе установки фреймворка &lt;strong&gt;Kohana 3&lt;/strong&gt; под linux, чем далее и займусь.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/kohana-3-ubuntu.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/kohana-3-ubuntu.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtxav2XOQ6wbc0AN1g_vfz8EZUl4AJWHvxJwvEh1cUatUF27hkQwo22FBjJRbl4po0GFhtH3S5ILT3tn4Xotu4OkOBcKfyQCHoE037ytFe00iXC7Yvpvj-NcpaAp2cHt3KYzB0fVeiQ3U/s72-c/LAMPKohana.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-2420479368447061730</guid><pubDate>Mon, 10 Jan 2011 08:26:00 +0000</pubDate><atom:updated>2012-12-16T22:42:21.140+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: Работа с отображениями</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;В предыдущей части &lt;a href=&#39;http://dev-mark.blogspot.com/2011/01/kohana3.html&#39;&gt;&lt;strong&gt;Kohana 3&lt;/strong&gt;: Первые шаги&lt;/a&gt; мы научились устанавливать фреймворк из репозитария, настраивать &lt;span class=&#39;monospace&#39;&gt;index.php&lt;/span&gt;, создавать контроллер, создавать метод вызываемый по умолчанию и немного общаться с внешним миром. В этой части мы познакомимся с отображениями (&lt;strong&gt;views&lt;/strong&gt;), научимся передавать данные в отображения, работать с вложенными отображениями и переменными отображений.&lt;/p&gt;&lt;blockquote&gt;Используется несколько вариантов перевода &lt;strong&gt;View&lt;/strong&gt; на русский язык, в основном используется три: &lt;em&gt;представление&lt;/em&gt;, &lt;em&gt;вид&lt;/em&gt; или &lt;em&gt;отображение&lt;/em&gt;. Я буду использовать &lt;em&gt;отображение&lt;/em&gt;, мне оно привычнее.&lt;/blockquote&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/kohana-3.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/kohana-3.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s72-c/kohana_.jpg" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-8539847897852736081</guid><pubDate>Fri, 07 Jan 2011 11:57:00 +0000</pubDate><atom:updated>2012-12-16T22:42:04.541+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Kohana</category><title>Kohana 3: Первые шаги</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s800/kohana_.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Давно хотелось по плотнее взяться за фреймворк &lt;strong&gt;Kohana&lt;/strong&gt;, тем более что сталкиваться с ним приходилось, а нормально по работать не удалось. Будем считать, что начнётся изучение с нуля, но базовые знания настроек&lt;span class=&#39;monospace&#39;&gt; Apache&lt;/span&gt; и программирования на &lt;span class=&#39;monospace&#39;&gt;php&lt;/span&gt; уже имеются. Так как линуксового сервера под рукой нет, то будем использовать WinXp с установленным &lt;em&gt;XAMPP&lt;/em&gt;, но к линуксовому серверу вернёмся по позже, как я его до собираю (скорее всего будет &lt;em&gt;ubuntu server&lt;/em&gt;).&lt;/p&gt;&lt;p&gt;У нас имеется XAMPP 1.7.3 установленный в &lt;span class=&#39;monospace&#39;&gt;c:\xampp&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Apache 2.2.14 &lt;span class=&#39;monospace&#39;&gt;c:\xampp\apache&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;PHP 5.3.1 &lt;span class=&#39;monospace&#39;&gt;c:\xampp\php&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;MySQL 5.1.41. &lt;span class=&#39;monospace&#39;&gt;c:\xampp\mysql&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/kohana3.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/kohana3.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEpWLuLefxRU-DgSaVHeIkopX3oF9qIv4ULfiPYfGaalBYOFyWYNOAKQFKGgy-pfAqIfwEOnIHnxdCu6Fc8m9w_CSt3X7GjqNJc6_7fyevpoXWBVCUXAtUmwwIlNz0TgHSelVdqN9tmJs/s72-c/kohana_.jpg" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1686716399945517287</guid><pubDate>Wed, 05 Jan 2011 16:53:00 +0000</pubDate><atom:updated>2012-12-16T22:31:33.698+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><title>Vim: Параметры отступов и типы файлов</title><description>&lt;div style=&quot;text-align: center; clear: both&quot; class=&quot;separator&quot;&gt;&lt;img style=&quot;margin-bottom: 1em; float: left; clear: left; margin-right: 1em&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpJ282Oz4oasQDIXWe5a_nlicrsb3WR3yF1K85VUFoJ5lRVFdNiNyZwMpSlglqWQdHCmRyfdF7adGW6oVT9BsItypeCZ9SXHnifajNpyF0je4Yv4P0gFq3kA5TlTB3R8halfvaCtJ8SHw/s800/2010-11-26_155742.jpg&quot; width=&quot;320&quot; height=&quot;245&quot; &gt;&lt;/div&gt;&lt;p&gt;Разные типы файлов могут требовать разных настроек отступов. Например в &lt;span class=&#39;monospace&#39;&gt;YAML-файле&lt;/span&gt; для отступов используется пробелы, в &lt;span class=&#39;monospace&#39;&gt;Make-файле&lt;/span&gt; - табуляция, а в &lt;span class=&#39;monospace&#39;&gt;Python-файле&lt;/span&gt; - 4 пробела. Эти настройки можно устанавливать автоматически в зависимости от типа файлов.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/vim.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/vim.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpJ282Oz4oasQDIXWe5a_nlicrsb3WR3yF1K85VUFoJ5lRVFdNiNyZwMpSlglqWQdHCmRyfdF7adGW6oVT9BsItypeCZ9SXHnifajNpyF0je4Yv4P0gFq3kA5TlTB3R8halfvaCtJ8SHw/s72-c/2010-11-26_155742.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-5857035841551431567</guid><pubDate>Mon, 03 Jan 2011 19:07:00 +0000</pubDate><atom:updated>2012-12-16T22:30:23.771+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">css</category><title>CSS: Всё о float</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://farm3.static.flickr.com/2715/4085916139_04b960db33_m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://farm3.static.flickr.com/2715/4085916139_04b960db33_m.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;В современном веб дизайне свойство &lt;strong&gt;float&lt;/strong&gt; используется почти на каждом шагу. Но не смотря на такую распространённость не все понимают механизм работы плавающих блоков, их поведение и какие последствия могут быть от их использования.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2011/01/css-float.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2011/01/css-float.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2715/4085916139_04b960db33_t.jpg" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-7220316149018748044</guid><pubDate>Thu, 23 Dec 2010 08:18:00 +0000</pubDate><atom:updated>2012-12-16T22:38:08.316+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">css</category><title>CSS: Наследование</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo3Dx2ldQkZZ8MfelCbi1fJggmHl1IrjqPgNvJvp3Wyqfn3rajkvD1CNGGNdDKi7akjzsvlkl1JYlK0OX1QW6nmWVedPe0URYd-FADObi_W6N9LA4IOLFopA378kosqNkP8b6xMmTKq6Y/s1600/css_inheritance.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;149&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo3Dx2ldQkZZ8MfelCbi1fJggmHl1IrjqPgNvJvp3Wyqfn3rajkvD1CNGGNdDKi7akjzsvlkl1JYlK0OX1QW6nmWVedPe0URYd-FADObi_W6N9LA4IOLFopA378kosqNkP8b6xMmTKq6Y/s200/css_inheritance.jpg&quot; width=&quot;200&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Наследование&lt;/strong&gt;, это процесс при котором свойства родительского элемента передаются к дочерним элементам, даже если эти свойства не были чётко определены. Некоторые свойства наследуются автоматически, элемент получает свойства своего предка.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/css_23.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/css_23.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo3Dx2ldQkZZ8MfelCbi1fJggmHl1IrjqPgNvJvp3Wyqfn3rajkvD1CNGGNdDKi7akjzsvlkl1JYlK0OX1QW6nmWVedPe0URYd-FADObi_W6N9LA4IOLFopA378kosqNkP8b6xMmTKq6Y/s72-c/css_inheritance.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1864073701297316784</guid><pubDate>Wed, 22 Dec 2010 19:13:00 +0000</pubDate><atom:updated>2012-12-16T22:47:17.896+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">vim</category><title>Vim: Небольшой справочник</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI-Y23xgLrPw_braC3FtuTOtHM_OkBbwchJZRDQPAOpbRmf_kLnuFpQof9YDlES0yfUHb5XfKV5OHLQMbH6Rp1_hrXFOYbj3mRcKZh4hvNSNU5khh7OA1F__aaqVUBIEgGbxu4bLU2Q0Q/s1600/vim-help.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI-Y23xgLrPw_braC3FtuTOtHM_OkBbwchJZRDQPAOpbRmf_kLnuFpQof9YDlES0yfUHb5XfKV5OHLQMbH6Rp1_hrXFOYbj3mRcKZh4hvNSNU5khh7OA1F__aaqVUBIEgGbxu4bLU2Q0Q/s1600/vim-help.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Я давно использую &lt;strong&gt;Vim&lt;/strong&gt; в качестве основного редактора. И хотя над большими проектами работаю в &lt;strong&gt;eclipse&lt;/strong&gt;, для внесения незначительных правок проще использовать &lt;strong&gt;Vim&lt;/strong&gt;, чем ждать загрузки &lt;strong&gt;eclipse&lt;/strong&gt;. Но &lt;strong&gt;Vim&lt;/strong&gt; не совсем &lt;em&gt;&amp;quot;простой текстовый редактор&amp;quot;&lt;/em&gt; у него три режима работы и множество команд. Изучение команд и возможностей &lt;strong&gt;Vim&lt;/strong&gt; занимает время, но потраченное на изучение время быстро окупается.&lt;/p&gt;&lt;p&gt;Основные команды &lt;strong&gt;Vim&lt;/strong&gt; очень простые, но сочетание простых команд может быть довольно мощным инструментом.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/vim_23.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/vim_23.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI-Y23xgLrPw_braC3FtuTOtHM_OkBbwchJZRDQPAOpbRmf_kLnuFpQof9YDlES0yfUHb5XfKV5OHLQMbH6Rp1_hrXFOYbj3mRcKZh4hvNSNU5khh7OA1F__aaqVUBIEgGbxu4bLU2Q0Q/s72-c/vim-help.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1471489853691412666</guid><pubDate>Wed, 22 Dec 2010 16:55:00 +0000</pubDate><atom:updated>2012-12-16T22:37:55.944+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">css</category><title>CSS: Свойство position</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUqXihi4KoWa7iTlrWXY5fRoUedf8SJPYLEzBVjej3Lk1oH6gWIn2orT1xvVSFqD-NziZVnOFQCJLAACQu2SoSAZi52SKjOQJGAfBM1advWWfwYl0iGDO1umDisFPEv_1RYjDC4co-hok/s1600/ant_box.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUqXihi4KoWa7iTlrWXY5fRoUedf8SJPYLEzBVjej3Lk1oH6gWIn2orT1xvVSFqD-NziZVnOFQCJLAACQu2SoSAZi52SKjOQJGAfBM1advWWfwYl0iGDO1umDisFPEv_1RYjDC4co-hok/s1600/ant_box.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;
Свойство position распространяется на все элементы и может иметь одно из пяти возможных значений:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;monospace&quot;&gt;static&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;monospace&quot;&gt;relative&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;monospace&quot;&gt;absolute&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;monospace&quot;&gt;fixed&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;monospace&quot;&gt;inherit&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/css-position.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/css-position.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUqXihi4KoWa7iTlrWXY5fRoUedf8SJPYLEzBVjej3Lk1oH6gWIn2orT1xvVSFqD-NziZVnOFQCJLAACQu2SoSAZi52SKjOQJGAfBM1advWWfwYl0iGDO1umDisFPEv_1RYjDC4co-hok/s72-c/ant_box.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-1227013220730478734</guid><pubDate>Mon, 20 Dec 2010 13:51:00 +0000</pubDate><atom:updated>2012-12-16T22:38:20.157+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">css</category><title>CSS: Значение свойства: inherit</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDa7us0XrPlPzu2kbDXh1TLcAkgt8_R0amSeCS3naxaWJwzJW-VTweRITXf06Gyeyg2Ru6WT1hD9TPVeDZsppG-o_lrhzeywJ3xQIit9kBbTS6iHTeiQDPC-atsPGSd08uUfs_v0CxyWE/s1600/css_inheretance.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDa7us0XrPlPzu2kbDXh1TLcAkgt8_R0amSeCS3naxaWJwzJW-VTweRITXf06Gyeyg2Ru6WT1hD9TPVeDZsppG-o_lrhzeywJ3xQIit9kBbTS6iHTeiQDPC-atsPGSd08uUfs_v0CxyWE/s1600/css_inheretance.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Хотя некоторые характеристики в &lt;strong&gt;CSS&lt;/strong&gt; наследуются автоматически, могут быть ситуации когда необходимо увеличить вес наследуемого свойства. Указание значения &lt;span class=&#39;monospace&#39;&gt;inherit&lt;/span&gt; для любого свойства &lt;strong&gt;CSS&lt;/strong&gt;, применённого к элементу передаст вычисленное значение свойства элемента-родителя данному элементу. Указав в авторском стиле, что свойство наследует своё значение от предка, вы можете увеличить его вес.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/css-inherit.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/css-inherit.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDa7us0XrPlPzu2kbDXh1TLcAkgt8_R0amSeCS3naxaWJwzJW-VTweRITXf06Gyeyg2Ru6WT1hD9TPVeDZsppG-o_lrhzeywJ3xQIit9kBbTS6iHTeiQDPC-atsPGSd08uUfs_v0CxyWE/s72-c/css_inheretance.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-8091286167373483591</guid><pubDate>Fri, 17 Dec 2010 19:38:00 +0000</pubDate><atom:updated>2012-12-16T22:32:26.043+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">DX Auth</category><title>DX Auth: Примеры. Пример с правами доступа</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s1600/CI_DXAuth.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s1600/CI_DXAuth.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;В последнем фрагменте перевода, руководства пользователя библиотеки &lt;strong&gt;DX Auth&lt;/strong&gt; фреймворка &lt;strong&gt;CodeIgniter&lt;/strong&gt;, мы рассмотрим пример установки прав доступа используя модель &lt;span class=&#39;monospace&#39;&gt;application/models/dx_auth/permissions.php&lt;/span&gt;.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/dx-auth_18.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/dx-auth_18.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s72-c/CI_DXAuth.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7091769368651685109.post-4787754179829736956</guid><pubDate>Fri, 17 Dec 2010 17:35:00 +0000</pubDate><atom:updated>2012-12-16T22:32:51.533+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CodeIgniter</category><category domain="http://www.blogger.com/atom/ns#">DX Auth</category><title>DX Auth: Примеры. Пример использования reCAPTCHA</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s1600/CI_DXAuth.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s1600/CI_DXAuth.jpg&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Десятая часть перевода документации библиотеки авторизации &lt;strong&gt;DX Auth&lt;/strong&gt; для фреймворка &lt;strong&gt;CodeIgniter&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Рассмотрим расширенный пример контроллера &lt;span class=&#39;monospace&#39;&gt;Auth&lt;/span&gt;, демонстрирующий возможность использования &lt;strong&gt;reCAPTCHA&lt;/strong&gt; с библиотекой &lt;strong&gt;DX Auth&lt;/strong&gt;. Убедитесь, что вы указали общий и личный ключ в &lt;a href=&#39;http://dev-mark.blogspot.com/2010/12/dx-auth_470.html&#39;&gt;файле конфигурации&lt;/a&gt;, иначе пример не будет работать.&lt;/p&gt;&lt;a href=&quot;http://dev-mark.blogspot.com/2010/12/dx-auth-recaptcha.html#more&quot;&gt;Дальше »&lt;/a&gt;</description><link>http://dev-mark.blogspot.com/2010/12/dx-auth-recaptcha.html</link><author>noreply@blogger.com (alex)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHZstS0BMoEJ3mU2Ol0C5Dh_hmDnMteVrSxIpP0rbod3gskuZ4qaScn3PBALXzycStLamOxmlYE-tShOw42GIjdlfatih4iMTrK9kzHzP6ByO957lYxoGaEf1q468G5QTr4qt_3rxXbfQ/s72-c/CI_DXAuth.jpg" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>