<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Web-разработчик в дебрях</title>
	
	<link>http://kuaa.ru</link>
	<description>О вебе, разработке и прочих вещах</description>
	<lastBuildDate>Thu, 04 Feb 2010 16:40:10 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/andrey-kuzmin" /><feedburner:info uri="andrey-kuzmin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Оператор goto – использовать или нет?</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/v9cMcPeqVlI/</link>
		<comments>http://kuaa.ru/operator-goto/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 16:40:10 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[трёп]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=142</guid>
		<description><![CDATA[Сегодня с коллегами в груп-чате обсуждали поднятую мною тему относительно оператора goto. Копаясь в коде большой пребольшой системы наткнулся на использование оператора goto. Честно говоря, поначалу был несколько фрустрирован данным фактом, но немного размышлений и комментарии коллег поставили в моей голове все на место.


Те, кто хотя бы немного учился в университете на IT-специальности получали хотя [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня с коллегами в груп-чате обсуждали поднятую мною тему относительно оператора goto. Копаясь в коде большой пребольшой системы наткнулся на использование оператора goto. Честно говоря, поначалу был несколько фрустрирован данным фактом, но немного размышлений и комментарии коллег поставили в моей голове все на место.</p>
<p><span id="more-142"></span></p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/02/goto_292_rus__.png"><img class="aligncenter size-medium wp-image-143" title="GoTo" src="http://kuaa.ru/wp-content/uploads/2010/02/goto_292_rus__-300x81.png" alt="" width="300" height="81" /></a></p>
<p>Те, кто хотя бы немного учился в университете на IT-специальности получали хотя бы базовое образование по программированию. В наиболее продвинутых ВУЗах сразу учили на С, в менее на Pascal (или, о shit, Basic). Но все преподаватели на единой волне твердили: &#034;goto оператор есть, но его использование карается неудом и его нельзя использовать в своих программах&#034;. И конечно же, наиболее прилежные студенты честно городили огромные конструкции if, else, фигурных скобок, в лучшем случае, case. Но, как показывает практика, оператор goto в некоторых случаях является наиболее лучшим вариантом решения.</p>
<p>Наиболее весомым аргументом преподавателей было утверждение: &#034;Злоупотребление goto приводит к плохой читаемости кода, большей вероятностью появления ошибок&#034;, а менее весомым: &#034;goto &#8211; это архаичный оператор, который не потребно употреблять в программировании&#034;. На самом деле большинство преподавателей далеко не правы в своих утверждениях, точнее, не дают аргументов &#034;ЗА&#034; оператор, которые тоже имеются.</p>
<p>Если внимательно прочитать первое утверждение преподавателей, то можно понять, что говорят именно про &#034;злоупотребление&#034;, а не про использование вовсе. На мой, и не только, взгляд, оператор goto удобнее использовать в случаях когда необходимо проверить много условий и в случае неудачной (или наоборот удачной) проверки сразу перекинуть исполнению программы к выводу ошибки (или положительного результата). Без использования goto это бы превратилось в приличную лестницу на десятки строк с множеством условий if-else c выводом одного или нескольких вариантов выхода из функции. В тоже же время с оператором goto можно задать единственную точку выхода из функции и слать в неё интерпретатор/компилятор при всех ошибках. В этом случае количество кода значительно сокращается, а читать его одно удовольствие.</p>
<p>Еще бы я добавил, что такой выход из функции лучше разместить внизу листинга кода, чтобы не приходилось бегать глазами и мышкой вверх-вниз при чтение очередной функции.</p>
<p>Кстати, а в Ассемблере вообще толком ни одной программы не напишешь без аналога goto &#8211; JUMP.</p>
<p>Подтверждать свои слова кодом я тут не буду, а лучше просто отправлю всех на <a href="http://ru.wikipedia.org/wiki/GOTO" target="_blank">Википедию</a>.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/v9cMcPeqVlI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/operator-goto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/operator-goto/</feedburner:origLink></item>
		<item>
		<title>Взломали или просто обиженный сотрудник?</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/Rzif9-SAd14/</link>
		<comments>http://kuaa.ru/vzlomali-ili-prosto-obizhennyj-sotrudnik/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 10:31:45 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[Общее]]></category>
		<category><![CDATA[трёп]]></category>
		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=135</guid>
		<description><![CDATA[На сайте одного достаточно известного хостинг-провайдера замечен веселый текст внизу страницы.  Возможно, кто-то взломал. Но скорее всего, просто обиженный сотрудник решил так отомстить своим работодателям.

Обращаем внимание на текст в самом низу страницы.
]]></description>
			<content:encoded><![CDATA[<p>На сайте одного достаточно известного хостинг-провайдера замечен веселый текст внизу страницы.  Возможно, кто-то взломал. Но скорее всего, просто обиженный сотрудник решил так отомстить своим работодателям.</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/mchost1.png"><img class="alignnone size-medium wp-image-139" title="mchost" src="http://kuaa.ru/wp-content/uploads/2010/01/mchost1-300x216.png" alt="" width="300" height="216" /></a></p>
<p>Обращаем внимание на текст в самом низу страницы.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/Rzif9-SAd14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/vzlomali-ili-prosto-obizhennyj-sotrudnik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/vzlomali-ili-prosto-obizhennyj-sotrudnik/</feedburner:origLink></item>
		<item>
		<title>Поиск уникальных значений в двумерном ассоциативном массиве</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/VmwT0VlCZDM/</link>
		<comments>http://kuaa.ru/poisk-unikalnyx-znachenij-v-dvumernom-associativnom-massive/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 22:22:57 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[массивы]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=126</guid>
		<description><![CDATA[Иногда разум и программерский код заводят проект в такие дебри, что потом не знаешь как из них выбраться. Бывает необходимо вернуть ассоциативный двумерный массив уникальных значений из &#8230; правильно, из такого же большого двумерного ассоциативного массива содержащим дублирующие записи. Хотя эта фукнция сработает и для обычных двумерных массивов.
/** возвращает массив уникальных значений в двумерном ассоциативном [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда разум и программерский код заводят проект в такие дебри, что потом не знаешь как из них выбраться. Бывает необходимо вернуть ассоциативный двумерный массив уникальных значений из &#8230; правильно, из такого же большого двумерного ассоциативного массива содержащим дублирующие записи. Хотя эта фукнция сработает и для обычных двумерных массивов.</p>
<p><span id="more-126"></span>/** возвращает массив уникальных значений в двумерном ассоциативном массиве</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000088;">$array</span> <span style="color: #339933;">-</span> массив
 <span style="color: #000088;">$row_element</span> <span style="color: #339933;">-</span> название поля<span style="color: #339933;">,</span> по которому искать уникальные значения
 <span style="color: #339933;">*/</span>
 <span style="color: #000000; font-weight: bold;">function</span> remove_dups<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row_element</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$new_array</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: #000088;">$array</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: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$current</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #000088;">$add_flag</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
         <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tmp</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: #000088;">$current</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$row_element</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #000088;">$tmp</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$row_element</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 <span style="color: #000088;">$add_flag</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
             <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$add_flag</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$new_array</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$current</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     <span style="color: #b1b100;">return</span> <span style="color: #000088;">$new_array</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Покажу на примерах, как это работает.<br />
Имеем массив:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$array</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: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'city'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Москва'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'street'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Орджоникидзе'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$array</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: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'city'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Самара'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'street'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Ленина'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'city'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Москва'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'street'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Мира'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$array</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'city'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Питер'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'street'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Ленина'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Найдем в нем уникальные записи с ключом &#039;city&#039;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$array2</span> <span style="color: #339933;">=</span> remove_dups<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'city'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Результат выполнения</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">array(3) {
  [0]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(6) &quot;Москва&quot;
      [&quot;street&quot;]=&gt; string(12) &quot;Орджоникидзе&quot;
    }
  [1]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(6) &quot;Самара&quot;
      [&quot;street&quot;]=&gt; string(6) &quot;Ленина&quot;
    }
  [2]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(5) &quot;Питер&quot;
      [&quot;street&quot;]=&gt; string(6) &quot;Ленина&quot;
    }
}</pre></td></tr></table></div>

<p>Или же отсортируем по второму ключу ассоциативного массива &#039;street&#039; и получим такой результат</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">array(3) {
  [0]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(6) &quot;Москва&quot;
      [&quot;street&quot;]=&gt; string(12) &quot;Орджоникидзе&quot;
    }
  [1]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(6) &quot;Самара&quot;
      [&quot;street&quot;]=&gt; string(6) &quot;Ленина&quot;
    }
  [2]=&gt;
    array(2) {
      [&quot;city&quot;]=&gt; string(6) &quot;Москва&quot;
      [&quot;street&quot;]=&gt; string(4) &quot;Мира&quot;
    }
}</pre></td></tr></table></div>

<p>Если у Вас не ассоциативные, а обычные двумерные массивы, то вместо названия ключа нужно будет писать его номер.</p>
<p>В свое время это решение я нашел на <a href="http://www.php.net/manual/en/function.array-unique.php#68339" target="_blank">php.net</a>.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/VmwT0VlCZDM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/poisk-unikalnyx-znachenij-v-dvumernom-associativnom-massive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/poisk-unikalnyx-znachenij-v-dvumernom-associativnom-massive/</feedburner:origLink></item>
		<item>
		<title>Склонение слов средствами javascript</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/B9w3gdF96Ck/</link>
		<comments>http://kuaa.ru/sklonenie-slov-sredstvami-javascript/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 18:32:49 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[строки и числа]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=120</guid>
		<description><![CDATA[Помимо склонения слов средствами php иногда нужно производить аналогичные операции с текстом и на javascript. Для этого достаточно взять уже готовую функцию на php и переписать ее под новый синтаксис.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//склонение окончаний
function declension&#40;num, expressions&#41; &#123;
    var result;
    count = num % 100;
    if &#40;count &#62;= 5 &#38;&#38; [...]]]></description>
			<content:encoded><![CDATA[<p>Помимо <a href="http://kuaa.ru/sklonenie-slov-i-pravilnaya-zapis-vremeni-v-vide-teksta/">склонения слов средствами php</a> иногда нужно производить аналогичные операции с текстом и на javascript. Для этого достаточно взять уже готовую функцию на php и переписать ее под новый синтаксис.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//склонение окончаний</span>
<span style="color: #003366; font-weight: bold;">function</span> declension<span style="color: #009900;">&#40;</span>num<span style="color: #339933;">,</span> expressions<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> result<span style="color: #339933;">;</span>
    count <span style="color: #339933;">=</span> num <span style="color: #339933;">%</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">&gt;=</span> <span style="color: #CC0000;">5</span> <span style="color: #339933;">&amp;&amp;</span> count <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        result <span style="color: #339933;">=</span> expressions<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'2'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        count <span style="color: #339933;">=</span> count <span style="color: #339933;">%</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result <span style="color: #339933;">=</span> expressions<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'0'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">&gt;=</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">&amp;&amp;</span> count <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            result <span style="color: #339933;">=</span> expressions<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'1'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            result <span style="color: #339933;">=</span> expressions<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'2'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Отличием данной функции от php-аналога является отсутствие третьего параметра, отвечающего за вывод числа вместе с текстом. Если это нужно, то  дописать функцию не составит никакого труда.</p>
<p>Теперь можно склонять слова и выводить их на странице без перезагрузки страницы.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/B9w3gdF96Ck" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/sklonenie-slov-sredstvami-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/sklonenie-slov-sredstvami-javascript/</feedburner:origLink></item>
		<item>
		<title>Сравнение менеджеров закачек Freeloader, Kget, Gwget и Aria</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/H1EghUmrTJo/</link>
		<comments>http://kuaa.ru/choose-download-manager/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 08:32:26 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Aria]]></category>
		<category><![CDATA[Freeloader]]></category>
		<category><![CDATA[Gwget]]></category>
		<category><![CDATA[Kget]]></category>
		<category><![CDATA[обзор]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=108</guid>
		<description><![CDATA[Начинаю процесс восстановления старых записей из блога. Восстанавливать буду не все, а только те, на которые еще остались в интернете ссылки и представляют хоть какую-то ценность для других.
В этой статье я хотел бы рассмотреть варианты download-менеджеров, которые предоставляет нам стандартный  репозиторий для Ubuntu.  Оценивать программы я буду по двум направлениям: функциональность и удачность [...]]]></description>
			<content:encoded><![CDATA[<p>Начинаю процесс восстановления старых записей из блога. Восстанавливать буду не все, а только те, на которые еще остались в интернете ссылки и представляют хоть какую-то ценность для других.</p>
<p>В этой статье я хотел бы рассмотреть варианты download-менеджеров, которые предоставляет нам стандартный  репозиторий для Ubuntu.  Оценивать программы я буду по двум направлениям: функциональность и удачность исполнения(интерфейс), причем второе направление в оценке содержит сугубо личное мнение, которое может не совпадать с вашим.<br />
Итак, приступим.<br />
<span id="more-108"></span><br />
Для начала напомню где все эти программы можно достать. Для этого идем в <strong>Приложения -&gt; Установка/Удаление&#8230; -&gt; раздел Интернет</strong>.  Вообще можно воспользоваться поиском по Интернету или на тематических форумах для получения более полного списка возможных программ download-менеджеров для никсов и я более чем уверен, что предложенными мною вариантами список не ограничивается.</p>
<h4>Aria</h4>
<p>Информация о пакете:</p>
<p style="border-left: 2px solid #eeeeee; margin-left: 40px; padding-left: 5px;">Aria это менеджер закачек. Закачки можнопрерывать, возобновлять, ставить в очередь и сохранять. Это очень дружественный GTK интерфейс с полезной консолью для логов. Программа поддерживает CRC проверку, HTTP proxy-серверы, функцию вырезать-и-вставить, drag-and-drop, и может определять специфичные процедуры закачки файлов для отдельных веб-серверов.</p>
<h4>Freeloader</h4>
<p>Информация о пакете:</p>
<p style="border-left: 2px solid #eeeeee; margin-left: 40px; padding-left: 5px;">Freelaoder это приятный GNOME менеджер закачек написанный на Python и поддерживающий торентсы. Главными особенностями являются:</p>
<ul style="border-left: 2px solid #eeeeee; margin-left: 40px; padding-left: 20px;">
<li>поддержка BitTorrent файлов</li>
<li>управление через командую строку</li>
<li>Мониторинг файловой системы</li>
<li>Сортировка по статусу или прогрессу (процент уже закачанного)</li>
<li>Настройки сохраняются в GConf</li>
<li>Можно перетащить адреса файлов или torrent на окно программы или в трей</li>
<li>Поддерживает докачку для большинстваURLs (ftp,http и т.д.)</li>
<li>Возможность прятать программу в трей</li>
</ul>
<h4>KGet</h4>
<p style="border-left: 2px solid #eeeeee; margin-left: 40px; padding-left: 5px;">KGet это менеджер закачек подобный GetRight или Go!zilla. Он хранит все ваши скачивания в одном списке и вы можете добавлять и удалять закачки. Закачки можно прерывать, возобновлять, ставить в очередь или закачивать по расписанию. Диалоговые окна отображают информацию о статусе закачек &#8211; прогресс, размер, скорость и остающиеся время. Программа поддерживает drag &amp; drop из KDE приложений и Netscape.  Этот пакет является частью KDE, как компонент сетевого модуля KDE. Смотрите &#034;kde&#034; и &#034;kdenetwork&#034; пакеты чтобы узнать больше.</p>
<h4>Gwget</h4>
<p style="border-left: 2px solid #eeeeee; margin-left: 40px; padding-left: 5px;">Gwget представляет собой внешнюю графическую оболочку для популярного приложения wget для GNOME, с расширенными возможностями, такие как иконка в системном трее, многопоточные закачки и мощный менеджер настроек. Домашняя страница:  <a href="http://gnome.org/projects/gwget/" target="_blank">http://gnome.org/projects/gwget/</a></p>
<p>Это были всего лишь переведенные описания программ доступные перед закачкой. Перейдем к собственно сравнению.</p>
<p><strong>Во-первых</strong>, Aria, раз уж она стоит у нас первой в списке. Один из наиболее ярких примеров для всех дизайнеров интерфейсов о том, как не надо делать. Понимаю, что программа была разработана в далеком 2002 году, но даже тогда можно было сделать что-то более качественное в плане визуального оформления. Сейчас создается впечатление, что разработчики взяли всё самое плохое что есть в интерфейсах windows и воплотили в этом менеджере закачек. Вторым большим упущением программы я бы назвал невозможность работы с другими разделами диска, которые не относятся к файловой системе Linux. У меня пока еще наибольшее количество локальных дисков отведено под файловую систему NTFS.  Тем не менее, среди рассматриваемых вариантов этот менеджер имеет самый обширный функционал. В нем действительно есть возможность индивидуальной настройки закачки. К примеру, возможность скачивания через логин/пароль доступ к серверу, возможность тонкой настройки рекурсий для скачивания сайтов и файлов с FTP, регулировка глубины вложенности файлов при скачивании, сохранении структуры папок и т.п.</p>
<p>Другими словами, если  закрыть глаза на интерфейс и потратить часик на изучение возможного функционала, то это программа имеет место на существование, но лично я закрывать глаза не собираюсь <img src='http://kuaa.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/Aria.jpg"><img class="size-medium wp-image-112 alignnone" title="Aria" src="http://kuaa.ru/wp-content/uploads/2010/01/Aria-300x219.jpg" alt="" width="300" height="219" /></a></p>
<p><strong>Во-вторых, Kget.</strong> Как видно из описания, эта программа в первую очередь предназначена для KDE, а не GNOME интерфейса. По функционалу, конечно, уступает той же Aria, отсутствует возможность работать через proxy (по крайней мере я не нашел такой настройки), нельзя закачивать запароленные доступы, зато есть возможность настроить частоту сохранения закачиваемых файлов (если есть вероятность потери соединения, то эта функция достаточно полезна).</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/kget.jpg"><img class="alignnone size-medium wp-image-115" title="kget" src="http://kuaa.ru/wp-content/uploads/2010/01/kget-300x110.jpg" alt="" width="300" height="110" /></a></p>
<p><strong>Freeloader </strong>я бы назвал самым слабым звеном. Большинство из описанных возможностей не столь важны для полноценного менеджера закачек. Сколько я не пытался, докачивать файлы через эту программу у меня не получилось. Либо качаем, либо останавливаем. По функционалу не отличается от стандартных закачек встроенных в Firefox. Единственной особенностью является способность работать с торрент-файлами. Я ее не пробовал, но уверен что для торрентов все же лучше использовать более мощный инструмент, которые в изобилии представлены в стандартном репозитории.</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/freeloader.jpg"><img class="alignnone size-medium wp-image-113" title="freeloader" src="http://kuaa.ru/wp-content/uploads/2010/01/freeloader-300x194.jpg" alt="" width="300" height="194" /></a></p>
<p>И, наконец, <strong>Gwget</strong>. Настроек по минимуму, но все самые необходимые. Позволяет ограничивать скорость и количество закачек, можно настраивать соединение через proxy, управлять отображаемыми столбцами в списке скачиваемых файлов, и, если я не ошибаюсь, скачивать сайты. Интерфейс практически web 2.0  <img src='http://kuaa.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/gwget.jpg"><img class="alignnone size-medium wp-image-114" title="gwget" src="http://kuaa.ru/wp-content/uploads/2010/01/gwget-300x128.jpg" alt="" width="300" height="128" /></a></p>
<h4>Сравнительная таблица Download-менеджеров для Ubuntu</h4>
<table border="1" cellspacing="0" cellpadding="3">
<tbody>
<tr style="font-weight: bold;">
<td>Параметры</td>
<td align="center">Freeloader</td>
<td align="center">KGet</td>
<td align="center">Gwget</td>
<td align="center">Aria</td>
</tr>
<tr>
<td>Рассматриваемая версия</td>
<td align="center">0.3</td>
<td align="center">0.85</td>
<td align="center">0.99</td>
<td align="center">1.00</td>
</tr>
<tr>
<td>Русский язык интерфейса</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Работа с Torrent</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Возможность докачки прерванных файлов</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Возможность выкачивания сайтов</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Конфигурирование proxy</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Настройка отображаемых столбцов для закачиваемых файлов</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">-</td>
</tr>
<tr>
<td>разделение путей для закачиваемых и загруженных файлов</td>
<td align="center">+</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
</tr>
<tr>
<td>Регулирование количества одновременных закачек</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>регулирование скорости закачки</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">+</td>
</tr>
<tr>
<td>Возможность работать не только с дисками ext3</td>
<td align="center">+</td>
<td align="center">+</td>
<td align="center">+</td>
<td align="center">-</td>
</tr>
<tr>
<td>Возможность настроек тулбара</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">-</td>
<td align="center">-</td>
</tr>
<tr>
<td>Автовыключение после завершения закачек</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">-</td>
<td align="center">-</td>
</tr>
<tr>
<td>Импортирование в браузеры</td>
<td align="center">-</td>
<td align="center">+</td>
<td align="center">-</td>
<td align="center">-</td>
</tr>
<tr>
<td>Проверка MD5 и CRC</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
</tr>
<tr>
<td>Возможность закачки с не анонимным входом</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">+</td>
</tr>
</tbody>
</table>
<p>Лично для моих нужд вполне подошел Gwget.</p>
<p>Если в переводах, сравнительной таблице или просто тексте найдете неточность, отписывайтесь в коментах. Проверю и поправлю.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/H1EghUmrTJo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/choose-download-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kuaa.ru/choose-download-manager/</feedburner:origLink></item>
		<item>
		<title>Создание ленты новостей в CMS MODx с сортировкой по дате</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/gjWQcOVeTlQ/</link>
		<comments>http://kuaa.ru/sozdanie-lenty-novostej-v-cms-modx-s-sortirovkoj-po-date/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 17:51:38 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[CMS MODx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[мануал]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=92</guid>
		<description><![CDATA[Вопрос создания ленты новостей на сайте достаточно тривиален, но лично я не находил подробного описания по созданию новостей для CMS MODx. Естественно, что наиболее правильным вариантом является использования модуля Ditto, но иногда возникает задача сортировать новости не по дате создания, публикации, положению в меню, а по дате новости. Достаточно часто новости создаются с опозданием и [...]]]></description>
			<content:encoded><![CDATA[<p>Вопрос создания ленты новостей на сайте достаточно тривиален, но лично я не находил подробного описания по созданию новостей для CMS MODx. Естественно, что наиболее правильным вариантом является использования модуля Ditto, но иногда возникает задача сортировать новости не по дате создания, публикации, положению в меню, а по дате новости. Достаточно часто новости создаются с опозданием и необходимо вставить новость между уже опубликованных новостей или бывает, что дату новости нужно поменять.</p>
<p>О том, как создать ленту новостей с сортировкой по дате, введенной пользователем и пойдет речь.</p>
<p><span id="more-92"></span></p>
<p>Для этого нам потребуется модуль Ditto не ниже 2-ой версии (в нем есть параметры, которые отсутствовали в более ранних версиях).</p>
<h2>Шаблон для новостей</h2>
<p>Создадим шаблон для вывода подробной новости и присоединим к этому шаблону Template Variable.</p>
<p><strong>Ресурсы -&gt; Управление ресурсами-&gt; Вкладка «Шаблоны»-&gt;Новый шаблон</strong></p>
<p>По содержанию шаблон будет мало отличаться от шаблона внутренних страниц. Все зависит от желаемого отображения подробной новости.</p>
<p>У меня в шаблоне  место под подробную новость (контент) выглядит так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>Новости<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h5</span>&gt;</span>[*pagetitle*]<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h5</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">strong</span>&gt;</span>[[convertDate?MyDate=`[*tvdate*]`]]<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">strong</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content_news&quot;</span>&gt;</span>
[*#content*]
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;../&quot;</span>&gt;</span>Назад к списку новостей<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Пусть шаблон будет называться «Новости». Просто и понятно, а про сниппет convertDate поговорим чуть позже.</p>
<p>Можно вообще не создавать отдельный шаблон для новостей, но в таком случае TV для даты будет присутствовать и в тех документах, где он может и не требоваться.</p>
<h2><strong>Template Variable </strong><strong>для даты новости</strong></h2>
<p>Переходим:</p>
<p><strong>Ресурсы -&gt; Управление ресурсами-&gt; Вкладка «Параметры (</strong><strong>TV)»-&gt;Новый параметр (</strong><strong>TV)</strong></p>
<p>В имени параметра обязательно вводим название date, заголовок заполняем по своему вкусу, тип ввода ставим Date (При выборе даты будет отображаться удобное всплывающее окошко для работы с датой), визуальный компонент обязательно ставим Unixtime (по нему мы и будем сортировать в дальнейшем).</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/image001.png"><img class="aligncenter size-medium wp-image-93" title="image001" src="http://kuaa.ru/wp-content/uploads/2010/01/image001-300x246.png" alt="" width="300" height="246" /></a></p>
<h2><strong>Создание папки для хранения новостей</strong></h2>
<p>Создадим документ-каталог, в котором будем хранить наши новости:</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/image003.png"><img class="aligncenter size-medium wp-image-95" title="image003" src="http://kuaa.ru/wp-content/uploads/2010/01/image003-300x222.png" alt="" width="300" height="222" /></a></p>
<p>Осталось последнее действие в этой части, а именно вывод списка новостей. В месте для контента вводим вызов Ditto следующего содержания.</p>
<p><strong>[[Ditto? &amp;startID=`18` &amp;tpl=`news_list` &amp;sortDir=`DESC` &amp;summarize=`20` &amp;sortBy=`date` ]]</strong></p>
<p>startID  - номер документа, откуда будем брать новости (у нас папка «Новости»)</p>
<p>tpl – название чанка для вывода одной новости</p>
<p>sortDir – сортировка по убыванию или возрастанию (у нас по убыванию)</p>
<p>summarize – количество новостей, выводимых на странице</p>
<p>sortBy – сортируем по нашему TV date</p>
<h2><strong>Создание новостей</strong></h2>
<p>А теперь перейдем собственно к созданию новостей. Создаем дочерний документ для только что созданного документа-каталога «Новости». Для этого нажмем правой кнопкой мыши на иконку возле названия каталога и выберем «Дочерний документ».</p>
<p>В новом созданном документе применим следующие манипуляции:</p>
<ol>
<li><a href="http://kuaa.ru/wp-content/uploads/2010/01/image005.png"><img class="alignright size-medium wp-image-97" title="image005" src="http://kuaa.ru/wp-content/uploads/2010/01/image005-234x300.png" alt="" width="234" height="300" /></a>В поле «Заголовок» вводим название новости</li>
<li>В поле «Аннотация» вводим краткое содержание новости</li>
<li>в поле «Шаблон» выбираем наш шаблон для новостей «Новости»</li>
<li>В содержании документа вводим саму новость. Можно добавлять изображения и всячески оформлять в соответствии со стилями сайта.</li>
<li>В дополнительном поле дату новости через кнопку  <a href="http://kuaa.ru/wp-content/uploads/2010/01/image007.png"><img class="alignnone size-full wp-image-99" title="image007" src="http://kuaa.ru/wp-content/uploads/2010/01/image007.png" alt="" width="13" height="16" /></a> Как раз по этому полю и будем сортировать наши новости в списке.</li>
<li>Сохраняем наши изменения</li>
</ol>
<p>По такому алгоритму и будем и создавать все наши новости. Естественно, не будем забывать, наши новости еще нужно и опубликовывать. Либо при нажатии правой кнопкой мыши на иконку рядом с новостью и выбрав в контекстном меню пункт «Опубликовать», либо при редактировании на вкладке «Настройки страницы» задать время публикации (и время снятия с публикации, если это Вам необходимо).</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/image009.png"><img class="aligncenter size-medium wp-image-100" title="image009" src="http://kuaa.ru/wp-content/uploads/2010/01/image009-178x300.png" alt="" width="178" height="300" /></a></p>
<h2><strong>Создание чанка вывода одной новости в списке</strong></h2>
<p>Все зависит от верстки вашего сайта, а я приведу пример своего чанка.</p>
<p>Переходим в раздел <strong>Ресурсы -&gt; Управление Ресурсами -&gt; Чанки -&gt; Новый чанк</strong></p>
<p>Даем название чанку, к примеру, <strong>news_</strong><strong>tpl</strong></p>
<p>Содержание у меня такое:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span>”news_title”&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/[~[+id+]~]&quot;</span>&gt;</span>[+pagetitle+]<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span>”news_date”&gt;</span> [[convertDate?MyDate=`[+tvdate+]`]]<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>[+introtext+]<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Наибольший интерес здесь, конечно же, представляет строчка <strong>[[convertDate?MyDate=`[+tvdate+]`]] </strong>. В ней мы вызываем специально написанный сниппет для конвертации даты в более читабельный вид. Параметром MyDate передаем текущую дату новости в списке новостей.</p>
<h2><strong>Создание сниппета для новости</strong></h2>
<p><strong>Идем Ресурсы –&gt; Управление Ресурсами –&gt; Сниппеты –&gt; Новый Сниппет</strong></p>
<p>Назовем сниппет convertDate и содержание у него такое:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$monthes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'января'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'февраля'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'марта'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'апреля'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'мая'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'июня'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'июля'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'августа'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'сентября'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'октября'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'ноября'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'декабря'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$day</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;j&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$MyDate</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$monthes</span><span style="color: #009900;">&#91;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;n&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$MyDate</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$year</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$MyDate</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$day</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">.</span><span style="color: #000088;">$month</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">.</span><span style="color: #000088;">$year</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' года'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Простейший PHP-код по преобразованию даты. Создаем массив названий месяцев в родительном падеже, пропуская при этом нулевой элемент. Далее просто выводим дату в виде строки.</p>
<p>Выглядеть это будет примерно так.</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/image011.png"><img class="aligncenter size-medium wp-image-102" title="image011" src="http://kuaa.ru/wp-content/uploads/2010/01/image011-259x300.png" alt="" width="259" height="300" /></a></p>
<p>Вот и всё. Список новостей готов. Сюда также можно добавить добавление новостей из разных папок. (если у вас идет деление новостей по разделам), добавив в параметр startID через запятую ID документов-папок с новостями.</p>
<p>Еще можно, а чаще всего даже нужно, создать переход по страницам для вывода новостей, но об этом уже в другой раз.</p>
<p>Ранее это статья публиковалась на <a href="http://habrahabr.ru/blogs/modx/37566/" target="_blank">хабре</a> и сайте <a href="http://www.modx-cms.ru/dokumentatsiya/razrabotka/gotovye-resheniya/sozdanie-lenty-novostey-v-cms-modx-s-sortirovkoy-po-date.html" target="_blank">русского сообщества CMS MODx</a>.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/gjWQcOVeTlQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/sozdanie-lenty-novostej-v-cms-modx-s-sortirovkoj-po-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/sozdanie-lenty-novostej-v-cms-modx-s-sortirovkoj-po-date/</feedburner:origLink></item>
		<item>
		<title>Склонение слов и правильная запись времени в виде текста</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/_JOtia5pUBo/</link>
		<comments>http://kuaa.ru/sklonenie-slov-i-pravilnaya-zapis-vremeni-v-vide-teksta/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 16:26:42 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[дата и время]]></category>
		<category><![CDATA[строки и числа]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=83</guid>
		<description><![CDATA[Необходимость правильно склонять слова существует практически на любом сайте, хотя бы для отображения времени. В этой статье я предоставлю две небольшие функции, позволяющие склонять слова, а также функцию преобразующую время в виде unix_timestamp в читабельный формат.
Честно сказать, функция склонения слов была где-то мной взята из просторов интернета, то это было так давно, что я уже [...]]]></description>
			<content:encoded><![CDATA[<p>Необходимость правильно склонять слова существует практически на любом сайте, хотя бы для отображения времени. В этой статье я предоставлю две небольшие функции, позволяющие склонять слова, а также функцию преобразующую время в виде unix_timestamp в читабельный формат.</p>
<p>Честно сказать, функция склонения слов была где-то мной взята из просторов интернета, то это было так давно, что я уже не помню откуда и кто автор данной функции.<br />
<span id="more-83"></span></p>
<h2>Склонение слов</h2>
<p>функция принимает целых три параметра, хотя третий и не является обязательным. В первом мы передаем само число, во втором параметре массив из трех элементов содержащий три вариации написания склоняемого слова, а в третьем параметре задаем флаг отображения числа. Если параметр стоит true, то будет выводится само число в результате работы функции, иначе выведется просто нужное склонение.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> declension<span style="color: #009900;">&#40;</span><span style="color: #000088;">$int</span><span style="color: #339933;">,</span> <span style="color: #000088;">$expressions</span><span style="color: #339933;">,</span> <span style="color: #000088;">$showint</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;">&#123;</span>
    <span style="color: #990000;">settype</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$int</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;integer&quot;</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: #000088;">$int</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">5</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$showint</span>? <span style="color: #000088;">$int</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$expressions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'2'</span><span style="color: #009900;">&#93;</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;">$count</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">%</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$showint</span>? <span style="color: #000088;">$int</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$expressions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'0'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$count</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$showint</span>? <span style="color: #000088;">$int</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$expressions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#93;</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;">$result</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$showint</span>? <span style="color: #000088;">$int</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">:</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #000088;">$expressions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'2'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Для примера рассмотрим такой вызов:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Ваш заказ на '</span><span style="color: #339933;">.</span>price_format<span style="color: #009900;">&#40;</span><span style="color: #000088;">$total_price</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">.</span>declension<span style="color: #009900;">&#40;</span><span style="color: #000088;">$total_price</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'рубль'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'рубля'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'рублей'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'.'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Как видите, все просто, более того, я применил еще и функцию правильного отображения чисел из <a title="Удобочитаемые цены" href="http://kuaa.ru/2010/delaem-udobochitaemye-ceny-v-kataloge/" target="_self">предыдущей статьи</a>. Они отлично сочетаются вместе.</p>
<h2>Вывод времени в текстовом формате</h2>
<p>Я всегда храню дату в базе в формате unix_timestamp, т.к. это позволяет производить математические операции со временем, а также сравнивать даты. Но выводить все же стоит более удобным способом чем в виде date(&#039;H:i:s&#039;,$date); , хотя этот вариант иногда тоже подходит.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mk_myTime<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tonpage</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: #000088;">$tonpage</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$h</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tonpage</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//часы</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$pos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000088;">$h</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #000088;">$pos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$timenothour</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tonpage</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$m</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$timenothour</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">60</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//минуты</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$pos</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000088;">$m</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #000088;">$pos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$sec</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$timenothour</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">60</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//секунды</span>
    <span style="color: #000088;">$s</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$s</span> <span style="color: #339933;">=</span> declension<span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;час&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;часа&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;часов&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$s</span> <span style="color: #339933;">.=</span> declension<span style="color: #009900;">&#40;</span><span style="color: #000088;">$m</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;минуту&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;минуты&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;минут&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$s</span> <span style="color: #339933;">.=</span> declension<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sec</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;секунду&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;секунды&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;секунд&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Эта функция принимает один параметр &#8211; время в формате unix_timestamp. Она также использует предыдущую функцию declension для склонения часов минут и секунд.</p>
<p>Надеюсь, эти функции кому-нибудь для пригодятся.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/_JOtia5pUBo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/sklonenie-slov-i-pravilnaya-zapis-vremeni-v-vide-teksta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/sklonenie-slov-i-pravilnaya-zapis-vremeni-v-vide-teksta/</feedburner:origLink></item>
		<item>
		<title>Делаем удобочитаемые цены в каталоге</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/V77hdJCksqw/</link>
		<comments>http://kuaa.ru/delaem-udobochitaemye-ceny-v-kataloge/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 21:49:58 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[строки и числа]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=78</guid>
		<description><![CDATA[Создавая каталоги товаров важно уделять внимание удобству восприятия цен на товары. Согласитесь, что достаточно сложно прочитать число 89433034, куда приятнее визуально отделить  тысячи от сотых, миллионы от тысяч, миллиарды от&#8230; впрочем, я пока не встречал в своей практике товары, стоимостью выше миллионов =). Тем не менее, нужно помнить о посетителях и создавать все условия для [...]]]></description>
			<content:encoded><![CDATA[<p>Создавая каталоги товаров важно уделять внимание удобству восприятия цен на товары. Согласитесь, что достаточно сложно прочитать число 89433034, куда приятнее визуально отделить  тысячи от сотых, миллионы от тысяч, миллиарды от&#8230; впрочем, я пока не встречал в своей практике товары, стоимостью выше миллионов =). Тем не менее, нужно помнить о посетителях и создавать все условия для покупки.</p>
<p>Хочу предложить две маленькие, но очень полезные функции на php и javascript, позволяющие автоматически преобразовывать числа в удобочитаемую строку. Другими словами превратить из 89433034 в 89 433 034.</p>
<p><span id="more-78"></span>Цены и просто числа удобнее хранить в базе в полях типа INT или FLOAT, т.к. это позволяет легко ими управлять и производить математические операции, а вот выводить на сайте их стоит разделяя пробелами, а есть быть точнее неразрывными пробелами &amp;nbsp;</p>
<p>Первая функция на php создана для того, чтобы генерировать контент и сразу выводить его на страницу, полезна при отображении цен для товаров.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> price_format<span style="color: #009900;">&#40;</span><span style="color: #000088;">$price</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$point</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strcspn</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$price</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$pr</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$price</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: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$n</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$n</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$point</span><span style="color: #339933;">;</span> <span style="color: #000088;">$n</span><span style="color: #339933;">++</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: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$point</span><span style="color: #339933;">-</span><span style="color: #000088;">$n</span><span style="color: #009900;">&#41;</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: #009900;">&#40;</span><span style="color: #000088;">$point</span><span style="color: #339933;">-</span><span style="color: #000088;">$n</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$pr</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pr</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&amp;nbsp;&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$pr</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pr</span><span style="color: #339933;">.</span><span style="color: #000088;">$price</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$n</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$pr</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Вторая функция на javascript полезна в случаях когда Вы используете на своем сайте AJAX запросы, к примеру, в корзине заказов для удобного изменения количества покупаемых товаров, а следовательно, и итоговой цены товара.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> price_format<span style="color: #009900;">&#40;</span>price<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    point <span style="color: #339933;">=</span> price.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
    pr <span style="color: #339933;">=</span> price.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>n<span style="color: #339933;">=</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> n<span style="color: #339933;">&lt;</span>point<span style="color: #339933;">;</span> n<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>point<span style="color: #339933;">-</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span>point<span style="color: #339933;">-</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span> pr <span style="color: #339933;">=</span> pr <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&amp;nbsp;&quot;</span><span style="color: #339933;">;</span>
            pr <span style="color: #339933;">=</span> pr <span style="color: #339933;">+</span> price.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> pr<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>В обоих случаях функции принимают только один параметр &#8211; цену в числовом формате.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/V77hdJCksqw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/delaem-udobochitaemye-ceny-v-kataloge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/delaem-udobochitaemye-ceny-v-kataloge/</feedburner:origLink></item>
		<item>
		<title>Создание вложенных директорий на основе пути</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/mA2wmPHzZh4/</link>
		<comments>http://kuaa.ru/sozdanie-direktorii-na-osnove-puti/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 21:14:59 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[директории]]></category>
		<category><![CDATA[функции]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=69</guid>
		<description><![CDATA[Довольно часто приходится при разработке сайтов создавать иерархию каталогов. К примеру, если необходимо раскладывать загружаемые изображения по различным каталогам на основе даты или названий рубрик. В случае, если создается одна директория, то хватает обычного mkdir(). Но что делать, когда нужно создать сразу несколько вложенных директорий и не забыть про проверки.
В этом случае поможет следующая функция:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function [...]]]></description>
			<content:encoded><![CDATA[<p>Довольно часто приходится при разработке сайтов создавать иерархию каталогов. К примеру, если необходимо раскладывать загружаемые изображения по различным каталогам на основе даты или названий рубрик. В случае, если создается одна директория, то хватает обычного mkdir(). Но что делать, когда нужно создать сразу несколько вложенных директорий и не забыть про проверки.</p>
<p><span id="more-69"></span>В этом случае поможет следующая функция:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> rmkdir<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #000088;">$mode</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0777</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;">rtrim</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\\</span>/&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/\/{2,}/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$e</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">ltrim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/&quot;</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: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$e</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: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$e</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: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$cp</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$e</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: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</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: #990000;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cp</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!@</span><span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$mode</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$cp</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$e</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #339933;">@</span><span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #000088;">$mode</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>В этой функции всё достаточно просто. Функция получает два параметра: перечень вложенных каталогов (к примеру, /images/category1/2010/01/09/) и права на создаваемые директории.  По умолчанию права стоят в 777, однако, если Ваш сайт работает в режиме mod_fcgi, то этот параметр стоит поставить в 755.</p>
<p>В начале функция очишает полученный путь от лишних пробелов и не нужных символов, разбивает путь на массив, где в одном элементе содержится одно название директории. Далее в цикле бегает по массиву, где проверяет является ли данный элемент массива директорией, а также пытается создать директорию, если она еще не создана.</p>
<p>Вот собственно и всё, просто и быстро создаем директории не задумываясь о том, существует ли она уже или нет.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/mA2wmPHzZh4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/sozdanie-direktorii-na-osnove-puti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/sozdanie-direktorii-na-osnove-puti/</feedburner:origLink></item>
		<item>
		<title>Добавление своих страниц в панель управления CMS MODx</title>
		<link>http://feedproxy.google.com/~r/andrey-kuzmin/~3/6_oo58h8LlA/</link>
		<comments>http://kuaa.ru/my-admin-pages-in-modx/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 23:34:43 +0000</pubDate>
		<dc:creator>Chips</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[CMS MODx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://kuaa.ru/?p=16</guid>
		<description><![CDATA[Хотя сейчас моя основная работа не связана с разработкой сайтов на PHP и уж тем более с MODx, иногда ко мне все же обращаются друзья с просьбой помочь им с их сайтом. Хочу рассказать о том, как создавать собственные административные страницы в набирающей популярность бесплатной CMS MODx.  Это бывает очень полезно, когда необходимо добавить дополнительную [...]]]></description>
			<content:encoded><![CDATA[<p>Хотя сейчас моя основная работа не связана с разработкой сайтов на PHP и уж тем более с MODx, иногда ко мне все же обращаются друзья с просьбой помочь им с их сайтом. Хочу рассказать о том, как создавать собственные административные страницы в набирающей популярность бесплатной CMS MODx.  Это бывает очень полезно, когда необходимо добавить дополнительную функциональность админке или реализовать что-то совершенно новое.</p>
<p>Рассмотрим не полный, но конкретный пример для одного из последних сайтов, который я сделал своим друзьям <a href="http://www.tangoicash.ru" target="_blank">группе Танго и Кэш</a>. Под не полным я имею ввиду, что не буду показывать исходного кода самих страниц. А реализовывать мы будем счетчик скачиваний для музыки, видео и всего остального, что только захотим посчитать.</p>
<p><span id="more-16"></span>Сразу скажу что пример буду показывать на примере MODx 0.9.6.3, но аналогичные действия позволят Вам создать собственные страницы и на последней версии CMS.</p>
<p>Для начала создадим файл-экшн который будет отображаться при открытии страницы в админке. Для этого в директории manager/actions/ cоздадим свой файл с названием download.counter.php. В отличии от многих фреймворков здесь не имеет значения как будет называться файл, поэтому, при желании, можно сделать название любым. Поместим в этот файл следующий код:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>IN_MANAGER_MODE<span style="color: #339933;">!=</span><span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;b&gt;INCLUDE_ORDERING_ERROR&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Please use the MODx Content Manager instead of accessing this file directly.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$base</span> <span style="color: #339933;">=</span> MODX_SITE_URL<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Это стандартное начало практически всех экшенов в MODx. После третьей строчки кода можно уже добавлять свой содержание, но об этом позже.</p>
<p>Теперь нам нужно добавить информарцию о новом экшене в меню, для этого необходимо в файле manager/index.php добавить свой case-обработчик и придумать нашей странице идентификатор. Выбирать идентификатор можно любой не занятый, но если Вы планируете в будущем обновлять свою версию MODx, то лучше заведомо взять очень большое число.</p>
<p>Пример кода manager/index.php</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>914
915
916
917
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">666</span><span style="color: #339933;">:</span>
 <span style="color: #666666; font-style: italic;">//download counter</span>
 <span style="color: #b1b100;">include_once</span> <span style="color: #0000ff;">&quot;actions/download.counter.php&quot;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Как видите, я взял достаточно красивый и запоминающийся идентификатор для своего экшена 666 <img src='http://kuaa.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Следующий шаг наших действий &#8211; добавить название кнопки в словарь. В зависимости от того, на каком языке у Вас работает сайт и админка MODx, необходимо добавить новый элемент в массив $_lang. Я всегда использую вариант Russian-UTF8 и править буду соответсвующий файл manager/includes/lang/russian-UTF8.inc.php. Добавлю в него упоминание о моей кнопке:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1008
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$_lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'counter'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Счетчик скачиваний'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Именно этот текст будет на кнопке в панели управления.</p>
<p>Теперь осталось только добавить саму кнопку на панель, делается это в файле manager/frames/menu.php. В зависимости от того, в какой раздел Вы хотите поместить кнопку, нужно будет добавить код в соответствующий участок кода. Я добавил кнопку в главный раздел &#034;Сайт&#034; в самый конец:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>246
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$sitemenu</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;li&gt;&lt;a onclick=&quot;this.blur();&quot; href=&quot;index.php?a=666&quot; target=&quot;main&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$_lang</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'counter'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/a&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Вот и всё. Как видите, в атрибуте href мы задаем параметр ?a=666, где число и есть идентификатор экшена, который мы указали в файле manager/index.php. После обновления страницы в админке Вы увидите свою кнопку.</p>
<p><a href="http://kuaa.ru/wp-content/uploads/2010/01/modxmenu.jpg"><img class="aligncenter size-medium wp-image-63" title="modxmenu" src="http://kuaa.ru/wp-content/uploads/2010/01/modxmenu-300x27.jpg" alt="" width="300" height="27" /></a></p>
<p>Таким способом можно создавать сколько угодно страниц и расширять бесконечно функциональность админки, все зависит от Ваших потребностей и навыков программирования.</p>
<p>Если есть у читателей интерес, я могу написать про то, как создавался счетчик скачиваний для сайта Танго и Кэш и как он работает.</p>
<img src="http://feeds.feedburner.com/~r/andrey-kuzmin/~4/6_oo58h8LlA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kuaa.ru/my-admin-pages-in-modx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kuaa.ru/my-admin-pages-in-modx/</feedburner:origLink></item>
	</channel>
</rss>
