<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.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/" version="2.0">

<channel>
	<title>SimpleCoding.org</title>
	
	<link>http://www.simplecoding.org</link>
	<description>Блог о программировании</description>
	<lastBuildDate>Sun, 08 Nov 2009 19:36:23 +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" href="http://feeds.feedburner.com/simplecoding" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">simplecoding</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/simplecoding" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fsimplecoding" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pusk.ru/#A:Rfeed=http://feeds.feedburner.com/simplecoding" src="http://blog.pusk.ru/wp-includes/images/rss_icon_neutral.png">Subscribe with pusk.ru</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Создание слайдшоу на JavaScript и несколько особенностей анимации</title>
		<link>http://www.simplecoding.org/sozdanie-slajdshou-na-javascript-i-neskolko-osobennostej-animacii.html</link>
		<comments>http://www.simplecoding.org/sozdanie-slajdshou-na-javascript-i-neskolko-osobennostej-animacii.html#comments</comments>
		<pubDate>Sun, 08 Nov 2009 19:36:23 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=938</guid>
		<description><![CDATA[
Приветствую всех!
На днях я экспериментировал с плагином jQuery Panel Gallery и хочу поделиться впечатлениями, а заодно рассказать, как с ним работать. Кроме того, использование подобных плагинов имеет некоторые особенности, которые касаются не их самих, а JavaScript анимации вообще.
Итак, начнем с плагина.
Как несложно догадаться из названия, для его работы нужна библиотека jQuery. Сам плагин слайдшоу с [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/11/jquery_panel_gallery.jpg" alt="jquery_panel_gallery" title="jquery_panel_gallery" width="258" height="193" class="alignnone size-full wp-image-939" style="float:left" /></p>
<p><strong>Приветствую всех!</strong></p>
<p>На днях я экспериментировал с плагином <a href="http://www.catchmyfame.com/2009/09/24/jquery-panel-gallery-1-2-plugin-released/">jQuery Panel Gallery</a> и хочу поделиться впечатлениями, а заодно рассказать, как с ним работать. Кроме того, использование подобных плагинов имеет некоторые особенности, которые касаются не их самих, а <strong>JavaScript анимации</strong> вообще.</p>
<p>Итак, начнем с плагина.</p>
<p>Как несложно догадаться из названия, для его работы нужна библиотека <a href="http://jquery.com/">jQuery</a>. Сам плагин слайдшоу с плавными переходами между картинками.</p>
<p>Как это выглядит можно посмотреть на демонстрационной страничке.</p>
<p><a href="http://demosites.org.ua/panel-gallery/"><img src="http://www.simplecoding.org/wp-content/themes/three_cols/images/demo_btn_green.png" alt="демонстрационный пример" /></a></p>
<p>И, конечно, вы можете скачать архив с примером.</p>
<p><a href='http://www.simplecoding.org/wp-content/uploads/2009/11/jquery_panel_gallery.zip'><img src="http://www.simplecoding.org/wp-content/themes/three_cols/images/download_btn_blue.png" alt="архив с исходным кодом" /></a></p>
<p>Использовать плагин не сложно. Просто подключаете файлы со скриптами, размещаете на странице несколько картинок и вызываете метод <code>panelGallery</code> плагина. И все, слайдшоу работает.</p>
<p>Выглядит это примерно так</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"> &nbsp; &nbsp;<span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">id</span>=<span class="st0">&quot;myimages&quot;</span> <span class="kw3">style</span>=<span class="st0">&quot;position:relative&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;img</span> <span class="kw3">src</span>=<span class="st0">&quot;images/1w.jpg&quot;</span> <span class="kw3">alt</span>=<span class="st0">&quot;картинка&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;390px&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;290px&quot;</span> /<span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;img</span> <span class="kw3">src</span>=<span class="st0">&quot;images/2w.jpg&quot;</span> <span class="kw3">alt</span>=<span class="st0">&quot;картинка&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;390px&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;290px&quot;</span> /<span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&#8230;&#8230;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;js/jquery-1.3.2.min.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;js/jquery.panelgallery-1_2.js&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;script</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2">$(function() {</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $(&#039;#myimages&#039;).panelGallery({</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sections:5</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ,sectionTransitionDelay:500</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; });</div>
</li>
<li class="li2">
<div class="de2">});</div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span></div>
</li>
</ol>
</div>
<p>Правда есть несколько нюансов, о которых нужно помнить.</p>
<p><strong>1) Картинки должны находиться внутри блока с позиционированием.</strong> Т.е. для этого блока должно быть установлено CSS правило <code>position:relative</code> или <code>position:absolute</code> или <code>position:fixed</code>.</p>
<p><strong>2) Вы можете использовать картинки разного размера, но атрибуты width и height должны быть одинаковыми</strong>, т.е. браузер подгонит их под заданный размер. На мой взгляд лучше заранее подготовить картинки одинакового размера.</p>
<p><strong>3) Нормально работать плагин начнет только после того, как все картинки будут загружены</strong>, поэтому если вы решите сделать слайдшоу из сотни-другой картинок, то посетителю придется немного подождать <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>4) Плагин имеет довольно много настроек, с помощью которых можно контролировать анимацию.</strong> Их перечень в конце этой статьи.</p>
<p>Теперь самое главное – анимация, а точнее <strong>нагрузка на систему</strong>.</p>
<p>К сожалению, на сегодняшний день поддержка JavaScript в браузерах далека от идеала. Т.е. пока вы используете несложные функции, которые выполняются только при определенных действиях посетителя – все отлично.</p>
<p>Но если этот код будет работать постоянно (как в случае этого плагина), то нагрузка резко возрастает.</p>
<p>Этот плагин не исключение. Во время смены картинок нагрузка на процессор достигает <strong>20-30%</strong>. </p>
<p>Причем она может быть и больше. Уменьшите задержки между запуском анимации, увеличьте количество сегментов, поднимите скорость и, думаю, вы легко возьмете планку в <strong>40-50%</strong> <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>В общем, глядя на эти цифры, возникает острое желание поискать какое-нибудь решение на Flash или Silverlight <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>А вы как думаете?</p>
<p><strong>P.S. Настройки плагина.</strong></p>
<p><code>sections</code> – количество блоков, на которые разбивается изображение (по-умолчанию 3).</p>
<p><code>imageTransitionDelay</code> – пауза (в мс) перед началом показа следующего изображения (по-умолчанию 3000).</p>
<p><code>startDelay</code> – пауза перед запуском первой анимации (по-умолчанию 2000).</p>
<p><code>sectionTransitionDelay</code> – задержка между показами секций изображения (по-умолчанию 700мс).</p>
<p><code>overlap</code> – позволяет начать анимацию следующей секции до того как закончится анимация предыдущей. Задается как доля от значения параметра sectionTransitionDelay (изменяется от 0 до 1). Например, если <code>sectionTransitionDelay:1000</code>, а <code>overlap:0.5</code>, то следующая секция начнет появляться через 500мс после предыдущей.</p>
<p><code>enablePause</code> – если равен 1, то анимация будет остановлена при наведении курсора на картинку.</p>
<p><code>repeat</code> – если равен true, то картинки будут повторяться по кругу.</p>
<p><code>direction</code> – направление переходов. “lr” (слева направо), “rl” (справа налево), “tb” (сверху вниз), and “bt” (снизу вверх) (по-умолчанию: “lr”).</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=938&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/hIrH6sOYzhY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/sozdanie-slajdshou-na-javascript-i-neskolko-osobennostej-animacii.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>960 Grid System: зачем нужны CSS фреймворки</title>
		<link>http://www.simplecoding.org/960-grid-system-zachem-nuzhny-css-frejmvorki.html</link>
		<comments>http://www.simplecoding.org/960-grid-system-zachem-nuzhny-css-frejmvorki.html#comments</comments>
		<pubDate>Fri, 30 Oct 2009 20:14:42 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=932</guid>
		<description><![CDATA[ 
Что-то давно я ничего не писал о CSS, а ведь использовать эту технологию приходится практически постоянно.
Кроме того, последнее время я начинаю замечать, что все чаще использую CSS фреймворки. Поэтому сегодня речь пойдет именно о них. А точнее, об одном из них, под названием 960 Grid System.
Почему именно о нем? Тут все очень просто. Я [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_933" class="wp-caption alignnone" style="width: 296px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/960grid_logo.png" alt="960grid logo" title="960grid logo" width="286" height="190" class="size-full wp-image-933" style="float:left; padding: 0 10px 10px 0" /><p class="wp-caption-text"> </p></div>
<p>Что-то давно я ничего не писал о <strong>CSS</strong>, а ведь использовать эту технологию приходится практически постоянно.</p>
<p>Кроме того, последнее время я начинаю замечать, что все чаще использую <strong>CSS фреймворки</strong>. Поэтому сегодня речь пойдет именно о них. А точнее, об одном из них, под названием <a href="http://960.gs/">960 Grid System</a>.</p>
<p>Почему именно о нем? Тут все очень просто. Я более-менее плотно работал с двумя фреймворками: Blueprint и 960 grid. При этом, на мой взгляд, разработчикам <strong>960 grid system</strong> удалось добиться очень хорошего отношения возможности/размер фреймворка.</p>
<p>Рассмотрим его подробнее.</p>
<p><strong>Начнем с недостатков.</strong></p>
<p>Если вы хоть немного интересовались темой, то, конечно, знаете, что есть много возражений против применении CSS фреймворков как таковых.</p>
<p><strong>Основные возражения</strong> такие.</p>
<p>1) Фреймворки увеличивают размер страницы.</p>
<p>2) Загоняют разработчика в определенные рамки. Например, 960 grid предназначен для верстки страниц с шириной 960рх.</p>
<p>3) Многим не нравятся имена классов вроде «grid-16».</p>
<p>4) Кто-то считает, что нужно самому создавать фреймворк «под себя».</p>
<p>Но давайте посмотрим насколько существенны эти недостатки.</p>
<p>1) Объем файлов действительно увеличивается. Но 960 Grid System состоит из трех файлов, суммарный размер которых &#8211; 8 кБ (сжатая версия). Если использовать архивацию размер уменьшается до 1,6кБ.</p>
<p>Вы, конечно, сможете обойтись меньшим количеством кода для <strong>конкретной</strong> страницы, но разница вряд ли будет больше 1 кБ, т.е. если на вашей страничке есть хотя бы парочка картинок, выигрыш в общем объеме окажется менее 1%.</p>
<p>2) По поводу ограничений. Фреймворк, как и любую библиотеку, имеет смысл использовать <strong>в случаях, для которых он разрабатывался</strong>. Т.е. если нужна «резиновая» верстка, 960 Grid – не подходящее решение (хотя есть проект <a href="http://www.designinfluences.com/fluid960gs/">Fluid 960 Grid System</a>). Но если в тех. задании сказано, что страница должна иметь фиксированную ширину 960px, то ситуация меняется.</p>
<p>3) Имена классов. На мой взгляд – это вопрос привычки. Цифры в имени означают ширину блока и по ним достаточно просто ориентироваться. Кроме того, никто не запрещает использовать одновременно несколько классов, например,</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=”grid_4 sidebar”<span class="kw2">&gt;</span></span>…<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
</ol>
</div>
<p>Класс <code>grid_4</code> будет использовать фреймворк, <code>sidebar</code> – вашими стилями.</p>
<p>4) Свой фреймворк – это хорошо… если у вас есть время на его разработку и вы уверены, что он получится лучше существующих решений.</p>
<p><strong>Теперь о преимуществах.</strong></p>
<p>1) Время разработки. Оно сокращается и значительно, особенно если у вас есть минимальный опыт работы с фреймворком и вы используете его в подходящей ситуации. Т.е. нужно потратить какое-то время на изучение, но окупается оно очень быстро.</p>
<p>2) Фреймворки содержат «хаки» для наиболее распространенных браузеров. Каждый раз решать одни и те же проблемы с позиционированием элементов в IE очень быстро надоедает <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>3) Упрощается поддержка. Вам будет легче прочитать свой же код, написанный полгода назад, если вы все время используете одинаковые имена классов.</p>
<p><em>Примечание</em>. Кстати, если вы интересуетесь темой, очень советую почитать статью &#034;<a href="http://maxsite.org/page/grid">Верстка с помощью Grid</a>&#034;.</p>
<p>А теперь <strong>небольшой пример</strong>.</p>
<p>Допустим, нам нужно сверстать страницу с таким размещением блоков.</p>
<div id="attachment_934" class="wp-caption alignnone" style="width: 460px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/layout.png" alt="layout" title="layout" width="450" height="230" class="size-full wp-image-934" /><p class="wp-caption-text"> </p></div>
<p>Я сразу покажу решение.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;html</span> xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span class="kw3">lang</span>=<span class="st0">&quot;en&quot;</span> <span class="kw3">lang</span>=<span class="st0">&quot;en&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;head&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;title&gt;</span></span>Test 960 Grid System<span class="sc2"><span class="kw2">&lt;/title&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;link</span> <span class="kw3">rel</span>=<span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span>=<span class="st0">&quot;css/reset.css&quot;</span> /<span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;link</span> <span class="kw3">rel</span>=<span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span>=<span class="st0">&quot;css/text.css&quot;</span> /<span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;link</span> <span class="kw3">rel</span>=<span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span>=<span class="st0">&quot;css/960.css&quot;</span> /<span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;style</span> <span class="kw3">type</span>=<span class="st0">&quot;text/css&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p {</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; border: solid 1px #eee;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; }</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;/style&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;/head&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;body&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2"><span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;container_12&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_12&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Заголовок<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;clear&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4 alpha&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Левый блок №1<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4 alpha&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Левый блок №1<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4&quot;</span><span class="kw2">&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4 alpha&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Центральный блок №1<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_2 alpha&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Центральный блок №2<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_2 omega&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Центральный блок №3<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_4&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Правый блок.<span class="sc2"><span class="kw2">&lt;br</span> /<span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;br</span> /<span class="kw2">&gt;</span></span> Может быть любой высоты.<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;clear&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;grid_12&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;p&gt;</span></span>Хвостовик<span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc2"><span class="kw2">&lt;div</span> <span class="kw3">class</span>=<span class="st0">&quot;clear&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li2">
<div class="de2"><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;/body&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2"><span class="kw2">&lt;/html&gt;</span></span></div>
</li>
</ol>
</div>
<p>Как видите, мы обошлись практически минимальным количество тегов <code>div</code>. Вложенные дивы использовались только для левой и центральной колонок, т.к. они содержат несколько блоков.</p>
<p>Теперь о номерах классов.</p>
<p>Общая ширина макета 960px. Фреймворк позволяет разбить ее на 12, 16 и 24 равных части. В данном случае нам достаточно разбиения на 12 частей. Т.е. класс <code>grid_12</code> имеет ширину 940px плюс отступы по 10px справа и слева.</p>
<p>Точно также класс <code>grid_4</code> имеет ширину <code>960 * 4 / 12 = 320px</code> из которых 20px приходится на отступы.</p>
<p>Если мы поместим подряд три блока с классами <code>grid_1</code>, <code>grid_7</code> и <code>grid_4</code>, то они займут всю ширину страницы.</p>
<p>Кроме того, есть несколько специальных классов, например, <code>alpha</code> и <code>omega</code>. Они позволяют убрать отступы слева (<code>alpha</code>) и справа (<code>omega</code>) у блока. В данном примере эта возможность используется для того, чтобы убрать отступы у вложенных блоков. Иначе они будут прибавлены к отступам контейнера и, например, расстояние между левой колонкой и центральной будет не 20, а 40px.</p>
<p>Также вы можете использовать класс <code>clear</code> для завершения строки с блоками, а также классы <code>prefix_X</code>, <code>suffix_X</code>, <code>push_X</code> и <code>pull_X</code> для создания различных отступов (вместо <code>X</code> нужно подставить число).</p>
<p><em>Примечание</em>. Если вы планируете использовать этот (или любой другой CSS фреймворк) я очень советую вам взглянуть на исходные файлы со стилями. Как я уже писал, они совсем небольшие и при наличии минимальных познаний в CSS вы быстро разберетесь что к чему.</p>
<p>Как видите, использовать фреймворк не сложно и его изучение вряд ли отнимет у вас много времени.</p>
<p><strong>В заключение хочу провести небольшой опрос.</strong></p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p>(форма для голосования не видна в RSS ридере, поэтому заходите на сайт <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>Удачи!</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=932&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/RFCpJatx9z8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/960-grid-system-zachem-nuzhny-css-frejmvorki.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Отложенная публикация постов в WordPress с помощью XML-RPC</title>
		<link>http://www.simplecoding.org/otlozhennaya-publikaciya-postov-v-wordpress-s-pomoshhyu-xml-rpc.html</link>
		<comments>http://www.simplecoding.org/otlozhennaya-publikaciya-postov-v-wordpress-s-pomoshhyu-xml-rpc.html#comments</comments>
		<pubDate>Wed, 21 Oct 2009 18:31:15 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web разработка]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=930</guid>
		<description><![CDATA[ 
Я думаю, многие блоггеры пользуются возможностью отложенной публикации постов в WP. Действительно, функция очень удобная, т.к. позволяет публиковать новые материалы через более-менее равномерные промежутки времени. К тому же для ее использования делать практически ничего не нужно, достаточно просто указать в админке WordPress дату публикации.
Но недавно у меня возникла задача публиковать посты через XML-RPC и, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_931" class="wp-caption alignnone" style="width: 224px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/wordpress-xml-rpc.png" alt="wordpress-xml-rpc" title="wordpress-xml-rpc" width="214" height="107" class="size-full wp-image-931" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>Я думаю, многие блоггеры пользуются возможностью <strong>отложенной публикации постов</strong> в WP. Действительно, функция очень удобная, т.к. позволяет публиковать новые материалы через более-менее равномерные промежутки времени. К тому же для ее использования делать практически ничего не нужно, достаточно просто указать в админке WordPress дату публикации.</p>
<p>Но недавно у меня возникла задача публиковать посты через <strong>XML-RPC</strong> и, сразу же обнаружилось несколько не совсем очевидных нюансов, которые касаются указания даты. О них я и хочу сегодня рассказать.</p>
<p><strong>Для начала немного теории.</strong></p>
<p>WordPress имеет встроенный <strong>XML-RPC сервер</strong>, который позволяет выполнять практически все операции с постами и страницами (создание/чтение/изменение/удаление).</p>
<p><em>Примечание</em>. По-умолчанию в целях безопасности поддержка XML-RPC отключена. Вы можете включить ее на странице <code>Settings</code> &#8211; <code>Writing</code> &#8211; <code>Enable the WordPress, Movable Type, MetaWeblog and Blogger XML-RPC publishing protocols</code>.</p>
<p>Для публикации поста нужно <strong>сформировать и отправить XML-RPC запрос</strong> со всеми необходимыми данными.</p>
<p>Естественно, формировать его вручную не самое увлекательное занятие. Гораздо удобнее использовать одну из многочисленных библиотек для работы с XML-RPC.</p>
<p>Для этого примера я решил использовать библиотеку под названием <a href="http://scripts.incutio.com/xmlrpc/">IXR_Library</a>, которую, кстати, использует и движок WordPress.</p>
<p>Только WP ее использует для создания XML-RPC сервера, а нам нужен <strong>XML-RPC клиент</strong>.</p>
<p>Нам потребуется выполнить 3 несложных действия.</p>
<p>1)	Создать объект типа <code>IXR_Client</code> (XML-RPC клиент).</p>
<p>2)	Создать массив с данными.</p>
<p>3)	Опубликовать пост с помощью метода <code>query</code>.</p>
<p>Наибольшие проблемы вызывает второй этап. При формировании массива важно не ошибиться с именами ключей массива и форматом значений, которые в них передаются.</p>
<p>Взгляните на пример кода.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&#039;IXR_Library.inc&#039;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$client</span> = <span class="kw2">new</span> IXR_Client<span class="br0">&#40;</span><span class="st0">&#039;http://myblog.com/xmlrpc.php&#039;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$requestData</span> = <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$userName</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$userPass</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;title&#039;</span>=&gt;<span class="st0">&#039;Заголовок поста&#039;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;mt_allow_comments&#039;</span>=&gt;<span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;mt_allow_pings&#039;</span>=&gt;<span class="nu0">0</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;mt_keywords&#039;</span>=&gt;<span class="st0">&#039;tag1, tag2&#039;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;dateCreated&#039;</span>=&gt;new IXR_Date<span class="br0">&#40;</span><span class="st0">&#039;20091021T12:23:10&#039;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#039;description&#039;</span>=&gt;<span class="st0">&#039;Тут нужно вставить текст поста &#8230;&#039;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">TRUE</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$resp</span> = <span class="re0">$client</span>-&gt;<span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&#039;metaWeblog.newPost&#039;</span>, <span class="re0">$requestData</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$postId</span> = <span class="re0">$client</span>-&gt;<span class="me1">getResponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Мы подключили библиотеку, создали объект типа <code>IXR_Client</code> (при этом мы указали адрес блога) и начали заполнять массив с данными (<code>$requestData</code>).</p>
<p>Первым элементом этого массива должен быть <code>id</code> автора. Если вы единственный автор блога, ставьте 0.</p>
<p>Второй и третий элементы – ваши логин и пароль.</p>
<p>Четвертый элемент &#8211; массив с данными. Это ассоциативный массив, поэтому последовательность элементов роли не играет. В данном случае мы указали заголовок поста (<code>title</code>), разрешили комментарии (<code>mt_allow_comments</code>) и запретили пинги (<code>mt_allow_pings</code>).</p>
<p><strong>Обратите внимание</strong>. Элементам <code>mt_allow_comments</code> и <code>mt_allow_pings</code> нужно присвоить числовые значения, элементу <code>title</code> – текстовое.</p>
<p>Затем мы указали перечень тегов (<code>mt_keywords</code>) и добавили текст поста (<code>description</code>).</p>
<p><strong>Теперь о дате</strong>. Передавать нужно объект типа <code>IXR_Date</code>, а в его конструкторе указать дату в формате «<code>ггггммддТчч:мм:сс</code>». Букву «Т» в принципе можно заменить любой другой или пробелом, она просто игнорируется. Но все остальные значения должны быть введены в строгом соответствии с этим форматом, а длина строки должна равняться <strong>17</strong>-ти символам.</p>
<p>Например, нельзя выводить только две последних цифры года, <strong>обязательно все четыре</strong>.</p>
<p>Пятый элемент массива – булево значение, указывает, публиковать пост или нет. Если дата, указанная в элементе dateCreated еще не наступила, то статус поста будет scheduled.</p>
<p>Для отправки поста мы используем метод <code>query</code>. В его первом параметре указываем название функции XML-RPC сервера, которую мы хотим вызвать. В данном случае это <code>metaWeblog.newPost</code>. Во втором – передаем массив с данными.</p>
<p><em>Примечание</em>. Подробнее о функциях, которые поддерживает XML-RPC сервер WP можно почитать в статье «<a href="http://www.simplecoding.org/publicatsija-v-wordpress-c-xml-rpc-i-codeigniter.html">Публикация постов в WordPress с помощью XML-RPC и CodeIgniter</a>». Но основными источниками информации остаются <a href="http://codex.wordpress.org/XML-RPC">Codex WP</a> и, конечно, сам файл <strong>xmlrpc.php</strong>.</p>
<p>Получить <code>id</code> опубликованного поста можно с помощью метода <code>getResponse</code>.</p>
<p>Как видите, ничего принципиально сложного нет. Главное правильно сформировать массив с данными <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>А вообще XML-RPC интерфейс позволяет делать очень интересные вещи. Например, можно сделать общую панель управления несколькими блогами или систему для получения расширенной статистики (частота публикаций, среднее количество комментариев и т.п.).</p>
<p>Возможности ограничены только вашей фантазией <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=930&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/DOBR_bc5qds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/otlozhennaya-publikaciya-postov-v-wordpress-s-pomoshhyu-xml-rpc.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Регистрация бесплатных доменов в зоне .org.ua. Новые возможности.</title>
		<link>http://www.simplecoding.org/registraciya-besplatnyx-domenov-v-zone-org-ua-novye-vozmozhnosti.html</link>
		<comments>http://www.simplecoding.org/registraciya-besplatnyx-domenov-v-zone-org-ua-novye-vozmozhnosti.html#comments</comments>
		<pubDate>Tue, 13 Oct 2009 08:50:28 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Разное]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=924</guid>
		<description><![CDATA[ 
Все мы любим получать что-то бесплатно   И статистика этого блога – совершенно точно подтверждает эту теорию.
Судите сами, самая популярная статья этого блога – «Как самостоятельно и бесплатно зарегистрировать домен» была написана 2 года назад и собрала более 200 комментариев. Причем периодически на неё приходило больше людей, чем на главную.
Но за 2 года [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_925" class="wp-caption alignnone" style="width: 278px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/org_ua_logo.png" alt="org_ua_logo" title="org_ua_logo" width="268" height="215" style="float:left" class="size-full wp-image-925" /><p class="wp-caption-text"> </p></div>
<p>Все мы любим <strong>получать что-то бесплатно</strong> <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  И статистика этого блога – совершенно точно подтверждает эту теорию.</p>
<p>Судите сами, самая популярная статья этого блога – «<a href="http://www.simplecoding.org/kak-samostoyatelno-i-besplatno-zaregistrirovat-domen.html">Как самостоятельно и бесплатно зарегистрировать домен</a>» была написана 2 года назад и собрала более 200 комментариев. Причем периодически на неё приходило больше людей, чем на главную.</p>
<p>Но за 2 года появились дополнительные возможности, которые значительно <strong>упрощают процедуру регистрации</strong>, поэтому я решил написать новую инструкцию.</p>
<p><strong>Самое главное</strong>. Появилась возможность регистрировать домен не через электронную почту, а прямо на сайте регистратора. Такое нововведение решило сразу три проблемы.</p>
<p>1) В зоне .org.ua существует ограничение – нельзя подавать более 3-х заявок на регистрацию в сутки с одного почтового домена. Обратите внимание, именно <strong>почтового домена</strong>, а не ящика, т.е. 3 заявки на весь ukr.net. Это конечно не проблема, если у вас уже есть зарегистрированный домен, и вы можете создавать ящики вида admin@mycooldomen.com (такую возможность предоставляют практически все хостеры). В противном случае нужно было искать какой-нибудь экзотический бесплатный почтовый сервис.</p>
<p>2) Теперь сложнее сделать ошибку при составлении заявки. Т.к. часть данных вводится автоматически (например, поле <code>changed</code>).</p>
<p>3) Не нужно следить в каком формате уходит письмо с заявкой. Много ошибок было связано с тем, что письма отправлялись в HTML формате. Правда, письмо с подтверждением регистрации все равно нужно отправлять, поэтому эта проблема решена не полностью.</p>
<p><strong>Теперь подробно разберем порядок создания домена</strong></p>
<p>1) Если вы первый раз регистрируете домен, нужно получить <a href="https://hostmaster.net.ua/?uanew1">nic-handle</a>. Эта процедура сводится к заполнению формы, поэтому на ней я останавливаться не буду.</p>
<p>2) Внимательно читаем две странички. <a href="http://www.hostmaster.ua/2ld/?2ld=org">Особенности регистрации домена org.ua</a> и <a href="http://www.org.ua/">Правила реєстрації доменних імен в домені ORG.UA</a>. (Если возникли проблемы с украинским языком, обращайтесь, я переведу).</p>
<p>3) Выбираем доменное имя. На этом этапе основной инструмент – <a href="https://hostmaster.net.ua/?domadv">whois</a>. Кроме того, будут не лишними сервисы для подбора доменных имен. В блоге SmashingMagazine есть <a href="http://www.smashingmagazine.com/2009/05/02/the-effective-strategy-for-choosing-right-domain-names/">интересная статья</a> на эту тему.</p>
<p>4) <strong>Создание записей на name серверах</strong>. Я обычно использую name сервера хостера, поэтому пример приведу для cPanel.</p>
<p>4.1) Выбираем в меню пункт <code>Домены</code> &#8211; <code>Дополнительные домены</code>.</p>
<div id="attachment_926" class="wp-caption alignnone" style="width: 508px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/cpanel_new_domen.png" alt="cpanel_new_domen" title="cpanel_new_domen" width="498" height="175" class="size-full wp-image-926" /><p class="wp-caption-text"> </p></div>
<p>4.2) Заполняем форму</p>
<div id="attachment_927" class="wp-caption alignnone" style="width: 499px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/create_domen.png" alt="create_domen" title="create_domen" width="489" height="218" class="size-full wp-image-927" /><p class="wp-caption-text"> </p></div>
<p>5) <strong>Регистрация</strong>. О регистрации с помощью email я уже писал, поэтому сейчас рассмотрим процедуру регистрации <a href="http://auto.uanic.ua/">через сайт</a>.</p>
<p>5.1) Выбираем пункт «Реєстрація домена»</p>
<div id="attachment_928" class="wp-caption alignnone" style="width: 536px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/register_domen.png" alt="register_domen" title="register_domen" width="526" height="210" class="size-full wp-image-928" /><p class="wp-caption-text"> </p></div>
<p>5.2)	Заполняем форму.</p>
<div id="attachment_929" class="wp-caption alignnone" style="width: 495px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/registration_form.png" alt="registration_form" title="registration_form" width="485" height="427" class="size-full wp-image-929" /><p class="wp-caption-text"> </p></div>
<p>Я указал только адрес первичного dns (без IP), вторичный система определила сама.</p>
<p>5.3) После нажатия на кнопку check вы увидите сформированную заявку, такую же, как раньше нужно было отправлять почтой. Проверяем её и отправляем.</p>
<p>5.4) Дальнейшая обработка заявки происходит как обычно, т.е. на ваш email будут приходить письма с результатами.</p>
<p>6) Одно из писем, которые вы получите, будет с темой «<strong>ADD sitename.org.ua processing approval request</strong>». Вам нужно:</p>
<p>6.1) Скопировать текст письма.</p>
<p>6.2) Удалить из него строку <code>approve: N</code>.</p>
<p>6.3) Ответить на это письмо (в ответ вставить это же письмо без строки <code>approve: N</code>). <strong>Убедитесь, что письмо отправляется как обычный текст (не HTML).</strong></p>
<p>7) Завершающий этап. Вы получаете письмо с темой «<strong>CREATED: sitename.org.ua (Domain Record #&#8230;)</strong>», т.е. подтверждение успешной регистрации домена.</p>
<p>8 ) Празднуете успешную регистрацию <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Процедура регистрации довольно простая и если вы все внимательно делаете, то проблем быть не должно. Тем не менее, ситуации бывают разные, поэтому советую почитать статью «<a href="http://www.simplecoding.org/kak-samostoyatelno-i-besplatno-zaregistrirovat-domen-tipichnye-oshibki.html">Как самостоятельно и бесплатно зарегистрировать домен. Типичные ошибки.</a>».<br />
И, конечно, вы всегда можете задать вопрос или поделиться своими впечатлениями в комментариях.</p>
<p>Удачи!</p>
<p><strong>Интересно почитать</strong></p>
<p><a href="http://webjunk.ru">заработок в интернете на сайте</a> &#8211; деньги нужны всем!</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=924&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/JO6BKUoHRVI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/registraciya-besplatnyx-domenov-v-zone-org-ua-novye-vozmozhnosti.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RedBean PHP ORM – за и против</title>
		<link>http://www.simplecoding.org/redbean-php-orm-za-i-protiv.html</link>
		<comments>http://www.simplecoding.org/redbean-php-orm-za-i-protiv.html#comments</comments>
		<pubDate>Thu, 08 Oct 2009 10:36:24 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=923</guid>
		<description><![CDATA[ 
Приветствую всех!
Сегодня я хочу рассказать о небольшой ORM библиотеке под названием RedBean с которой я на днях экспериментировал.
Прежде всего, пару слов о ORM (англ. Object-relational mapping, русск. Объектно-реляционная проекция) вообще.
Основное назначение таких библиотек – преобразование объектов, которые используются в программах, в записи реляционных баз данных и обратно.
Дело в том, что все данные в БД [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_917" class="wp-caption alignnone" style="width: 288px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/redbean_logo.png" alt="redbean_logo" title="redbean_logo" width="278" height="143" style="float:left" class="size-full wp-image-917" /><p class="wp-caption-text"> </p></div>
<p><strong>Приветствую всех!</strong></p>
<p>Сегодня я хочу рассказать о небольшой <strong>ORM</strong> библиотеке под названием <a href="http://www.redbeanphp.com">RedBean</a> с которой я на днях экспериментировал.</p>
<p>Прежде всего, пару слов о <strong>ORM</strong> (англ. Object-relational mapping, русск. Объектно-реляционная проекция) вообще.</p>
<p>Основное назначение таких библиотек – преобразование объектов, которые используются в программах, в записи реляционных баз данных и обратно.</p>
<p>Дело в том, что все данные в БД хранятся в таблицах (аналог двумерных массивов), а объекты могут быть организованы в сложные иерархии (например, объект типа «Post» может содержать массив объектов типа «Comment»). И для того, чтобы сохранить такую структуру в БД нужно использовать несколько таблиц с дополнительными полями, которые устанавливают связи между записями.</p>
<p><strong>Все это увеличивает сложность SQL запросов и время разработки.</strong></p>
<p>ORM библиотеки могут в таких ситуациях значительно упрощают жизнь разработчику. Но, естественно, за все нужно платить. В данном случае счет вы получите в виде повышенного потребления ресурсов.</p>
<p><strong>Вернемся к RedBean.</strong></p>
<p>Проиллюстрировать работу любой библиотеки проще всего на примере. Поэтому я написал небольшой скрипт.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span> <span class="st0">&#039;oodb.php&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//подключаемся к БД</span></div>
</li>
<li class="li2">
<div class="de2">RedBean_Setup::<span class="me2">kickstartDev</span><span class="br0">&#40;</span><span class="st0">&#039;Post,Comment&#039;</span>,<span class="st0">&#039;mysql:host=localhost;dbname=my_database&#039;</span>, <span class="st0">&#039;user_name&#039;</span>, <span class="st0">&#039;password&#039;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$post</span> = <span class="kw2">new</span> Post<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$post</span>-&gt;<span class="me1">title</span> = <span class="st0">&#039;Новая запись&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$post</span>-&gt;<span class="me1">content</span> = <span class="st0">&#039;Просто какой-то текст&#039;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$id</span> = <span class="re0">$post</span>-&gt;<span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$comment</span> = <span class="kw2">new</span> Comment;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$comment</span>-&gt;<span class="me1">author</span> = <span class="st0">&#039;admin&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$comment</span>-&gt;<span class="me1">text</span> = <span class="st0">&#039;Очень простой комментарий&#039;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$comment</span>-&gt;<span class="me1">belongsTo</span><span class="br0">&#40;</span><span class="re0">$post</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;!DOCTYPE html <span class="kw2">PUBLIC</span> <span class="st0">&quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span> <span class="st0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:lang=<span class="st0">&quot;en&quot;</span> lang=<span class="st0">&quot;en&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;head&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;meta http-equiv=<span class="st0">&quot;Content-Type&quot;</span> content=<span class="st0">&quot;text/html; charset=utf-8&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;meta name=<span class="st0">&quot;language&quot;</span> content=<span class="st0">&quot;en&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;title&gt;Test RedBean&lt;/title&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;body&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;ul&gt;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$posts</span> = Post::<span class="me2">listAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$posts</span> <span class="kw1">as</span> <span class="re0">$post</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$curPost</span> = <span class="kw2">new</span> Post<span class="br0">&#40;</span><span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">&#039;id&#039;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#039;&lt;li&gt;&lt;strong&gt;&#039;</span>.<span class="re0">$curPost</span>-&gt;<span class="me1">getTitle</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="st0">&#039;&lt;/strong&gt;&lt;br /&gt;&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="re0">$curPost</span>-&gt;<span class="me1">getContent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$comments</span> = <span class="re0">$curPost</span>-&gt;<span class="me1">getRelatedComment</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#039;&lt;ol&gt;&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$comments</span> <span class="kw1">as</span> <span class="re0">$comment</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#039;&lt;li&gt;&#039;</span>.<span class="re0">$comment</span>-&gt;<span class="me1">text</span>.<span class="st0">&#039; (&#039;</span>.<span class="re0">$comment</span>-&gt;<span class="me1">author</span>.<span class="st0">&#039;)&lt;/li&gt;&#039;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#039;&lt;/ol&gt;&lt;/li&gt;&#039;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&lt;/ul&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;/html&gt;</div>
</li>
</ol>
</div>
<p>Посмотрим, что он делает.</p>
<p>1) <strong>Подключаем библиотеку</strong> (строка 2). Тут объяснять нечего, <strong>RedBean</strong> состоит всего из одного файла.</p>
<p>2) <strong>Подключаемся к базе данных и создаем объекты, которые будем в ней хранить</strong> (строка 5).<br />
Обе операции выполняются с помощью метода <code>kickstartDev</code>. В первом параметре мы указываем перечень нужных объектов (они будут создаваться динамически). В остальных параметрах – данные, необходимые для подключения к базе (dns, имя пользователя и пароль).</p>
<p>Предварительно от нас требуется только создать пустую БД. Созданием таблиц, сохранением и чтением данных будет заниматься RedBean.</p>
<p><em>Примечание</em>. Метод <code>kickstartDev</code> переводит библиотеку в т.н. <strong>fluid</strong> режим. При этом если вы измените, количество или названия свойств объектов, то RedBean автоматически изменит структуру таблиц в БД. Этот режим имеет смысл использовать во время разработки. После переноса приложения на «боевой» сервер <code>kickstartDev</code> лучше заменить на <code>kickstartFrozen</code>. Библиотека перейдет во frozen режим, при этом таблицы автоматически изменяться не будут, но и потребление ресурсов сократится.</p>
<p>3) <strong>Создаем данные и сохраняем их в БД</strong> (строки 7-15).</p>
<p>В данном случае создано два объекта типов <code>Post</code> и <code>Comment</code>, каждый из которых содержит несколько свойств.<br />
Обратите внимание, что свойства создаются автоматически. От нас требуется указать только название свойства и его значение.<br />
Мы просто присваиваем значения нужным свойствам и вызываем метод <code>save()</code>, который записывает объект в БД (строка 10).</p>
<p>Объект <code>Comment</code> принадлежит <code>Post</code>. Эту связь мы устанавливаем с помощью метода <code>belongsTo</code>. При этом использовать save не нужно. Сохранение в БД произойдет автоматически.</p>
<p>4) <strong>Читаем данные из базы</strong> (строки 29-40).<br />
Тут тоже все достаточно прозрачно. С помощью статического метода <code>listAll</code> мы получаем массив со всеми объектами типа <code>Post</code>, находящимися в БД.</p>
<p>Чтобы получить доступ к комментариям мы создаем объект типа <code>Post</code> (строка 31) и при этом в качестве параметра указываем <code>id</code>.</p>
<p>После этого мы можем использовать метод <code>getRelatedComment</code> для получения массива с комментариями.<br />
Примечание. Название метода <code>getRelatedComment</code> формируется следующим образом. К приставке <code>getRelated</code> добавляется имя объекта, который мы хотим получить.</p>
<p>Затем в цикле мы выводим комментарии.</p>
<p>В результате выполнения скрипта вы увидите такую страницу.</p>
<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/pic1.png" alt="pic1" title="pic1" width="340" height="82" class="alignnone size-full wp-image-918" /></p>
<p><strong>Теперь посмотрим, что у нас делается с базой данных.</strong></p>
<p>Прежде всего, взгляните на перечень таблиц.</p>
<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/pic2.png" alt="pic2" title="pic2" width="466" height="190" class="alignnone size-full wp-image-919" /></p>
<p>Как видите, RedBean создал 6 таблиц. Три из них (post, comment_post и comment) используются для хранения данных приложения, остальные – используются самой RedBean.</p>
<p>Теперь посмотрим, что сохранено в самих таблицах.</p>
<p><strong>post</strong></p>
<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/pic3.png" alt="pic3" title="pic3" width="366" height="47" class="alignnone size-full wp-image-920" /></p>
<p><strong>comment_post</strong></p>
<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/pic4.png" alt="pic4" title="pic4" width="280" height="48" class="alignnone size-full wp-image-921" /></p>
<p><strong>comment</strong></p>
<p><img src="http://www.simplecoding.org/wp-content/uploads/2009/10/pic5.png" alt="pic5" title="pic5" width="367" height="48" class="alignnone size-full wp-image-922" /></p>
<p>Думаю, вы уже догадались, в чем дело.</p>
<p>Между объектами Post и Comment отношение типа ОДИН-К-МНОГИМ и для его реализации не нужна промежуточная таблица. Т.е. если бы база создавалась вручную, мы бы обошлись всего двумя таблицами. Соответственно, упрощаются и SQL запросы.</p>
<p><strong>Использовать или не использовать?</strong></p>
<p>Это вопрос философский <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . RedBean не единственная ORM библиотека. Например, существуют более мощные <a href="http://propel.phpdb.org/trac/">Propel</a> и <a href="http://www.doctrine-project.org/">Doctrine</a>.</p>
<p>Ответ будет зависеть от требований к конкретному приложению. В общем случае при использовании ORM увеличивается скорость разработки и упрощается поддержка, но при этом растет потребление ресурсов.</p>
<p>К тому же стоит учесть время, необходимое на изучение библиотеки. В этом RedBean значительно превосходит библиотеки типа Doctrine. Вряд ли у вас уйдет больше пары дней на эксперименты с RedBean.</p>
<p>В общем, думаю, что в ряде случаев использование RedBean будет вполне оправданно.</p>
<p>В заключение хочу сказать, что это статью нельзя рассматривать как руководство по использованию библиотеки. Поэтому я очень рекомендую вам почитать документацию на сайте.</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=923&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/uL7oe7u5E9w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/redbean-php-orm-za-i-protiv.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>IE + WebKit? Или просто проапгрейдить IE?</title>
		<link>http://www.simplecoding.org/ie-webkit-ili-prosto-proapgrejdit-ie.html</link>
		<comments>http://www.simplecoding.org/ie-webkit-ili-prosto-proapgrejdit-ie.html#comments</comments>
		<pubDate>Mon, 28 Sep 2009 17:53:31 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Разное]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=916</guid>
		<description><![CDATA[ 
Проблемы IE уже неоднократно обсуждались в этом блоге. Но, похоже, эта тема «вечная» и сегодня я хочу провести небольшой опрос.
На днях мы с Serator&#039;ом обсуждали эту тему и речь зашла о новом плагине от Google для Internet Explorer под названием Google Chrome Frame.
Для читателей, которые, как и я   , пропустили эту новость, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_915" class="wp-caption alignnone" style="width: 225px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/webkit_ie.png" alt="webkit ie" title="webkit ie" width="215" height="174" class="size-full wp-image-915" style="float:left" /><p class="wp-caption-text"> </p></div>
<p><strong>Проблемы IE</strong> уже неоднократно обсуждались в этом блоге. Но, похоже, эта тема «вечная» и сегодня я хочу провести небольшой опрос.</p>
<p>На днях мы с Serator&#039;ом обсуждали эту тему и речь зашла о новом плагине от Google для Internet Explorer под названием <a href="http://googlewavedev.blogspot.com/2009/09/google-wave-in-internet-explorer.html">Google Chrome Frame</a>.</p>
<p>Для читателей, которые, как и я <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , пропустили эту новость, кратко поясню, о чем речь. Этот плагин интегрирует рендерер из движка WebKit в IE.</p>
<p>Т.е. с IE внешне ничего не происходит, но странички он начинает показывать по-другому, также как и Chrome.</p>
<p>Примечание. Официальную статью и скринкаст можно посмотреть <a href="http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html">здесь</a>, а скачать <a href="http://code.google.com/intl/ru/chrome/chromeframe/">здесь</a>. Кроме того, был соответствующий <a href="http://habrahabr.ru/blogs/google_chrome/70351/">топик на хабре</a>.</p>
<p>Для того, чтобы плагин заработал нужно в заголовок страницы добавить тег</p>
<p><code>&lt;meta http-equiv="X-UA-Compatible" content="chrome=1"&gt;</code></p>
<p>При этом плагин совместим с 6-ой версией IE и более поздними.</p>
<p>Но, как вы понимаете, плагин это хорошо, <strong>но кто им пользоваться будет?</strong></p>
<p>С одной стороны, установив его, вы сохраняете привычный интерфейс, и это, безусловно, плюс. Но с другой стороны, во-первых, требуется поддержка со стороны разработчиков сайта и, во-вторых, возникает вопрос: «Что проще для пользователя? Перейти на другой браузер? Или обновить IE до 8-ой версии? Или этот плагин установить?».</p>
<p>В общем, нам с Serator&#039;ом очень интересно узнать ваше мнение.</p>
<p>Итак, вопрос.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p><em>Примечание</em>. Форма опроса в RSS ридерах не работает, поэтому чтобы проголосовать вам нужно перейти на сайт.</p>
<p>Все дополнения, пожелания, замечания оставляйте в комментариях, обсудим <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=916&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/O2XyKcUc-WY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/ie-webkit-ili-prosto-proapgrejdit-ie.html/feed</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Передача параметров в JavaScript файлы</title>
		<link>http://www.simplecoding.org/peredacha-parametrov-v-javascript-fajly.html</link>
		<comments>http://www.simplecoding.org/peredacha-parametrov-v-javascript-fajly.html#comments</comments>
		<pubDate>Sat, 26 Sep 2009 10:18:42 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=913</guid>
		<description><![CDATA[ 
Приветствую всех!
Сегодня я хочу обсудить два способа передачи параметров в JavaScript файлы.
Прежде всего, объясню, в чем заключается проблема. Обычно в конфигурационных файлах серверных (PHP) скриптов хранится множество настроек. И к некоторым из них нужно получить доступ из JavaScript. Если все эти параметры собраны в одном месте (конфигурационном файле или БД), то значительно упростится поддержку [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_912" class="wp-caption alignnone" style="width: 281px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/js_parameters.png" alt="js parameters" title="js parameters" width="271" height="213" style="float:left" class="size-full wp-image-912" /><p class="wp-caption-text"> </p></div>
<p><strong>Приветствую всех!</strong></p>
<p>Сегодня я хочу обсудить <strong>два способа передачи параметров в JavaScript файлы</strong>.</p>
<p>Прежде всего, объясню, в чем заключается проблема. Обычно в конфигурационных файлах серверных (PHP) скриптов хранится множество настроек. И к некоторым из них нужно получить доступ из JavaScript. Если все эти параметры собраны в одном месте (конфигурационном файле или БД), то значительно упростится поддержку приложения.</p>
<p>Существует два широко распространенных решения этой задачи.</p>
<p><strong>1) Генерация JS кода с помощью серверного скрипта.</strong></p>
<p>Тут нужно помнить о том, что любой запуск скриптов на сервере создает дополнительную нагрузку. Поэтому генерировать JS скрипты целиком не правильно. Гораздо проще вставить небольшой фрагмент JS кода, который создаст массив с параметрами, прямо внутрь страницы, а основную часть JS кода разместить в статичных файлах.</p>
<p>Поясню сказанное на примере.</p>
<p>Допустим у нас есть страница (index.php) и js файл (my-scripts.js). Нам нужно передать несколько параметров из массива $config.</p>
<p>Страница будет выглядеть так.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">config</span> = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; par1:&lt;?php echo $config<span class="br0">&#91;</span><span class="st0">&#039;par1&#039;</span><span class="br0">&#93;</span>; ?&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;script type=<span class="st0">&quot;text/javascript&quot;</span> src=<span class="st0">&quot;my-script.js&quot;</span>&gt;&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>Как видите, мы создали глобальный хеш (<code>$.config</code>) и установили для его элемента <code>par1</code> значение из массива <code>$config</code>.</p>
<p><em>Примечание</em>. Для работы этого примера нужно подключить библиотеку <a href="http://jquery.com/">jQuery</a>.</p>
<p>Теперь хеш <code>$.config</code> можно использовать в <code>my-script.js</code>. Например, так</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span>$.<span class="me1">config</span>.<span class="me1">par1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p><em>Примечание</em>. Если вам нужно передавать сложные структуры с параметрами, то будет удобнее использовать JSON формат.</p>
<p><strong>2) Передача параметров в атрибуте src скрипта.</strong></p>
<p>Этот способ используется загрузчиком библиотеки <a href="http://script.aculo.us/">Script.aculo.us</a>.</p>
<p>Идея следующая.</p>
<p>1) Необходимые параметры добавляются прямо к адресу скрипта. Напрмер, так</p>
<p><code>src="my-script.js?par1=myValue&#038;par2=value2</code></p>
<p>Т.е. мы формируем GET запрос. Но естественно статичный JS файл его обработать не может.</p>
<p>2) Чтобы получить доступ к этим параметрам, мы добавляем в JS файл код, который:</p>
<p>2.1) находит соответствующий тег <code>script</code>;</p>
<p>2.2) читает его атрибут <code>src</code>;</p>
<p>2.3) получает строку с параметрами, например, с помощью такого регулярного выражения<br />
<code>/my-script\.js(\?.*)?$/</code></p>
<p>2.4) разбирает строку с параметрами (это можно сделать с помощью функции <code>split</code>).</p>
<p>Приводить пример для этого способа я не буду, т.к., во-первых, его можно посмотреть в исходниках script.aculo.us (файл scriptaculous.js, строки 48-56), а во-вторых, на мой взгляд, он обладает несколькими серьезными недостатками.</p>
<p>1) Вы не сможете передать большой объем данных таким способом, т.к. существуют ограничения на длину URL.</p>
<p>2) Значительно усложняется код как серверной, так и клиентской частей приложения. Сервер должен преобразовать массив с данными в строку, а браузер выполняет обратную операцию.</p>
<p>В общем, я понимаю, почему этот способ использовали разработчики script.aculo.us. Они передают только названия компонентов библиотеки, которые нужно подключить. И для пользователя такая запись перечня компонентов выглядит проще, чем вставка отдельного тега script. Но для передачи более сложных параметров этот метод подходит плохо.</p>
<p>На этом известные мене способы передачи параметров заканчиваются <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Если у вас возникли идеи, пишите, буду рад обсудить!</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=913&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/hIXnBrQrtxo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/peredacha-parametrov-v-javascript-fajly.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Circle Tasks 2: новая версия моего ToDo скрипта</title>
		<link>http://www.simplecoding.org/circle-tasks-2-novaya-versiya-moego-todo-skripta.html</link>
		<comments>http://www.simplecoding.org/circle-tasks-2-novaya-versiya-moego-todo-skripta.html#comments</comments>
		<pubDate>Fri, 18 Sep 2009 10:07:09 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Web разработка]]></category>
		<category><![CDATA[Разное]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=907</guid>
		<description><![CDATA[ 
Приветствую всех читателей!
На днях я закончил работу над второй версией ToDo скрипта и теперь хочу о нёй рассказать   И, самое главное, почитать ваши отзывы.
Т.к. после релиза первой версии прошло уже больше месяца, я кратко напомню, о чем идет речь.
Думаю, представить себе простейший ToDo список могут все. Это просто перечень дел с отметками [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_909" class="wp-caption alignnone" style="width: 238px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/circle_tasks_logo.png" alt="circle tasks logo" title="circle tasks logo" width="228" height="145" class="size-full wp-image-909" style="float:left" /><p class="wp-caption-text"> </p></div>
<p><strong>Приветствую всех читателей!</strong></p>
<p>На днях я закончил работу над второй версией ToDo скрипта и теперь хочу о нёй рассказать <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  И, самое главное, почитать ваши отзывы.</p>
<p>Т.к. после релиза <a href="http://www.simplecoding.org/php-skript-todo-s-kartinkami.html">первой версии</a> прошло уже больше месяца, я кратко напомню, о чем идет речь.</p>
<p>Думаю, представить себе простейший <strong>ToDo список</strong> могут все. Это просто перечень дел с отметками «выполнено / не выполнено».</p>
<p>Но существует множество вариантов усовершенствования такого списка. Например, можно придумать различные состояния для задач и обозначить их какими-нибудь символами. Такой подход значительно упрощает работу с большими списками, т.к. вы можете сортировать и фильтровать задачи по различным критериями (состояние, дата).</p>
<p>Для этого скрипта я использовал одну из таких систем обозначений. Её разработал <a href="http://font.is/?p=790">Sigurdur Armannsson</a>. Подробно её описание вы найдете в <a href="http://www.simplecoding.org/php-skript-todo-s-kartinkami.html">предыдущей статье</a>.</p>
<p>Сейчас речь пойдет именно об изменениях по сравнению с предыдущей версией.</p>
<p>Сразу дам ссылки на страницу с демо версией и архив.</p>
<p><a href="http://demosites.org.ua/simpletasks/"><img src="http://www.simplecoding.org/wp-content/themes/three_cols/images/demo_btn_green.png" alt="демонстрационный пример" /></a></p>
<p><a href='http://www.simplecoding.org/wp-content/uploads/2009/09/circle_tasks.zip'><img src="http://www.simplecoding.org/wp-content/themes/three_cols/images/download_btn_blue.png" alt="архив с исходным кодом" /></a></p>
<p>Для входа можно использовать demo аккаунт (логин: <code>admin@todo.loc</code>, пароль: <code>password</code>) или создать нового пользователя (ссылка «Регистрация» под. формой входа). Только учтите, что приложение позволяет изменять пароль, и если кто-то успеет изменить его до вас, то вам останется только регистрация.</p>
<p>1) <strong>Изменилось название</strong> <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Теперь скрипт называется <strong>Circle Tasks</strong>. Это название ближе к названию оригинала.</p>
<p>2) <strong>Изменился дизайн</strong>. Тут изменения не очень большие. Подобраны более подходящие иконки для операций «Изменить» и «Удалить», перерисованы иконки состояний задач. Изменена цветовая гамма (надеюсь в лучшую сторону <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>3) <strong>Интерфейс</strong>. Вот здесь изменений больше всего.</p>
<p>Во-первых, я учел отличные рекомендации <a href="http://blog.petrusha.name/">Steward</a> и убрал inline редакторы. Сначала мне казалось, что они будут ускорять работу, но оказалось что это не так. Теперь чтобы изменить задачу нужно кликнуть по кнопке «Изменить», откроется форма, содержащая все необходимые поля.</p>
<div id="attachment_910" class="wp-caption alignnone" style="width: 460px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/update_note.png" alt="update_note" title="update_note" width="450" height="313" class="size-full wp-image-910" /><p class="wp-caption-text"> </p></div>
<p>Во-вторых, в меню добавлен пункт «<strong>Настройки</strong>». Он ведет на страницу, которая позволяет <strong>изменить язык приложения и пароль</strong>.</p>
<p>Предпочитаемый язык сохраняется отдельно для каждого пользователя в базе данных. Если точно определить язык не возможно (например, вы не залогинились), то используются данные из заголовка <code>Accept-Language</code>, который отправляет ваш браузер.</p>
<p>На данный момент доступны русский и английский языки.</p>
<p>4) <strong>Поддержка неограниченного количества пользователей</strong>.</p>
<p>Я хочу сразу пояснить, что это приложение задумывалось как однопользовательское. А «поддержка неограниченного количества пользователей» означает, что можно регистрировать сколько угодно пользователей, но ToDo список будет у каждого свой. Отправлять задания другим пользователям нельзя.</p>
<p>И, честно говоря, я сомневаюсь, что этот функционал нужно добавлять. Т.к. в результате получится совершенно другое приложение, более сложное и рассчитанное на другую аудиторию. Примеры таких приложений вы можете посмотреть <a href="http://37signals.com/">здесь</a>.</p>
<p>В общем, если я когда-нибудь и займусь такой разработкой, то это будет совершенно другое приложение, а не очередная версия Circle Tasks.</p>
<p>5) <strong>Уменьшился размер JS файлов</strong>. В основном за счет замены <a href="http://jqueryui.com/">jQuery UI</a> () на <a href="http://flowplayer.org/tools/index.html">JQuery Tools</a>.</p>
<p>Кстати я первый раз использовал JQuery Tools и впечатления самые положительные. Функционала, конечно, меньше, чем в jQuery UI, но его должно хватить в 90% случаев. Легко изменяется оформление компонентов. И главное преимущество – размер. В общем, всем рекомендую попробовать.</p>
<p>Об основных изменениях я рассказал. Если у вас возникли вопросы, замечания или пожелания, пишите, буду рад на них ответить!</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=907&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/KLrJPNe_Ds0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/circle-tasks-2-novaya-versiya-moego-todo-skripta.html/feed</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Собственное оформление комментариев в WordPress</title>
		<link>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html</link>
		<comments>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html#comments</comments>
		<pubDate>Tue, 15 Sep 2009 08:28:32 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=905</guid>
		<description><![CDATA[ 
Вы, конечно, знаете, что новые версии WordPress поддерживают древовидные комментарии.
Для каждого такого комментария движок создаёт довольно сложную разметку с большим количеством классов, которые можно использовать для оформления.
В идеале разработчик темы WordPress должен использовать только параметры функции wp_list_comments (выводит список комментариев) и CSS стили.
Но идеальных вещей не существует в природе и WordPress – не исключение [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_904" class="wp-caption alignnone" style="width: 260px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/wp-comments.png" alt="wordpress comments" title="wordpress comments" width="250" height="98" class="size-full wp-image-904" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>Вы, конечно, знаете, что новые версии <a href="http://wordpress.org/">WordPress</a> поддерживают <strong>древовидные комментарии</strong>.</p>
<p>Для каждого такого комментария движок создаёт довольно сложную разметку с большим количеством классов, которые можно использовать для оформления.</p>
<p>В идеале разработчик темы WordPress должен использовать только параметры функции <code>wp_list_comments</code> (выводит список комментариев) и <strong>CSS</strong> стили.</p>
<p>Но идеальных вещей не существует в природе и WordPress – не исключение <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>В общем, стандартное оформление комментариев содержит несколько очень неприятных <strong>недостатков</strong>.</p>
<p>Например.</p>
<p>После имени комментатора выводится слово <code>says:</code>, которое нельзя изменить с помощью параметров <code>wp_list_comments</code>. Хотя, текст ссылки <code>Reply</code> можно изменить с помощью этой функции</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">wp_list_comments<span class="br0">&#40;</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#039;reply_text&#039;</span>=&gt;<span class="st0">&#039;Ответить&#039;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Вывод даты имеет фиксированный формат, что-то вроде <code>сентября 7, 2009 at 9:29 am</code></p>
<p><em>Примечание</em>. Я использую оригинальную английскую версию <strong>WordPress</strong>, вполне возможно, что разработчики локализированных версий перевели надписи и поправили формат даты. Но проблему это не решает. Разработчик темы все равно вынужден использовать те настройки, которые есть. К тому же получается, что тема будет зависеть от локализации движка.</p>
<p>Проблема заключается в том, что эти настройки прописаны в файле <code>wp-includes/comment-templates.php</code>. Т.е. если мы внесем в него изменения, они будут перезаписаны после очередного обновления движка, которые, кстати, появляются довольно часто.</p>
<p>Кстати, строка <code>1226</code> в файле <code>wp-includes/comment-templates.php</code> выглядит так:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw3">printf</span><span class="br0">&#40;</span>__<span class="br0">&#40;</span><span class="st0">&#039;&lt;cite class=&quot;fn&quot;&gt;%s&lt;/cite&gt; &lt;span class=&quot;says&quot;&gt;says:&lt;/span&gt;&#039;</span><span class="br0">&#41;</span>, get_comment_author_link<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Видите, мы может изменить оформление слова <code>says:</code> (с помощью CSS класса <code>says</code>), но не можем изменить сам текст.</p>
<p>Для того, чтобы решить эти проблемы нужно <strong>определить собственную функцию, формирующую дерево комментариев</strong>.</p>
<p>1) В файле <code>comments.php</code> вашей темы в параметре <code>callback</code> функции <code>wp_list_comments</code> указываем имя функции, которую нужно использовать для вывода комментариев.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">wp_list_comments<span class="br0">&#40;</span><span class="st0">&#039;type=comment&amp;callback=mytheme_comment&#039;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>В данном случае это <code>mytheme_comment</code>.</p>
<p>2) Создаем саму функцию. Она должна находиться в файл <code>functions.php</code> вашей темы.</p>
<p>Заново писать всю функцию целиком нет никакого смысла (разве что вы хотите сделать что-то неповторимое <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Лучше использовать <a href="http://codex.wordpress.org/Template_Tags/wp_list_comments">готовый шаблон</a></p>
<p>Он полностью совпадает со стандартным выводом комментариев в WP.<br />
Теперь можно немного его подправить.</p>
<p><em>Примечание</em>. Почитать о форматировании дат можно <a href="http://ua.php.net/manual/en/function.date.php">здесь</a>.</p>
<p>У меня получилось примерно следующее.</p>
<p>Строка с форматами даты и времени.</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1">&lt;div <span class="kw2">class</span>=<span class="st0">&quot;comment-meta commentmetadata&quot;</span>&gt;&lt;a href=<span class="st0">&quot;&lt;?php echo htmlspecialchars( get_comment_link( $comment-&gt;comment_ID ) ) ?&gt;&quot;</span>&gt;&lt;?php <span class="kw3">printf</span><span class="br0">&#40;</span>__<span class="br0">&#40;</span><span class="st0">&#039;%1$s в %2$s&#039;</span><span class="br0">&#41;</span>, get_comment_date<span class="br0">&#40;</span><span class="st0">&#039;j F Y&#039;</span><span class="br0">&#41;</span>, &nbsp;get_comment_time<span class="br0">&#40;</span><span class="st0">&#039;G:i&#039;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ?&gt;&lt;/a&gt;&lt;?php edit_comment_link<span class="br0">&#40;</span>__<span class="br0">&#40;</span><span class="st0">&#039;(Edit)&#039;</span><span class="br0">&#41;</span>,<span class="st0">&#039; &nbsp;&#039;</span>,<span class="st0">&#034;</span><span class="br0">&#41;</span> ?&gt;&lt;/div&gt;</div>
</li>
</ol>
</div>
<p>Слово <code>says:</code> я просто удалил.</p>
<p>Кстати, будьте аккуратны при использовании этого метода. Учтите, что на вывод комментариев влияют не только разметка и стили, указанные в теме WordPress, но и настройки, сделанные через админку движка.</p>
<p>Например, если вы будете уменьшать размер шрифта вложенных комментариев или сделаете большой отступ слева, то ваш дизайн может стать совсем не привлекательным без ограничения на количество уровней вложенности комментариев.</p>
<p>В общем, тщательно тестируйте все ваши нововведения.</p>
<p>Удачи!</p>
<p><strong>Интересно почитать</strong></p>
<p><a href="http://eutem.com" title="Разработка сайтов в Минске">Разработка сайтов в Минске</a>. Студия веб-дизайна в Минске.</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=905&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/vLdYnTYo1Dg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Боремся с Magic Quotes</title>
		<link>http://www.simplecoding.org/boremsya-s-magic-quotes.html</link>
		<comments>http://www.simplecoding.org/boremsya-s-magic-quotes.html#comments</comments>
		<pubDate>Sat, 12 Sep 2009 07:35:25 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web разработка]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=902</guid>
		<description><![CDATA[ 
На днях я столкнулся с довольно неприятной ситуацией. Скрипт, который прекрасно работал на локальном сервере начал выдавать ошибки на сервере хостера.
Проблема оказалась мелкой и я все быстро исправил, но эта ситуация напомнила мне о законе подлости. Как только забываешь о тестировании – скрипты сразу перестают работать. Не зависимо от того, насколько они простые.  [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_903" class="wp-caption alignnone" style="width: 310px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/php_magic_quotes.png" alt="php magic quotes" title="php magic quotes" width="300" height="145" class="size-full wp-image-903" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>На днях я столкнулся с довольно неприятной ситуацией. Скрипт, который прекрасно работал на локальном сервере начал выдавать ошибки на сервере хостера.</p>
<p>Проблема оказалась мелкой и я все быстро исправил, но эта ситуация напомнила мне о законе подлости. <strong>Как только забываешь о тестировании – скрипты сразу перестают работать</strong>. Не зависимо от того, насколько они простые. <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>В данном случае дело было во включенных <strong>Magic Quotes</strong> (волшебных кавычках, хорошее название, появляются как по волшебству там, где не надо <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>Вообще-то, использование  Magic Quotes не рекомендуемая практика.</p>
<p>В соответствующем разделе <a href="http://ua2.php.net/manual/en/security.magicquotes.php">PHP manual</a> ясно об этом сказано.</p>
<blockquote><p><strong>Warning</strong></p>
<p>This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.</p></blockquote>
<blockquote><p><strong>Предупреждение</strong></p>
<p>Эта возможность считается устаревшей начиная с PHP 5.3.0 и будет удалена начиная с PHP 6.0.0. Рассчитывать на эту возможность крайне не рекомендуется.</p></blockquote>
<p>Кратко поясню смысл этой функции. Она перехватывает данные, которые получает скрипт (массивы $_POST, $_GET и т.д.) и экранирует в них специальные символы.</p>
<p>Была разработана для защиты от хакерских атак вроде <strong>SQL Injection</strong>.</p>
<p>Но на практике от нее больше проблем, чем пользы.</p>
<p>Во-первых, 100% защиты она не обеспечивает. Т.е. вам все равно <strong>нужно самостоятельно проверять полученные данные</strong> (их тип, диапазон допустимых значений и т.п.). К тому же экранирование символов выполняется автоматически практически всеми библиотеками для работы с БД.</p>
<p>Во-вторых, часто нужны <strong>не</strong> экранированные данные.</p>
<p>Например, в моем случае ситуация была такой.</p>
<p>1) Клиент (браузер) передавал строку в формате <strong>json</strong>.<br />
2) PHP при включенной Magic Quotes экранировал спец. символы.<br />
3) функция <code>json_decode</code> возвращала NULL. <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Почему хостеры включают Magic Quotes – вопрос отдельный. Может быть, хотят немного подстраховаться от начинающих разработчиков <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Или есть какие-то другие причины. Но в любом случае, вы можете легко ее отключить.</p>
<p>Посмотреть текущие настройки можно с помощью <code>phpinfo()</code>. (если Magic Quotes включена, в разделе  <code>Configure Command</code>  будет строка  <code>--enable-magic-quotes</code>).</p>
<p>Для отключения создаем в папке со скриптами файл <code>.htaccess</code> с одной строчкой.</p>
<p><code>php_flag magic_quotes_gpc Off</code></p>
<p>Отключает Magic quotes для входящих данных из массивов GET/POST/Cookie.</p>
<p>Или добавляем эту же строчку в существующий <code>.htaccess</code>.</p>
<p><em>Примечание</em>. Естественно, Magic Quotes можно отключить и в php.ini, но на shared хостинге у вас к нему доступа нет.</p>
<p>Подробнее об отключении Magic quotes можно почитать в <a href="http://ua2.php.net/manual/en/security.magicquotes.disabling.php">PHP Manual</a>.</p>
<p>Кстати, в нем есть пример функции, которая выполняет обратную операцию (удаляет слеши) &#8211; это на случай если хостер отключил поддержку <code>.htaccess</code>. Но, честно говоря, в такой ситуации я бы подумал о смене хостера.</p>
<p>До встречи!</p>
<img src="http://www.simplecoding.org/?ak_action=api_record_view&id=902&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/simplecoding/~4/JHWbJx2nAN8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/boremsya-s-magic-quotes.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
