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

<channel>
	<title>Seleckis.lv :: журнал Никиты Селецкого &#187; PHP</title>
	<atom:link href="http://seleckis.lv/category/journal/journal-php/feed" rel="self" type="application/rss+xml" />
	<link>http://seleckis.lv</link>
	<description></description>
	<lastBuildDate>Tue, 08 Feb 2011 13:52:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CodeIgniter &#8212; framework для новичков</title>
		<link>http://seleckis.lv/journal/journal-php/codeigniter-8212-framework-dlya-novichkov</link>
		<comments>http://seleckis.lv/journal/journal-php/codeigniter-8212-framework-dlya-novichkov#comments</comments>
		<pubDate>Tue, 09 Oct 2007 21:03:53 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/journal-php/codeigniter-8212-framework-dlya-novichkov</guid>
		<description><![CDATA[
Framework CodeIgniter я выбрал для изучения, потому что он оказался наиболее простым в изучении и менее болезненным в оклиматизации, после опыта голого php-программирования. Поскольку кроме php, я не знаю ниодного сервеного скриптового языка (не считая пройденых ознакомительных туториалов по ruby и python), то для повышения квалификации web-программиста на выбор встали только php-framework&#8216;и. Не буду рассказывать [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.seleckis.lv/wp-content/uploads/2007/10/ci_logo_flame.jpg" /></p>
<p>Framework <a href="http://codeigniter.com/" target="_blank"><strong>CodeIgniter </strong></a>я выбрал для изучения, потому что он оказался наиболее простым в изучении и менее болезненным в оклиматизации, после опыта голого <em>php</em>-программирования. Поскольку кроме <em>php</em>, я не знаю ниодного сервеного скриптового языка (не считая пройденых ознакомительных туториалов по <em>ruby </em>и <em>python</em>), то для повышения квалификации <em>web</em>-программиста на выбор встали только <em>php-framework</em>&#8216;и. Не буду рассказывать из чего я выбирал, если написать в поисковике <em>«php framework»</em> — сами найдёте, какие они бывают.</p>
<p><span id="more-892"></span></p>
<p>Скажу лишь, <strong>по каким критериям</strong> я выбирал:</p>
<ul>
<li>Всё на <em>php</em>. Без своего шаблонного парсинга</li>
<li>Без излишних специфических особенностей синтаксиса</li>
<li>Гибкость (читай «нестрогость»)</li>
<li>Совместимость с большенством хостингов</li>
<li>Без заморочек с конфигурацией</li>
<li>Высокая скорость работы</li>
<li>Rewrite engine</li>
<li><em>Userfriendly </em>для не слишком глубоко знающих php</li>
<li>Полная и понятная документация</li>
</ul>
<p><strong>CodeIgniter </strong>подходит по всем параметрам.</p>
<h3>Хостинг</h3>
<ul>
<li><a href="http://www.php.net/">PHP</a> версии 4.3.2 или выше</li>
<li>База занных (MySQL, MySQLi, MS SQL, Postgre, Oracle, SQLite, ODBC)</li>
</ul>
<h3>Скорость работы</h3>
<p>Разработчики заявляют, что очень немногие <em>framework</em>&#8216;и могут сравниться с <strong>CodeIgniter </strong>по скорости. В большем случае из-за динамического подключения встроеных классов и библиотек, и опять же, без лишних заморочек со всякими <em>yaml</em>-файлами, определяющими структуру базы данных.</p>
<h3>M-V-C</h3>
<p><strong>CodeIgniter</strong> использует ставший уже стандартом <strong>«Model-View-Controller»</strong> подход, который позволяет разделить логическое формирование и обработку данных от их представления. В принципе, не мне вам всем объяснять для чего это нужно и думаю не нужно перечислять плюсы при работе над web-приложением в команде.</p>
<p style="text-align: center"><img src="http://www.seleckis.lv/wp-content/uploads/2007/10/appflowchart.gif" /></p>
<p>Плюс <strong>CodeIgniter </strong>в нестрогом соблюдении этого метода, поскольку компонент <strong>Model </strong>предназначен не только для работы с базой, но и для любых манипуляций с данными. Можно рассматривать <strong>Model</strong>, как функциональную составляющую, а <strong>Controller</strong>, как процедурную. Таким образом можем условно определить <em>framework</em>, как систему использующую смешанный (процедурно-функционально-объектно-ориентированный) вид программирования.</p>
<p>Компонент <strong>View</strong>, для отображения данных не использует никаких своих скриптов псевдокодов и псевдотэгов. <strong>Controller </strong>передаёт в  компонент <strong>View </strong>набор переменных для манипуляции, которые отображаются средствами php.</p>
<h3>mod_rewrite — модная_перезапись</h3>
<p>Нынче адреса, написаные почти человеческим языком не просто модны, но и важны в индексации. Разработчики CodeIgniter просто включили эту функциональность по-умолчанию, никого не спрашивая. Единственное, что нужно будет настроить в конфигурации — показывать <em>index.php</em> или нет.</p>
<p>URL-адрес выглядит примерно так:</p>
<p><code>www.your-site.com/<var>controller</var>/<dfn>function</dfn>/<samp>somevar</samp></code></p>
<p>Логика url-ов здесь проста и понятна:</p>
<ul>
<li>первый сегмент — имя контроллера (как правило, это имя класса и файла контроллера)</li>
<li>второй сегмент — имя функции в контроллере (если сегмент не указан, обращение идёт к базовой функции контроллера — <em>index</em>)<code><samp></samp></code></li>
<li>третий, четвёртый, пятый и т. д. — просто сегменты, которые могут быть прочитаны встроеным методом</li>
</ul>
<p>Не нравится такая последовательность? Пожалуйста, можете переписать с помощью <em>routing</em> — php-файла, в котором записывается настройка переадресации url-адресов.</p>
<h3>Работа с базой данных</h3>
<p>А здесь я долго смеялся, когда читал документацию посвящённую работой с базами данных. Дело в том, что язык SQL и так весьма лаконичен и понятен, что изобретать что-то новое по-моему нет смысла. Так же решили и разработчики, предоставив такое решение для работы с базами данных:</p>
<p><code>$this-&gt;db-&gt;select('title, content, date');<br />
$this-&gt;db-&gt;from('mytable');<br />
$this-&gt;db-&gt;where('date &lt;', $now);<br />
$this-&gt;db-&gt;where('title', $title);</code></p>
<p><code>$query = $this-&gt;db-&gt;get();</code></p>
<p><code>// Получаем: SELECT title, content, date FROM mytable WHERE date &lt; '2007-10-10 12:03' AND title = 'WTF?';</code></p>
<p>Из кода думаю всё понятно.</p>
<p><strong>Примечание:</strong> как мне нравится обращение к функциям классов! Только гляньте:</p>
<p><code><br />
$this-&gt;load-&gt;model('My_model'); // загрузка Model<br />
$result = $this-&gt;db-&gt;get(); // получение данных из базы<br />
$myvar = $this-&gt;uri-&gt;segment(3); // получение значения третьего сегмента url-адреса</code></p>
<p>И тому подобные обращения.</p>
<h3>Документация</h3>
<p>Документация описывает почти все особености работы с системой, встроеными классами, библиотеками, хелперами. Весьма подробная и написаная понятным английским языком с примерами. Кроме того, существует <em>wiki</em>-документация, которая содержит ньюансы подключения и работы плагинов и внешних библиотек. Ну и куда же без форума.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/journal-php/codeigniter-8212-framework-dlya-novichkov/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Как объяснить блондинке объектно-ориентированное программирование?</title>
		<link>http://seleckis.lv/journal/fun/kak-obyasnit-blondinke-obektno-orientirovannoe-programmirovanie</link>
		<comments>http://seleckis.lv/journal/fun/kak-obyasnit-blondinke-obektno-orientirovannoe-programmirovanie#comments</comments>
		<pubDate>Tue, 18 Sep 2007 18:31:47 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Развлекуха]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/kak-obyasnit-blondinke-obektno-orientirovannoe-programmirovanie</guid>
		<description><![CDATA[На примере php. Подразумевается, что самые азы программирования блондинка знает.
Действующие лица:

Преподаватель (П.)
Блондинка (Б.)

Диалог
П.: Сейчас я тебе объясню принцип объектно-ориентированного программирования
Б.: Ну даю&#8230; ой&#8230; хи-хи, то есть дааавате, объясняйте.
П.: Ну так вот. Представь себе, что ты пошла в какой-нибудь магазин&#8230;
Б.: Ещё б скааазали &#8220;гастраааном&#8221;. (скривила лицо) Я в бутики толька хааажу.
П.: Ну хорошо, зашла ты в [...]]]></description>
			<content:encoded><![CDATA[<p><em>На примере php. Подразумевается, что самые азы программирования блондинка знает.</em></p>
<p><strong>Действующие лица:</strong></p>
<ul>
<li>Преподаватель (П.)</li>
<li>Блондинка (Б.)</li>
</ul>
<h3>Диалог</h3>
<p><strong>П.:</strong> Сейчас я тебе объясню принцип объектно-ориентированного программирования<br />
<strong>Б.:</strong> Ну даю&#8230; ой&#8230; хи-хи, то есть дааавате, объясняйте.<br />
<strong>П.:</strong> Ну так вот. Представь себе, что ты пошла в какой-нибудь магазин&#8230;<br />
<strong>Б.:</strong> Ещё б скааазали &#8220;гастраааном&#8221;. <em>(скривила лицо)</em> Я в бутики толька хааажу.<br />
<strong>П.:</strong> Ну хорошо, зашла ты в бутик. И увидела там шубу.<br />
<strong>Б.:</strong> норкаваю!<br />
<strong>П.:</strong> Да, норковую! И захотела купить. Шуба &#8211; это объект, который ты хочешь купить. А вообще Шубы &#8211; это класс объектов. В этом классе могут быть различного вида шубы от искуственного меха до соболя. В коде это можно написать:<br />
<code><br />
class Shubi {<br />
public $tip;<br />
}<br />
</code></p>
<p>, где public означает, что кто угодно может узнать какой тип шубы ты купила.<br />
<strong>Б.:</strong> Кто угодна? И даже Танька Синявская?<br />
<strong>П.:</strong> Ну если Танька Синявская приедет и увидит твою шубу, то да.<br />
Значит ты хочешь купить объект, т.е. шубу, которая принадлежит классу &#8220;Шубы&#8221;. Чтобы это было так, нужно написать:<br />
<code><br />
var $shuba1 = new Shubi();<br />
</code></p>
<ul>
<li>var &#8211; это типа &#8220;ХАЧУ&#8221;;</li>
<li>new &#8211; это типа &#8220;купить новую&#8221;</li>
</ul>
<p><strong>Б.:</strong> А пачиму <strong>shuba1</strong>?<br />
<strong>П.:</strong> Ну а ты разве одну шубу только купишь?<br />
<strong>Б.:</strong> А, ну дааа&#8230; <em>(делает вид, что понимает)</em> А, что, я так вот сразу куплю шубу без примерки?<br />
<strong>П.:</strong> Конечно нет. Всё верно. У шубы есть свойства, например, <strong>размер</strong>. Добавим в класс <strong>Shubi </strong>это свойство, а потом укажем, какой размер у этой шубы. В итоге код у нас получается такой:<br />
<code><br />
class Shubi{<br />
public $tip;<br />
public $razmer;<br />
}<br />
$shuba1 = new Shubi;<br />
$shuba1-&gt;tip = "norka";<br />
$shuba1-&gt;razmer = 53;<br />
</code></p>
<p><strong>Б.:</strong> Я что толстая тааакая? У меня Соракдивяяятый рааазмер!<br />
<strong>П.:</strong> Ну хорошо, хорошо. Размер 49. Дальше: Купив шубу, задали её размер. А размер &#8211; это свойство объекта. И для расчётов можем его получить написав:<br />
<code><br />
$razmer_shubi = $shuba1-&gt;razmer;<br />
</code></p>
<p>т.е. если мы хотим узнать, чему равно какое-нибудь свойство, то нам нужно написать имя объекта, добавить такую стрелочку &#8220;-&gt;&#8221; и написать свойство объекта.<br />
<strong>Б.:</strong> Ну паняла, не дура я. <em>(надулась)</em><br />
<strong>П.:</strong> Замечательно! Ну, а после того как ты купила шубу, что ты сделаешь?<br />
<strong>Б.:</strong> Нааадену и паеду пааадружкам хвастать.<br />
<strong>П.:</strong> Ага, значит оденешь. Значит совершишь действие. Значит это мы напишем так:<br />
<code><br />
$shuba1-&gt;odetj();<br />
</code></p>
<p>Что означает, что ты одела шубу. Это называется <strong>метод</strong> и записывается этот метод в классе в виде функции:<br />
<code><br />
class Shubi{<br />
public $tip;<br />
public $razmer;<br />
function odetj(){<br />
return true;<br />
}<br />
}<br />
</code></p>
<p><strong>Б.:</strong> А зааачем <strong>odetj </strong>со скобочкамиии?<br />
<strong>П.:</strong> А в скобочки записываются параметры действия. Вдруг ты захочешь одеть её задом на перёд.<br />
<strong>Б.:</strong> Я что, дура что лиии?<br />
<strong>П.:</strong> Да.<br />
<strong>Б.:</strong> Чтооо? <em>(в глазах ярость, рука воинственно поднялась, сверкнув ногтями)</em><br />
<strong>П.:</strong> Ой, в смысле, да нет, конечно. Например, ты не захочешь застёгивать её совсем, а оставить пару пуговичек растёгнутыми.<br />
<strong>Б.:</strong> Ааа, ну ладно. Ааа, как это записать?<br />
<strong>П.:</strong> ну, например, так:<br />
<code><br />
$shuba-&gt;odetj(2);<br />
</code></p>
<p><strong>Б.:</strong> Что значит &#8220;напримееер&#8221;? Может быть подругомууу?<br />
<strong>П.:</strong> Может. Это зависит от того как описать класс <strong>Shubi</strong>.<br />
<strong>Б.:</strong> Бааалин, ещё это в  <strong>Shubi </strong>записывать!<br />
<strong>П.:</strong> Ну да, смотри:<br />
<code><br />
class Shubi{<br />
public $tip;<br />
public $razmer;<br />
function odetj($pugovici){<br />
return $pugovici;<br />
}<br />
}<br />
</code></p>
<p>у всех шуб, есть каие-то определённые свойства: размер, цвет&#8230;<br />
<strong>Б.:</strong> Цвет может быть разный.<br />
<strong>П.:</strong> Конечно, но совсем никакого цвета не бывает. Хоть какой-то цвет будет. Значит свойство &#8220;цвет&#8221; будет у каждой шубы. Вот как узнать какой цвет у твоей шубы.<br />
<strong>Б.:</strong> Пасмааатреть на неё.<br />
<strong>П.:</strong> нет, я и мею в виду в коде.<br />
<strong>Б.:</strong> Ааааа&#8230; ну, наверна, так:<br />
<code><br />
$cvet_shubi = $shuba1-&gt;cvet;<br />
</code></p>
<p><strong>П.:</strong> Умничка! <em>(Блондинка сияет)</em> Только предварительно нужно добавить это свойство в класс <strong>Shubi</strong>. Как?<br />
<strong>Б.:</strong> Наверна, так:<br />
<code><br />
class Shubi{<br />
public $tip;<br />
public $razmer;<br />
public $cvet;<br />
function odetj($pugovici){<br />
$rasstegnutie_pugovici = $pugovici;<br />
return $rasstegnutie_pugovici;<br />
}<br />
}<br />
</code></p>
<p><strong>П.:</strong> Только прежде, чем получить цвет у шубы, нужно задать этот цвет. Это можно сделать либо в классе <strong>Shubi</strong>, тогда все создаваемые шубы будут одного цвета, хотя не проблема их перекрасить. Либо, ты можешь получить шубу без определённого цвета и сама назначить её любой цвет.<br />
<strong>Б.:</strong> Ага, вот чтоб тааак в жизни было. Одела шубу и скааазала &#8220;хачу белую, нет, хачу чёрную&#8221;&#8230;<br />
<strong>П.:</strong> Дааа&#8230; программировать и создавать, практически синонимы.<br />
Ну и ещё объекты имеют методы, т. е. действия которые можно совершить с шубой. Теперь сними шубу.<br />
<strong>Б.:</strong> Ага. Выключите свет.<br />
<strong>П.:</strong> Что?<br />
<strong>Б.:</strong> Ой, хи-хи&#8230; в смысле написааать?<br />
<strong>П.:</strong> Ну конечно!<br />
<strong>Б.:</strong> Снимаю <em>(пошлый смешок)</em>:<br />
<code><br />
class Shubi{<br />
public $tip;<br />
public $razmer;<br />
public $cvet;<br />
function odetj($pugovici){<br />
$rasstegnutie_pugovici = $pugovici;<br />
return $rasstegnutie_pugovici;<br />
}<br />
function snjatj(){<br />
return true;<br />
}<br />
}<br />
</code></p>
<p><code><br />
$shuba1-&gt;snjatj();<br />
</code><br />
<strong>П.:</strong> Великолепно! Ну хватит с тебя на сегодня.<br />
<strong>Б.:</strong> Пабииигу, по бутикам пока не закрыыылись!</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/fun/kak-obyasnit-blondinke-obektno-orientirovannoe-programmirovanie/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Как конвертировать данные из URL в UTF-8?</title>
		<link>http://seleckis.lv/journal/journal-php/kak-konvertirovat-dannye-iz-url-v-utf-8</link>
		<comments>http://seleckis.lv/journal/journal-php/kak-konvertirovat-dannye-iz-url-v-utf-8#comments</comments>
		<pubDate>Mon, 03 Sep 2007 18:33:58 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/archive/php/kak-konvertirovat-dannye-iz-url-v-utf-8</guid>
		<description><![CDATA[Занялся вопросом декодирования запросов переданых в URL. Имеется в виду отправка данных скрипту через url при использовании mod_rewrite. Пример работы можете увидеть в на Wikipedia.org. Если мы пишем в адресную строку, или создаём такую ссылку:  http://ru.wikipedia.org/wiki/Слово , то движок вики получает &#8220;Слово&#8221; в url-закодированном виде, раскодирует его и пытается найти в базе это &#8220;Слово&#8221;.
Знаем, [...]]]></description>
			<content:encoded><![CDATA[<p>Занялся вопросом декодирования запросов переданых в URL. Имеется в виду отправка данных скрипту через url при использовании mod_rewrite. Пример работы можете увидеть в на Wikipedia.org. Если мы пишем в адресную строку, или создаём такую ссылку: <strong> <a target="_blank" href="http://ru.wikipedia.org/wiki/Слово">http://ru.wikipedia.org/wiki/Слово</a> </strong>, то движок вики получает &#8220;Слово&#8221; в url-закодированном виде, раскодирует его и пытается найти в базе это &#8220;Слово&#8221;.</p>
<p>Знаем, что Вики базируется на utf-8 кодировке, скорей всего база тоже. Но при получении &#8220;Слова&#8221; в адресной строке оно не будет закодировано в UTF-8 формат. Оно передаётся в формате ASCII (как показывает функция mb_detect_encoding).</p>
<p>Результатом моих иследований стал тот факт, что код привеённый ниже, конвертирует введённый латышский текст (со всеми специфическими (Baltic) символами) в UTF-8 формат.</p>
<p><code>$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "auto");</code></p>
<p>Но этот же код не работает для кирилицы &#8211; выводит ошибку о недопустимых символах. Для неё необходим такой код:</p>
<p><code>$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "WINDOWS-1251");</code></p>
<p>Получается, что если я хочу правильно конвертнуть всё в UTF-8, мне нужно написать такой код:</p>
<p><code><br />
if(mb_convert_encoding($source_word, "UTF-8", "auto"))<br />
	$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "auto");<br />
else<br />
	$word = mb_convert_encoding(urldecode($source_word), "UTF-8", "WINDOWS-1251");<br />
</code></p>
<h3>Вопросы php-программистам:</h3>
<ol>
<li>От чего зависит кодировка в которой отправляются данные серверу через URL? От сервера, от клиента или это какой-то стандарт? Всё тот же mb_detect_encoding возвращает ASCII и для латышского и для русского языков.</li>
<li>Если параметр &#8220;auto&#8221; работает для балтийских языков, то работает ли он для западноевропейских языков? А windows-1251 будет ли работать для украинского и беларусского?</li>
<li>Существует ли универсальный код правильно кодирующий данные из URL в UTF-8? Или у той же Вики в базе просто список кодировок на каждый язык?</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/journal-php/kak-konvertirovat-dannye-iz-url-v-utf-8/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Фильтры WordPress. Плагин NS Recent Comments.</title>
		<link>http://seleckis.lv/journal/wordpress/filtry-wordpress-plagin-ns-recent-comments</link>
		<comments>http://seleckis.lv/journal/wordpress/filtry-wordpress-plagin-ns-recent-comments#comments</comments>
		<pubDate>Wed, 08 Aug 2007 09:47:05 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Wordpress plugins]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/wordpress/filtry-wordpress-plagin-ns-recent-comments</guid>
		<description><![CDATA[
Фильтры Wordpress
Может быть в будущем сделаю плагин на основе следующего скрипта, а сейчас просто хочу посоветовать, как в Wordpress почти не зная программирования на PHP можно легко создать скрипт (плагином в полной мере его назвать нельзя, скорее это фильтр) автозамены символов в тексте.
С чего начать?
Для начала нужно уяснить, что нам нужно. А нам нужно, например, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src='http://www.seleckis.lv/wp-content/uploads/2007/08/4_wp-filters.png' alt='4_wp-filters.png' /></p>
<h3>Фильтры Wordpress</a></h3>
<p>Может быть в будущем сделаю плагин на основе следующего скрипта, а сейчас просто хочу посоветовать, как в Wordpress почти не зная программирования на PHP можно легко создать скрипт (плагином в полной мере его назвать нельзя, скорее это фильтр) автозамены символов в тексте.</p>
<h4>С чего начать?</h4>
<p>Для начала нужно уяснить, что нам нужно. А нам нужно, например, для того, чтобы 4 пробела заменялись на 4 &amp;nbsp; дабы показать отступ. Опять же в тэге &lt;code&gt; мы вставляем кокой-либо листинг и естественно с отступами, чтобы показать вложенность. Эти отступы формируются табами (кнопка [TAB]). Вот и нужно опять же этот TAB заменить на неразрывные пробелы.</p>
<h4>Как работает фильтр</h4>
<p>Фильтр в Wordpress работает используя функцию add_filter($param1, $param2), где первый параметр функции говорит к какому содержимому применить фильтр (hook), а второй &#8211; через какую функцию пропустить это содержимое. Оба параметра &#8211; строчные значения. От первого параметра так же зависит будет ли применяться фильтр перед отправкой данных в базу или перед выводом на экран.</p>
<h4>Пример</h4>
<p><code><br />
<strong>function</strong> correct_code(<strong>$ret</strong>)<br />
{<br />
	<strong>$ret</strong> = str_replace("[-SPACE-][-SPACE-][-SPACE-][-SPACE-]", "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;", <strong>$ret</strong>);<br />
	<strong>$ret</strong> = str_replace("[-TAB-]", "&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;", <strong>$ret</strong>);<br />
	return($ret);<br />
}<br />
<strong>add_filter</strong>("the_content", "correct_code");<br />
</code><br />
В примере функция <strong><em>add_filter()</em></strong>, пропускает контент через функцию <em><strong>correct_code()</strong></em>. Причём функция <strong><em>correct_code()</em></strong> получает содержимое в качестве параметра функции, у меня это переменная <strong>$ret</strong>. А дальше с этой переменной можно делать всё что угодно. В данном случае у меня даны две строки отличающиеся друг от друга тем, что первая заменяет 4 пробела на 4 неразрывных пробела, а вторая заменяет [TAB] на 4 неразрывных пробела. Никакого специального кода для поска [TAB] вводить не нужно, просто поставьте этот [TAB].</p>
<p>Используя эту же функцию, можно добавить автозамену, например, кавычек:</p>
<p><code><br />
	$ret = str_replace("&amp;#8221;", "&amp;quot;", $ret);<br />
	$ret = str_replace("&amp;#8220;", "&amp;quot;", $ret);<br />
</code><br />
Эти две строчки заменяют кавычки вида “ и ” на обычные &quot;<br />
<span class="note"><br />
<strong>Примечание:</strong><br />
Иногда по-невнимательности бывает такая проблема, что фильтр не работает и не заменяет кавычки вида “ ” на &quot;. Это может быть, если вы напрямую скопировали символ наклонной кавычки в исходник поста. Тогда, если вы не хотите редактировать пост, нужно скопировать этот символ в автозамену:</p>
<p><code><br />
	$ret = str_replace("“", "&amp;quot;", $ret);<br />
	$ret = str_replace("”", "&amp;quot;", $ret);<br />
</code><br />
</span></p>
<h4>И куда её деть?</h4>
<p>Куда деть наш код, чтоб работал? Можно кинуть в любой плагин, можно создать отдельный плагин (только незабудьте написать заголовок и активировать этот плагин), а можно кинуть в один из шаблонных файлов, но до вывода контента. Лучше всего куда-нибудь в header.php</p>
<p><a href="http://codex.wordpress.org/Function_Reference/add_filter" target="_blank">Подробнее о фильтрах</a>. [<a target="_blank" href="http://translate.google.com/translate?hl=ru&#038;sl=en&#038;u=http://codex.wordpress.org/Function_Reference/add_filter&#038;sa=X&#038;oi=translate&#038;resnum=1&#038;ct=result&#038;prev=/search%3Fq%3Dhttp://codex.wordpress.org/Function_Reference/add_filter%26hl%3Dru%26client%3Dfirefox-a%26rls%3Dorg.mozilla:en-US:official%26hs%3DQ8h">Google перевод</a>]</p>
<h4>P.S.</h4>
<p>Добавил в проекты новый плагин для Wordpress, который называется <a href="http://www.seleckis.lv/projects/wp-plugins/ns_recent-comments" target="_blank">NS Recent Comments</a>. Принцип работы почти такой же как и у плагина <a href="http://www.seleckis.lv/projects/wp-plugins/ns_recent-posts" target="_blank">NS Recent Posts</a>, только на этот раз плагин выводит список последних комментариев, поэтому особо я о нём ничего писать не буду, всю подробную информацию читайте на странице плагина. Рабочий вариант можно увидеть на главной странице журнала внизу.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/wordpress/filtry-wordpress-plagin-ns-recent-comments/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

