<?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>michas&#039;s blog</title>
	<atom:link href="http://blog.michas.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.michas.ru</link>
	<description>Статьи про web-разработку, PHP, CakePHP.</description>
	<lastBuildDate>Mon, 21 Jun 2010 16:07:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>
		<item>
		<title>Статические и динамические страницы в одном контроллере</title>
		<link>http://blog.michas.ru/2010/02/11/static-and-dynamic-pages-in-a-single-controller/</link>
		<comments>http://blog.michas.ru/2010/02/11/static-and-dynamic-pages-in-a-single-controller/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 08:41:35 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[pages]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=51</guid>
		<description><![CDATA[В CakePHP есть замечательный стандартный контроллер pages который позволяет нам отображать статические страницы просто создав новый файл.
Но очень часто нам требуется иметь как статические страницы так и динамические, содержание которых хранится в БД. Ниже я приведу пример как это можно реализовать используя один контроллер.

Предположим у вас есть метод в контроллере pages с именем view:

function view&#40;$id [...]]]></description>
			<content:encoded><![CDATA[<p>В CakePHP есть замечательный стандартный контроллер pages который позволяет нам отображать статические страницы просто создав новый файл.</p>
<p>Но очень часто нам требуется иметь как статические страницы так и динамические, содержание которых хранится в БД. Ниже я приведу пример как это можно реализовать используя один контроллер.<br />
<span id="more-51"></span><br />
Предположим у вас есть метод в контроллере pages с именем view:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$id</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;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span>__<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Invalid Page.'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</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;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Page</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'first'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'conditions'</span><span style="color: #339933;">=&gt;</span>array<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Этот метод выводит содержание динамической страницы.</p>
<p>Теперь сделаем так, чтобы данный метод мог выводить и статические и динамические страницы.<br />
Прежде всего добавим в контроллер pages новый метод display. Он находится в стандартном контроллере pages и имеет вид:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$path</span> <span style="color: #339933;">=</span> <span style="color: #990000;">func_get_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$count</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$count</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;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$subpage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$subpage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> Inflector<span style="color: #339933;">::</span><span style="color: #004000;">humanize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'subpage'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#41;</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;">render</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">join</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>После того как мы добавили новый метод, нам необходимо модифицировать метод view для достижения поставленной цели:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$id</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;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span>__<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Invalid Page.'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</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;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Page</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'first'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'conditions'</span><span style="color: #339933;">=&gt;</span>array<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</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;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Рассмотрим подробнее проделанные изменения. Вначале мы попробуем найти страницу с заданным именем в БД, если она там найденна то выведем ее, если нет, то, вызываем новый метод display, который ищет в &#8220;/app/views/pages/&#8221; файл с названием которое передается в параметре метода и выводит его.</p>
<p>Готово! Теперь чтобы вывести статичную страницу достаточно создать файл с расширением &#8220;ctp&#8221; в каталоге &#8220;/app/views/pages/&#8221;, а чтобы вывести динамическую страницу, достаточно добавить ее в БД.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2010/02/11/static-and-dynamic-pages-in-a-single-controller/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Агрегатные SQL функции в CakePHP</title>
		<link>http://blog.michas.ru/2009/09/14/aggregation-sql-functions-with-cakephp/</link>
		<comments>http://blog.michas.ru/2009/09/14/aggregation-sql-functions-with-cakephp/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:27:56 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp для самых маленьких]]></category>
		<category><![CDATA[aggregation sql functions]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=43</guid>
		<description><![CDATA[Для начинающих CakePHP программистов часто становится проблемой использовать агрегатные SQL функции такие как MAX, MIN или AVG. В этом посте я расскажу как легко с этим справиться.
 Допустим вы хотите отобразить среднее количество просмотров поста в блоге или новости.
SQL запрос должен выглядеть примерно так:

SELECT AVG&#40;views&#41; FROM posts

Чтобы не использовать функцию query() вы можете использовать следующий [...]]]></description>
			<content:encoded><![CDATA[<p>Для начинающих CakePHP программистов часто становится проблемой использовать агрегатные SQL функции такие как MAX, MIN или AVG. В этом посте я расскажу как легко с этим справиться.</p>
<p><span id="more-43"></span> Допустим вы хотите отобразить среднее количество просмотров поста в блоге или новости.</p>
<p>SQL запрос должен выглядеть примерно так:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> AVG<span style="color: #66cc66;">&#40;</span>views<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> posts</pre></div></div>

<p>Чтобы не использовать функцию query() вы можете использовать следующий синтаксис в CakePHP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'first'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fields'</span><span style="color: #339933;">=&gt;</span>array<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'AVG(views) as avg_views'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Как видите ничего сложного нет <img src='http://blog.michas.ru/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2009/09/14/aggregation-sql-functions-with-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Оптимизация PhpShop</title>
		<link>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/</link>
		<comments>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 16:26:35 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[решения проблем]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpshop]]></category>
		<category><![CDATA[идиотизм]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=34</guid>
		<description><![CDATA[Так уж случилось, что один из наших клиентов заказал нам добавить в его интернет магазин несколько десятков тысяч товаров. Магазин у него работал на небезызвестном PHPShop . До этого момента, я с этим «чудом» не встречался. После добавления первых 5000 товаров магазин слег и мог показывать только белую страницу.  Тех поддержка отвечала что это все [...]]]></description>
			<content:encoded><![CDATA[<p>Так уж случилось, что один из наших клиентов заказал нам добавить в его интернет магазин несколько десятков тысяч товаров. Магазин у него работал на небезызвестном <a title="PHPShop" href="http://phpshop.ru/">PHPShop</a> . До этого момента, я с этим «чудом» не встречался. После добавления первых 5000 товаров магазин слег и мог показывать только белую страницу.  Тех поддержка отвечала что это все из-за хостера(MasterHost). Я им поверил и решил опробовать все на локальном веб-сервере. Магазин показывал ту же картину. Причем в списке задач отображалось, что Apache «съедает» 200 Мб оперативной памяти. Пришлось лезть во внутренности…</p>
<p><span id="more-34"></span></p>
<p>После недолгих поисков было обнаружено, что при выводе товаров скрипт не делал запрос к базе, чтобы получить конкретный товар. Оказалось что при запуске скрипта все товары из базы помещаются в глобальный массив, а затем, когда нужен определенный товар, он брался из этого массива. Причем занимался этим почему-то модуль, который по идее должен отвечать за кэширование(cache.inc.php). Мне это показалось очень странным. Переписывать весь скрипт, чтобы данные брались из БД только когда они нужны, было долго (этот глобальный массив использовался очень часто) и не было времени, так как заказчик торопил. Надо было искать другой выход и он был найден.</p>
<p>Необходимо было сделать так, чтобы, данные в массив попадали только при обращении к нему. После недолгих поисков был найден интерфейс ArrayAccess, который позволяет обращаться к объекту как к элементу массива. За пару часов все это было реализовано. Теперь данные в массив попадали только при обращении к нему. Так же дополнительно все полученные данные кешировались чтобы избежать дополнительную нагрузку на MySQL сервер.</p>
<p>Решение проблемы не только восстановило работоспособность магазина, но и уменьшило время генерации страницы в ДВА раза.</p>
<p>Если кому-то интересно посмотреть на код решения проблемы, могу опубликовать его целиком в следующем посте.</p>
<p>Если разработчики PhpShop увидят этот пост, я бы хотел знать, чем они руководствовались, создавая глобальный массив со всеми товарами заранее.<em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Хелперы. Полезные манипуляции со строками[перевод]</title>
		<link>http://blog.michas.ru/2009/05/12/xelpery-poleznye-manipulyacii-so-strokamiperevod/</link>
		<comments>http://blog.michas.ru/2009/05/12/xelpery-poleznye-manipulyacii-so-strokamiperevod/#comments</comments>
		<pubDate>Tue, 12 May 2009 10:42:47 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[translate]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=15</guid>
		<description><![CDATA[CakePHP поставляется с кучей полезных хелперов и компонентов, которые обеспечивают удобные инструменты для обработки и манипулирования данными. Эти хелперы значимы не только для пользователя фреймворка, но и могут оказать большую помощь кому-нибудь  кто пишет PHP приложения не используя CakePHP.
Вот несколько примеров:
NumberHelper
Number хелпер содержит мощные функции для манипуляции с цифрами.
precision()
precision() возвращает число форматированное с уровнем [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP поставляется с кучей полезных хелперов и компонентов, которые обеспечивают удобные инструменты для обработки и манипулирования данными. Эти хелперы значимы не только для пользователя фреймворка, но и могут оказать большую помощь кому-нибудь  кто пишет PHP приложения не используя CakePHP.<br />
<span id="more-15"></span>Вот несколько примеров:</p>
<h2>NumberHelper</h2>
<p>Number хелпер содержит мощные функции для манипуляции с цифрами.</p>
<p><strong>precision()</strong></p>
<p>precision() возвращает число форматированное с уровнем точности. Например:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$number</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">precision</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">25.02558</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//выведет</span>
<span style="color:#800080;">25.026</span></pre></div></div>

<p><strong>toReadableSize()</strong></p>
<p>Эта функция принимает параметром размер файла и возвращает хорошо отформатированную строку с указанием размера в байтах, Кб, Мб, Гб и Тб. Например:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$number</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toReadableSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2502558</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//выведет</span>
<span style="color:#800080;">2.39</span> MB</pre></div></div>

<p>Другие функции хелпера Numer:<br />
<strong>toPercentage()</strong>: Форматирует число в проценты.<br />
<strong>format()</strong>:Форматирует число в денежный формат.<br />
<strong>currency()</strong>:Форматирует число в денежный формат подписанные знаком валюты.</p>
<p>Смотрите файл <strong>cake/libs/view/helpers/number.php</strong> чтобы ознакомится с полным списком функций Number хелпера и их применением.</p>
<h2>TextHelper</h2>
<p>Text хелпер содержит полезные функции для манипуляции с текстовыми строками.</p>
<p><strong>highlight()</strong></p>
<p>Подсвечивает заданную фразу в текстк. Например:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">highlight</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Word example will be highlighted&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;example&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//выведет</span></pre></div></div>

<p>This is the string in which word <span style="background: #ffff00;">example</span> will be highlighted</p>
<p>Примечание: вы должны определить стиля для класса “highlight” в вашем CSS. Например:<br />
.highlight{background:#FFFF00;}</p>
<p><strong>stripLinks()</strong></p>
<p>Уберет все ссылки(&lt;a href=….) из заданного текста. Пример:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">stripLinks</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Dont show the clickable link on &lt;a href=&quot;http://www.givebackindia.com&quot;&gt;Online Charity Mall&lt;/a&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//выведет</span>
Dont show the clickable <span style="color: #990000;">link</span> on Online Charity Mall</pre></div></div>

<p><strong>autoLinkUrls()</strong></p>
<p>Добавляет ссылки (&lt;a href=….) в заданном тексте в котором строки начинаются с http:// и ftp://.</p>
<p><strong>autoLinkEmails()</strong></p>
<p>Добавляет email ссылки(&lt;a href=”mailto:….) в заданном тексте.</p>
<p><strong>truncate()</strong></p>
<p>Обрезает строку до длины указанной во втором параметре и заменяет последние символы. Заботится о HTML тэгах и кодировке.</p>
<p>Например:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$text</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">truncate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cuts a string to the length of given second argument and replaces the last characters. Takes care of HTML tags and encoding.&quot;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//outputs</span>
Cuts a string to the length of given second arg<span style="color: #339933;">...</span></pre></div></div>

<p><strong>excerpt()</strong></p>
<p>Создает выдержку из текста вокруг искомой фразы длиной определенной радиусом и добавляет окончание.</p>
<p><strong>toList()</strong></p>
<p>Создает список разделенный запятыми где два последних элемента соеденены ‘and’.</p>
<p>Смотрите файл <strong>cake/libs/view/helpers/text.php</strong> чтобы ознакомится с полным списком функций и их использованием.</p>
<h2>Time Helper</h2>
<p><strong>convert()</strong></p>
<p>Конвертирует данное время(во временной зоне сервера) в пользовательское локальное время со сдвигом от GMT.</p>
<p><strong>nice()</strong></p>
<p>Возвращает хорошо форматированную строку для данной Datetime строки.</p>
<p><strong>niceShort()</strong></p>
<p>Возвращает форматированную строку даты в виде описания.</p>
<p><strong>isToday()</strong></p>
<p>Возвращает true если данная datetime строка равна текущей дате.</p>
<p><strong>isThisWeek()</strong></p>
<p>Возвращает true если данная дата на текущей неделе.</p>
<p><strong>isThisMonth()</strong></p>
<p>Возвращает true если данная дата в текущем месяце.</p>
<p><strong>isThisYear()</strong></p>
<p>Возвращает true если данная дата в текущем году.</p>
<p><strong>wasYesterday()</strong></p>
<p>Возвращает true если данная дата была вчера.</p>
<p><strong>isTomorrow()</strong></p>
<p>Возвращает true если данная дата будет завтра.</p>
<p><strong>timeAgoInWords()</strong></p>
<p>Возвращает относительную дата или форматированную в зависимости от разницы между текущей датой и данной.</p>
<p><strong>format()</strong></p>
<p>Возвращает UNIX timestamp, данный либо в UNIX timestamp или правильной strtotime() строке.</p>
<p>Смотрите файл <strong>cake/libs/view/helpers/time.php</strong> чтобы ознакомится с полным списком функций и их использованием.</p>
<p>Также есть и другие хелперы, некоторые из них(например html, form, javascript, ajax) каркас отображений в CakePHP. Вам необходимо посмотреть на них в <strong>cake/libs/view/helpers</strong> для лучшего применения.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2009/05/12/xelpery-poleznye-manipulyacii-so-strokamiperevod/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>timeAgoInWords по русски</title>
		<link>http://blog.michas.ru/2009/05/12/timeagoinwords-po-russki/</link>
		<comments>http://blog.michas.ru/2009/05/12/timeagoinwords-po-russki/#comments</comments>
		<pubDate>Tue, 12 May 2009 09:52:11 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=7</guid>
		<description><![CDATA[Привет, пекари.
Хотите чтобы в вашем проекте даты писались так:«1 день, 3 часа назад» или так:«2 месяца, 2 недели, 3 дня назад»?

Качаем отсюда файл и кладем его в «cakedir\app\locale\rus\LC_MESSAGES\».
Затем в файле «app_controller.php» в функции «beforeFilter» пишем следущее:
Configure::write(&#8216;Config.language&#8217;, &#8216;ru&#8217;);
Все. Теперь где нам надо вывести дату в таком формате пишем:
echo $time-&#62;timeAgoInWords($date);
Также все эти манипуляции помогут нам выводить названия [...]]]></description>
			<content:encoded><![CDATA[<p>Привет, пекари.<br />
Хотите чтобы в вашем проекте даты писались так:«1 день, 3 часа назад» или так:«2 месяца, 2 недели, 3 дня назад»?</p>
<p><span id="more-7"></span></p>
<p>Качаем <a href="http://cake.michas.ru/locale/rus/LC_MESSAGES/default.po">отсюда</a> файл и кладем его в «cakedir\app\locale\rus\LC_MESSAGES\».</p>
<p>Затем в файле «app_controller.php» в функции «beforeFilter» пишем следущее:<br />
Configure::write(&#8216;Config.language&#8217;, &#8216;ru&#8217;);</p>
<p>Все. Теперь где нам надо вывести дату в таком формате пишем:<br />
echo $time-&gt;timeAgoInWords($date);</p>
<p>Также все эти манипуляции помогут нам выводить названия месяцев на русском языке при использовании:<br />
echo $form-&gt;input(&#8216;Date&#8217;, array(&#8216;type&#8217;=&gt;&#8217;date&#8217;));</p>
<p>Вопросы можно задавать: xmpp:cakephp@conference.jabber.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2009/05/12/timeagoinwords-po-russki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
