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

<channel>
	<title>Блог Spoofi &#187; Вебстроительство</title>
	<atom:link href="http://www.spoofi.ru/category/webstroitelstvo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.spoofi.ru</link>
	<description>Блог линуксоида, веб программиста и велотуриста</description>
	<lastBuildDate>Wed, 08 Feb 2012 15:10:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Интеграция Codeigniter и Smarty</title>
		<link>http://www.spoofi.ru/2011/07/20/codeigniter-and-smarty-integration/</link>
		<comments>http://www.spoofi.ru/2011/07/20/codeigniter-and-smarty-integration/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 18:04:31 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[Вебстроительство]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smarty]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=6845</guid>
		<description><![CDATA[Сегодняшний пост родился благодаря тому, что я начал разбираться с PHP-фреймворком Codeigniter. Умеет он многое, жизнь облегчает довольно таки хорошо, но вот его шаблонизатор мне как-то не нравится. Поэтому я решил связать Codeigniter и очень известный шаблонизатор Smarty (который кстати используется в CMS Livestreet и многих других). Для начала&#160;&#8212; решил погуглить. Нашел два варианта, на [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/07/20/codeigniter-and-smarty-integration/">Интеграция Codeigniter и Smarty</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2011/07/codeigniter-smarty.jpg"><img class="aligncenter size-full wp-image-6846" title="codeigniter-smarty" src="http://www.spoofi.ru/wp-content/uploads/2011/07/codeigniter-smarty.jpg" alt="codeigniter smarty Интеграция Codeigniter и Smarty" width="498" height="145" /></a><br />
Сегодняшний пост родился благодаря тому, что я начал разбираться с PHP-фреймворком <strong>Codeigniter</strong>. Умеет он многое, жизнь облегчает довольно таки хорошо, но вот его шаблонизатор мне как-то не нравится. Поэтому я решил связать Codeigniter и очень известный шаблонизатор <strong>Smarty</strong> (который кстати используется в CMS <a title="Категория блога, посвященная Livestreet CMS" href="/category/webstroitelstvo/livestreet-webstroitelstvo/">Livestreet</a> и многих других).</p>
<p>Для начала&nbsp;&mdash; решил погуглить. Нашел два варианта, на вид разных, но когда присмотрелся понял, что практически они представляют из себя одно и то же. Попробовал сделать&nbsp;&mdash; не получилось, в логи сыпались ошибки. Тут я понял, что эти варианты были для старых версий, а для моих <strong>Codeigniter 2.0.2 и Smarty 3.0.8</strong> это не подходило. Тогда я начал искать другой путь, ведь использовать Smarty в Codeigniter&#39;е для меня удобней и привычней. <span id="more-6845"></span></p>
<p>Решение проблемы я нашел спустя минут 10, оказалось оно не сложным, разница между предыдущими вариантами была мала, но из-за нее все и не работало.</p>
<p><strong>Собственно решение задачки:</strong></p>
<p><strong>1.</strong> Скачиваем и устанавливаем Codeigniter. Скачиваем Smarty, файлы из папки libs копируем в <em>application/libraries/smarty/</em>, предварительно создав папочку <em>smarty</em>.</p>
<p><strong>2.</strong> Создаем в папке <em>application/libraries/</em> файл <em>mysmarty.php</em> и добавляем в него строки:</p>
<blockquote>
<div class="codesnip-container" ><span style="color: #666666;">&lt;?</span>php<br />
<span style="color: #008000;"><strong>require_once</strong></span> <span style="color: #ba2121;">&laquo;smarty/Smarty.class.php&raquo;</span>;</div>
<p><span style="color: #008000;"><strong>class</strong></span> <span style="color: #0000ff;"><strong>Mysmarty</strong></span> <span style="color: #008000;"><strong>extends</strong></span> Smarty {</p>
<p><span style="color: #008000;"><strong>function</strong></span> <span style="color: #0000ff;">__construct</span>() {<br />
<span style="color: #008000;"><strong>parent</strong></span><span style="color: #666666;">::</span><span style="color: #7d9029;">__construct</span>();<br />
<span style="color: #19177c;">$this</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">template_dir</span> <span style="color: #666666;">=</span> <span style="color: #ba2121;">&laquo;templates/skin/&raquo;</span>;<br />
<span style="color: #19177c;">$this</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">compile_dir</span>  <span style="color: #666666;">=</span> <span style="color: #ba2121;">&laquo;templates/compile/&raquo;</span>;<br />
}<br />
}<br />
<span style="color: #bc7a00;">?&gt;</span></p>
</blockquote>
<p>В данном коде подразумевается, что Ваши шаблоны будут храниться в папке <em>templates/skin/</em> а компилированные файлы в <em>templates/compile/</em>, поэтому если это Вам не подходит&nbsp;&mdash; нужно заменить на свой вариант.</p>
<p><strong>3.</strong> Добавим подгрузку библиотеки Smarty в &laquo;автозагрузку&raquo;. Для этого в файле <em>application/config/autoload.php</em> ищем объявление массива $autoload['libraries'] и добавляем туда значение mysmarty:</p>
<blockquote>
<div class="codesnip-container" ><span style="color: #19177c;">$autoload</span>[<span style="color: #ba2121;">'libraries'</span>] <span style="color: #666666;">=</span> <span style="color: #008000;"><strong>array</strong></span>(<span style="color: #ba2121;">&#39;mysmarty&#39;</span>);</div>
</blockquote>
<p>4. Проверяем что получилось. Создаем в папке шаблонов файл, например index.tpl и добавляем в него:</p>
<blockquote>
<p>{$test}</p>
</blockquote>
<p>Создаем новый контроллер, для этого в папке <em>application/controllers/</em> создаем файл, например main.php и помещаем в него код:</p>
<blockquote>
<div class="codesnip-container" ><span style="color: #666666;">&lt;?</span>php<br />
<span style="color: #008000;"><strong>class</strong></span> <span style="color: #0000ff;"><strong>Main</strong></span> <span style="color: #008000;"><strong>extends</strong></span> CI_Controller<br />
{<br />
<span style="color: #008000;"><strong>function</strong></span> <span style="color: #0000ff;">index</span>() {<br />
<span style="color: #19177c;">$this</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">mysmarty</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">assign</span>(<span style="color: #ba2121;">&#39;test&#39;</span>, <span style="color: #ba2121;">&#39;Hello, world!&#39;</span>);<br />
<span style="color: #19177c;">$this</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">mysmarty</span><span style="color: #666666;">-&gt;</span><span style="color: #7d9029;">display</span>(<span style="color: #ba2121;">&#39;index.tpl&#39;</span>);<br />
}<br />
}<br />
<span style="color: #bc7a00;">?&gt;</span></div>
</blockquote>
<p>теперь открываем в браузере http://your-address.ltd/main/ и должны увидеть классику жанра&nbsp;&mdash; &laquo;Hello, world!&raquo;.</p>
<p>Буду очень рад, если эта заметка кому-то поможет.<br />
Profit!</p>
<p>Кстати, уже давно присмотрел себе новый телефон&nbsp;&mdash; HTC Wildfire. Но пока я думал и копил деньги появилась новая модель&nbsp;&mdash; Wildfire S. Теперь можно <a href="http://quke.ru/shop/UID_1971_htc_wildfire_s.html" title="htc wildfire s">купить Htc Wildfire S с доставкой</a> и не мучится. Осталось только отделить нужную сумму.</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/07/20/codeigniter-and-smarty-integration/">Интеграция Codeigniter и Smarty</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2011/07/20/codeigniter-and-smarty-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InstantCMS&#160;&#8212; дополнительные поля для контактов</title>
		<link>http://www.spoofi.ru/2011/06/01/instantcms-dopolnitelnye-polya-dlya-kontaktov/</link>
		<comments>http://www.spoofi.ru/2011/06/01/instantcms-dopolnitelnye-polya-dlya-kontaktov/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 03:52:04 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[InstantCMS]]></category>
		<category><![CDATA[instantcms]]></category>
		<category><![CDATA[контакты]]></category>
		<category><![CDATA[хак]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=6398</guid>
		<description><![CDATA[Буквально на днях я впервые столкнулся с бесплатной цмской для создания социалок&#160;&#8212; InstantCMS. Мне требовалось добавить новые поля в профили пользователей для контактов (jabber, в контакте, фейсбук, скайп и прочие). В самом движке реализовано только поле с ICQ и E-mail. Меня это никак не устраивало и я решил погуглить. Ничего толкового не нашел, да и [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/06/01/instantcms-dopolnitelnye-polya-dlya-kontaktov/">InstantCMS&nbsp;&mdash; дополнительные поля для контактов</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2011/05/instantcms-dopolnitelnie-polya-kontaktov.png"><img src="http://www.spoofi.ru/wp-content/uploads/2011/05/instantcms-dopolnitelnie-polya-kontaktov.png" alt="instantcms dopolnitelnie polya kontaktov InstantCMS   дополнительные поля для контактов" title="instantcms-dopolnitelnie-polya-kontaktov" style="max-width: 559px; max=height: 192px;" width="100%" class="alignleft size-full wp-image-6399" /></a><br />
Буквально на днях я впервые столкнулся с бесплатной цмской для создания социалок&nbsp;&mdash; InstantCMS. Мне требовалось добавить новые поля в профили пользователей для контактов (jabber, в контакте, фейсбук, скайп и прочие). В самом движке реализовано только поле с ICQ и E-mail. Меня это никак не устраивало и я решил погуглить. Ничего толкового не нашел, да и посчитал, что самому сделать будет быстрее и опыт прибавиться. Я не ошибался... <span id="more-6398"></span></p>
<p>И так преступим.<br />
Все действия выполняются на InstantCMS 1.8, с дефолтным шаблоном. Думаю, что для остальных версий все будет аналогично.</p>
<p>Первое что сделаем&nbsp;&mdash; создадим поле для нового типа контакта. Я покажу пример с jabber&#39;ом. </p>
<p>Открываем файл <em>templates/_default_/components/com_users_edit_profile.tpl</em>. Находим следующие строки:</p>
<div class="codesnip-container" >&lt;tr&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;{$LANG.NUMBER_ICQ} :&lt;/strong&gt;&lt;/td&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;input name=&quot;icq&quot; class=&quot;text-input&quot; type=&quot;text&quot; id=&quot;icq&quot; style=&quot;width:300px&quot; value=&quot;{$usr.icq}&quot;/&gt;&lt;/td&gt;<br />
                    &lt;/tr&gt;</div>
<p>И после них вставляем:</p>
<div class="codesnip-container" >&lt;tr&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;{$LANG.JID} :&lt;/strong&gt;&lt;/td&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;input name=&quot;jid&quot; class=&quot;text-input&quot; type=&quot;text&quot; id=&quot;jid&quot; style=&quot;width:300px&quot; value=&quot;{$usr.jid}&quot;/&gt;&lt;/td&gt;<br />
                    &lt;/tr&gt;</div>
<p>После этого в профиле появится поле, в которое можно будет ввести свой JID.</p>
<p>Далее, в этом же файле ищем строки:</p>
<div class="codesnip-container" >&lt;tr&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;{$LANG.SHOW_ICQ}:&lt;/strong&gt;&lt;/td&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;<br />
                            &lt;input name=&quot;showicq&quot; type=&quot;radio&quot; value=&quot;1&quot; {if $usr.showicq}checked{/if}/&gt; {$LANG.YES}<br />
                            &lt;input name=&quot;showicq&quot; type=&quot;radio&quot; value=&quot;0&quot; {if !$usr.showicq}checked{/if}/&gt; {$LANG.NO}<br />
                        &lt;/td&gt;<br />
                    &lt;/tr&gt;</div>
<p>И после них вставляем следующие:</p>
<div class="codesnip-container" >&lt;tr&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;{$LANG.SHOW_JID}:&lt;/strong&gt;&lt;/td&gt;<br />
                        &lt;td valign=&quot;top&quot;&gt;<br />
                            &lt;input name=&quot;showjid&quot; type=&quot;radio&quot; value=&quot;1&quot; {if $usr.showjid}checked{/if}/&gt; {$LANG.YES}<br />
                            &lt;input name=&quot;showjid&quot; type=&quot;radio&quot; value=&quot;0&quot; {if !$usr.showjid}checked{/if}/&gt; {$LANG.NO}<br />
                        &lt;/td&gt;<br />
                    &lt;/tr&gt;</div>
<p>Сохраняем файл. Этим действием мы добавили выбор&nbsp;&mdash; показывать или нет jabber id в профиле.</p>
<p>Если вы посмотрите в настройки профиля то увидите, что поле есть, но оно не подписано. Все верно, мы еще не добавили новые данные в файл языка. Это я сделаю в конце поста, так что читаем дальше.</p>
<p>Открываем файл <em>components/users/frontend.php</em>.<br />
Ищем строки:</p>
<div class="codesnip-container" >$icq            = $inCore-&gt;request (&#39;icq&#39;, &#39;str&#39;);<br />
                                        $icq            = preg_replace (&#39;/([^0-9])/i&#39;, &#39;&#39;, $icq);</p>
<p>					$showicq        = $inCore-&gt;request (&#39;showicq&#39;, &#39;int&#39;);</p>
</div>
<p>и сразу после них вставляем:</p>
<div class="codesnip-container" >$jid            = $inCore-&gt;request (&#39;jid&#39;, &#39;str&#39;);<br />
					$showjid        = $inCore-&gt;request (&#39;showjid&#39;,&#39;int&#39;);</div>
<p>Чуть дальше в этом же файле есть строки:</p>
<div class="codesnip-container" >$sql = &quot;UPDATE cms_user_profiles<br />
						 		SET city = &#39;$city&#39;,<br />
									description = &#39;$description&#39;,<br />
									showmail=&#39;$showmail&#39;,<br />
									showbirth=&#39;$showbirth&#39;,<br />
									showicq=&#39;$showicq&#39;,</div>
<p>Сразу после них вставляем:</p>
<div class="codesnip-container" >showjid=&#39;$showjid&#39;,</div>
<p>Еще чуть ниже:</p>
<div class="codesnip-container" >SET birthdate=&#39;$birthdate&#39;,<br />
									email=&#39;$email&#39;,<br />
									icq=&#39;$icq&#39;,</div>
После вставляем:
<div class="codesnip-container" >jid=&#39;$jid&#39;,</div>
Остается малость. Открываем файл <em>components/users/model.php</em><br />
Ищем строки:
<div class="codesnip-container" >$sql = "SELECT<br />
				u.id as id,<br />
				u.login,<br />
				u.nickname,<br />
				u.email,<br />
				u.icq,</div>
<p>Сразу после них добавляем:</p>
<div class="codesnip-container" >u.jid,</div>
<p>В этом же файле ищем:</p>
<div class="codesnip-container" >p.city, p.description, p.showmail, p.showbirth, p.showicq,</div>
<p>и заменяем на</p>
<div class="codesnip-container" >p.city, p.description, p.showmail, p.showbirth, p.showicq, p.showjid,</div>
<p>В файле <em>templates/_default_/components/com_users_profile.tpl</em> ищем: </p>
<div class="codesnip-container" >{if $usr.showicq &amp;&amp; $usr.icq}<br />
						&lt;div class=&quot;field&quot;&gt;<br />
							&lt;div class=&quot;title&quot;&gt;ICQ:&lt;/div&gt;<br />
							&lt;div class=&quot;value&quot;&gt;{$usr.icq}&lt;/div&gt;<br />
						&lt;/div&gt;<br />
						{/if}</div>
<p>И после этого вставляем следующий кусочек:</p>
<div class="codesnip-container" >{if $usr.showjid &amp;&amp; $usr.jid}<br />
						&lt;div class=&quot;field&quot;&gt;<br />
							&lt;div class=&quot;title&quot;&gt;Jabber:&lt;/div&gt;<br />
							&lt;div class=&quot;value&quot;&gt;{$usr.jid}&lt;/div&gt;<br />
						&lt;/div&gt;<br />
						{/if}</div>
<p>Далее нам нужно добавить поля в базу данных. Я это делал через phpMyAdmin.<br />
Нужно добавить поле jid (varchar 32, сравнение&nbsp;&mdash; cp1251_general_ci) после поля icq в таблице cms_users. Также нужно поле showjid (int 11) после поля showicq в таблице cms_users_profiles.</p>
<p>Теперь добавим данные в файл языка.<br />
Открываем файл <em>languages/ru/components/users.php</em><br />
и добавляем в самый конец перед ?&gt;:</p>
<div class="codesnip-container" >$_LANG['JID']                       =&#39;Jabber&#39;;<br />
$_LANG['SHOW_JID']                  =&#39;Показывать Jabber ID&#39;;</div>
<p>Всё, теперь можно вписывать в профиле свой джаббер, включать или отключать его показ. По аналогии с джаббером можно добавить и другие поля в профиль. Думаю, как это сделать теперь понятно.</p>
<p>Не так давно я узнал что такое <a href="http://www.spoombar.ru/topping/" target="_blank">топпинги</a>. Раньше я слышал это слово и даже не мог себе представить, что это то, чем украшают и придают вкус десертам!</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/06/01/instantcms-dopolnitelnye-polya-dlya-kontaktov/">InstantCMS&nbsp;&mdash; дополнительные поля для контактов</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2011/06/01/instantcms-dopolnitelnye-polya-dlya-kontaktov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Важные обновления безопасности LiveStreet</title>
		<link>http://www.spoofi.ru/2011/04/06/critical-livestreet-security-updates/</link>
		<comments>http://www.spoofi.ru/2011/04/06/critical-livestreet-security-updates/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 13:48:44 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[LiveStreet]]></category>
		<category><![CDATA[livestreet]]></category>
		<category><![CDATA[xss]]></category>
		<category><![CDATA[баг]]></category>
		<category><![CDATA[фикс]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=6098</guid>
		<description><![CDATA[Сегодня мне на почту пришло 2 письма от разработчиков Livestreet. В них говорилось, что в движке найден баг (XSS уязвимость). Точнее сказать, что не в самом движке, а в библиотеке CSSTidy (используется для сжатия CSS файлов).  В первом письме значился только баг с XSS уязвимостью, а вот во втором уже была ошибка в классе самого [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/04/06/critical-livestreet-security-updates/">Важные обновления безопасности LiveStreet</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2011/04/livestreet-bug-fix.jpg"><img class="aligncenter size-full wp-image-6100" title="livestreet-bug-fix" src="http://www.spoofi.ru/wp-content/uploads/2011/04/livestreet-bug-fix.jpg" alt="livestreet bug fix Важные обновления безопасности LiveStreet" width="530" height="212" /></a></p>
<p>Сегодня мне на почту пришло 2 письма от разработчиков Livestreet. В них говорилось, что в движке найден баг (XSS уязвимость). Точнее сказать, что не в самом движке, а в библиотеке CSSTidy (используется для сжатия CSS файлов).  В первом письме значился только баг с XSS уязвимостью, а вот во втором уже была ошибка в классе самого движка. О том, как исправить баги читаем под &laquo;катом&raquo;.</p>
<p><em>Примечание: действует только для версии 0.4.2, в более ранних таких уязвимостей вроде бы нет.</em><br />
<span id="more-6098"></span>Чтобы устранить уязвимости можно просто <a href="/go.php?url=http://livestreetcms.com/download/get/" target="_blank">скачать архив с движком</a> и обновить его у себя на хостинге, но я думаю, что быстрее будет сделать все самим.</p>
<p><strong>Устраняем 1 баг:</strong> как и написано в письме нужно просто удалить файл <strong>/engine/lib/external/CSSTidy-1.3/css_optimiser.php</strong></p>
<p><strong>Устреняем 2 баг:</strong></p>
<p>Находим файл <strong>/engine/modules/text/Text.class.php</strong> и открываем его для редактирования.</p>
<p>Почти в самом конце файла ищем строку:</p>
<blockquote>
<p>return array ($sTextShort,$sTextNew,$sTextCut);</p>
</blockquote>
<p>И заменяем её на эту:</p>
<blockquote>
<p>return array ($sTextShort,$sTextNew,$sTextCut? htmlspecialchars ($sTextCut): null);</p>
</blockquote>
<p>Всё готово. Теперь можно дальше использовать движок, не опасаясь быть &laquo;хакнутыми&raquo; (:</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/04/06/critical-livestreet-security-updates/">Важные обновления безопасности LiveStreet</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2011/04/06/critical-livestreet-security-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livestreet: прячем контент</title>
		<link>http://www.spoofi.ru/2011/03/31/livestreet-hide-content/</link>
		<comments>http://www.spoofi.ru/2011/03/31/livestreet-hide-content/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 12:28:14 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[LiveStreet]]></category>
		<category><![CDATA[livestreet]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[трюки]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=6005</guid>
		<description><![CDATA[Как я и обещал в предыдущем посте, продолжаю писать о LiveStreet CMS. Сегодня хочу коснутся темы закрытости сайта. Те, кто пользовался LS знают, что в этой системе управления контентом есть возможность создавать закрытые сайты. &#171;Степени закрытости&#187; существуют две&#160;&#8212; полностью закрытый сайт (никто, кроме вошедших на сайт не смогут видеть его содержание) и частично закрытый (пользователь [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/03/31/livestreet-hide-content/">Livestreet: прячем контент</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2011/03/livestreet.png"><img src="http://www.spoofi.ru/wp-content/uploads/2011/03/livestreet.png" alt="livestreet Livestreet: прячем контент" title="livestreet" width="300" height="66" class="alignleft size-full wp-image-5955" /></a>  Как я и <a href="http://www.spoofi.ru/2011/03/26/livestreet-cms-review/">обещал</a> в предыдущем посте, продолжаю писать о LiveStreet CMS. Сегодня хочу коснутся темы закрытости сайта. Те, кто пользовался LS знают, что в этой системе управления контентом есть возможность создавать закрытые сайты. &laquo;Степени закрытости&raquo; существуют две&nbsp;&mdash; полностью закрытый сайт (никто, кроме вошедших на сайт не смогут видеть его содержание) и частично закрытый (пользователь может регистрироваться только по инвайтам, но без регистрации может читать что угодно). На упомянутом ранее prodigger.ru нам нужно было закрыть сайт, но со следующими условиями:</p>
<ol>
<li>Пользователи регистрируются только по инвайтам</li>
<li>Авторизованные пользователи могут просматривать весь сайт</li>
<li>Не авторизованные пользователи могут смотреть только те топики, где им это разрешено</li>
</ol>
<p>Так как стандартный функционал Livestreet этого сделать не позволял, пришлось это делать самим. О том, как всё это реализовано читайте далее. <span id="more-6005"></span></p>
<p><strong>Первый пункт</strong> выполняется легко, закрываем сайт не полностью, пользователи регистрируются по инвайтам, но все могут смотреть что угодно.<br />
<strong>Второй пунк</strong>т будет работать, как говорится, &laquo;из коробки&raquo;, а вот с <strong>третьим</strong> придется повозиться.</p>
<p>Мы хотели, чтобы свои топики пользователи могли скрывать сами при публикации/редактировании. Поэтому было решено сделать галочку в редакторе топика, поставив которую, юзер запретит просмотр топика не зарегистрированным. О том, как добавить такую галочку в интерфейс редактирования топиков я напишу в следующей записи, а сейчас я хочу рассказать за счет чего все это будет работать.</p>
<p>И так, в LiveStreet используется шаблонизатор Smarty, который на мой взгляд не очень удобен и даже запутан, но в то же время является очень мощным инструментом. В файлах шаблона (обычно это папка /templates/skin/*/) можно использовать конструкции if-else, операторы foreach, в общем можно передавать переменные в шаблон и работать там с ними. <strong>$oUserCurrent</strong>&nbsp;&mdash; одна из переменных, которая используется практически в каждом файле шаблонов и, соответсвенно, туда передается. Эта переменная содержит всю информацию о пользователе и её можно легко получить и использовать в шаблоне. Если же это переменная пуста, значит пользователь не авторизован. Т.е. проще говоря&nbsp;&mdash; на любой странице мы можем узнать авторизован ли пользователь или нет, а также выполнять те или иные действия в зависимости от этого.</p>
<p>Ничего сложного в скрытии контента тут не будет, поэтому я сразу перейду к <strong>примерам использования</strong>.</p>
<p>Например, мы хотим скрыть комментарии к топикам от всех не авторизованных пользователей. Для этого нам нужно отредактировать файл темы, отвечающий за вывод дерева комментариев.Путь к файлу:  /templates/skin/*/comments_tree.tpl</p>
<p>Для скрытия будет использовать конструкцию if-else. В общем случае скрытие контента будет выглядеть так:</p>
<div class="codesnip-container" >{if $oUserCurrent}<br />
&nbsp;&nbsp;&nbsp;Контент, который прячем.<br />
{else}<br />
&nbsp;&nbsp;&nbsp;Выводим этот текст не зарегистированным пользователя.<br />
{/if}</div>
<p>Думаю, тут все понятно. Синтаксис схож с PHP и другими языками программирования. Перейдем непосредственно к скрытию комментариев (в примере используется шаблон &laquo;new&raquo;, id div&#39;ов могут не совпадать с вашими):</p>
<p>Находим строки:</p>
<div class="codesnip-container" >&lt;!-- Comments --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class="comments"&gt;</div>
<p>и сразу после них пишем проверку:</p>
<div class="codesnip-container" >{if $oUserCurrent}</div>
<p>Затем переходим к строкам:</p>
<div class="codesnip-container" >&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- /Comments --&gt;</div>
<p>И перед ними добавляем следующее:</p>
<div class="codesnip-container" >{else}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Комментарии скрыты от не авторизованных пользователей.<br />
{/if}</div>
<p>Сохраняем файл, убеждаемся что все работет. Если не работает, попробуйте обновить страницу несколько раз или сбросить кеш в админке сайта.</p>
<p>Таким способом можно скрыть любой контент на сайте&nbsp;&mdash; будь то топики, комментарии, блоки или еще что-то. </p>
<p>В следующей статье я опишу <strong>как добавить галочку для скрытия топиков</strong> от не авторизованных пользователей. Спасибо за просмотр.</p>
<p>Иногда люди удаляют нужные файлы случайно, а как их вернуть не знают. Вообще,  <a href="http://hetmanrecovery.com/ru/" target="_blank">восстановление данных</a>&nbsp;&mdash; дело не сложное, особенно если есть специальные программы. Вернуть утерянную информацию не составит труда.</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/03/31/livestreet-hide-content/">Livestreet: прячем контент</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2011/03/31/livestreet-hide-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обзор Livestreet CMS</title>
		<link>http://www.spoofi.ru/2011/03/26/livestreet-cms-review/</link>
		<comments>http://www.spoofi.ru/2011/03/26/livestreet-cms-review/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 08:54:07 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[LiveStreet]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[livestreet]]></category>
		<category><![CDATA[обзор]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=5954</guid>
		<description><![CDATA[LiveStreet (в переводе значит &#171;Живая Улица&#187;) является одной из лучших систем для создания блого-социальных сетей. В народе ее также называют LS и ЖУ&#160;&#8212; сокращенно от английской версии названия и от русского перевода. Примерно до выхода версии 0.3 LivesStreet казалась всем, как точная копия ХабраХабра. И это действительно было так, ЖУ очень похожа на Хабр, но [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/03/26/livestreet-cms-review/">Обзор Livestreet CMS</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2011/03/livestreet.png"><img class="aligncenter size-full wp-image-5955" title="livestreet" src="http://www.spoofi.ru/wp-content/uploads/2011/03/livestreet.png" alt="livestreet Обзор Livestreet CMS" width="300" height="66" /></a></p>
<p>LiveStreet (в переводе значит &laquo;Живая Улица&raquo;) является одной из лучших систем для создания блого-социальных сетей. В народе ее также называют LS и ЖУ&nbsp;&mdash; сокращенно от английской версии названия и от русского перевода.</p>
<p>Примерно до выхода версии 0.3 LivesStreet казалась всем, как точная копия ХабраХабра. И это действительно было так, ЖУ очень похожа на Хабр, но сейчас она имеет и свои отличительные черты. На данный момент последняя стабильная версия 0.4.2 от 7 июля 2010 года. Самую свежую версию <a rel="nofollow" href="/go.php?url=http://livestreetcms.com/download/">LiveStreet можно скачать</a> на официальном сайте. Также у проекта есть SVN, в котором практически каждый день выкладываются новые девелоперские версии, но я бы не рекомендовал их ставить тем, кто мало разбирается в веб-программировании (Livestreet написана на PHP, MySQL с использованием ООП).</p>
<p>Теперь перейдем к назначению и к основным особенностям движка. <span id="more-5954"></span><br />
И так, Вы решили создать социальную сеть, а точнее сказать блого-социальную сеть, тогда Livestreet Вам точно подойдет! Среди его преимуществ я бы в первую очередь выделил <strong>бесплатность</strong>, открытый исходный код, хорошее сообщество. Лайвстрит на данный момент умеет уже очень многое, пожалуй всё основное, что может понадобиться для соц. сети:</p>
<ul>
<li>Ведение персональных и коллективных блогов</li>
<li>Древовидная система комментирования</li>
<li>Развитые личные сообщения</li>
<li>Система рейтинга, оценок за топики, блоги, комментарии</li>
<li>Возможность &laquo;закрыть сайт&raquo;, сделать регистрацию по инвайтам</li>
</ul>
<p>Еще на мой взгляд важной особенностью ЖУ является модульность. Уже сейчас в каталоге модулей имеется очень много различных модулей, большая часть из которых доступна бесплатна.</p>
<p><strong>Система рейтинга и голосований</strong> на сайте под управлением CMS Livestreet очень хороша, она прекрасно продумана, хотя голосования за блоги я бы всё таки убирал (:</p>
<p>Чуть выше я уже написал, что есть возможность включить систему &laquo;инвайтов&raquo;&nbsp;&mdash; т.е. когда пользователи смогут регистрироваться только по приглашению других пользователей. К сожалению, &laquo;песочницы&raquo;, как на ХабраХабр, в LS нет. Иногда её очень не хватает...</p>
<p><strong>Живой пример использования</strong>. Ну, без примера не хочу отпускать читателя, тем более, что он прямо у меня под рукой.<br />
Сайт <a title="Сайт о диггерах и сталкерах, заброшенных объектах" href="http://prodigger.ru/" target="_blank">Продиггер.ру о диггерах и сталкерах</a> полностью работает на Livestreet. Правда многое в нем уже изменено мной, но это другая история. На этом сайте также действует система приглашений&nbsp;&mdash; без инвайта никто не сможет зарегистрироваться, можете сами проверить (:</p>
<p>P.S. только обзором этой прекрасной CMS я не ограничусь. В дальнейшем планирую писать некоторые заметки о движке, написании хаков/плагинов для него и прочем.</p>
<p>Телевизор с большой диагональю и хорошими характеристиками хочет, пожалуй, любой человек. Но вот позволить себе такое приобретение под силу далеко не всем. Поэтому можно купить <a href="http://irr.ru/electronics-technics/tv-audio-dvd/tv/">плазменные телевизоры б/у</a> за меньшую стоимость и радоваться хорошему телевизору (:</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2011/03/26/livestreet-cms-review/">Обзор Livestreet CMS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2011/03/26/livestreet-cms-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как я делаю бекапы баз данных</title>
		<link>http://www.spoofi.ru/2010/10/19/how-do-i-make-a-backup-of-the-database/</link>
		<comments>http://www.spoofi.ru/2010/10/19/how-do-i-make-a-backup-of-the-database/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:42:05 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Вебстроительство]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=4673</guid>
		<description><![CDATA[Все, кто занимаются созданием сайтов, по-моему, просто обязаны делать бекапы как всех файлов сайта, так и бекапы баз данных. Резервные копии помогут вам заработать на сайте, а не потерять деньги на восстановлении случайно утерянной информации. О том, как я делаю бекап файловой системы я расскажу в следующих постах, а о том, как правильно и удобно [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/10/19/how-do-i-make-a-backup-of-the-database/">Как я делаю бекапы баз данных</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2010/10/backup_db.png"><img src="http://www.spoofi.ru/wp-content/uploads/2010/10/backup_db.png" alt="backup db Как я делаю бекапы баз данных" title="backup_db" width="256" height="256" class="alignleft size-full wp-image-4674" /></a> Все, кто занимаются созданием сайтов, по-моему, просто обязаны делать бекапы как всех файлов сайта, так и <strong>бекапы баз данных</strong>.  Резервные копии помогут вам <a href="http://vect.info" target="_blank">заработать на сайте</a>, а не потерять деньги на восстановлении случайно утерянной информации. О том, как я делаю бекап файловой системы я расскажу в следующих постах, а о том, как правильно и удобно для себя делать бекап баз данных, будет рассказано в этом посте. </p>
<p>Так как практически все хостинги / <a href="http://www.spoofi.ru/service.php?go=fastvps" target="_blank">VPS</a> / Dedicated servers сейчас работают на Linux, то я покажу как написать скрипт, который будет сам каждый  день делать бекап базы (или всех баз сразу) и отправлять его к вам на почту (например, на Gmail. Там место позволяет). <span id="more-4673"></span></p>
<p>Для начала проверим чтобы у нас было всё, что нужно для работы скрипта:<br />
<em>1.</em> Система GNU/Linux или из семейства *BSD.<em><br />
2.</em> Доступ к crontab (наш скрипт будет вызываться каждый день именно из планировщика)<br />
<em>3.</em> Доступ по SSH (для удобства). Может также хватить панели управления с поддержкой загрузки файлов на сервер.</p>
<p>И так, допустим что у нас всё имеется. Приступаем к разбору скрипта:</p>
<pre style='color:#000000;background:#ffffff;'><span style='color:#696969; '>#!/bin/bash</span>
DBUSER<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"root"</span>
DBPASSW<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"password"</span>
DBHOST<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"localhost"</span>
NAME<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"all-db.sql"</span>
SMTP<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"smtp.mail.ru"</span>
MUSER<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"mail-user"</span>
MPASSW<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"mail-password"</span>
TO<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"my@mail.adr"</span>
<span style='color:#bb7977; font-weight:bold; '>echo</span> <span style='color:#0000e6; '>"Создание бекапа всех баз данных...."</span>
mysqldump --all-databases -u$DBUSER -p$DBPASSW -h$DBHOST <span style='color:#e34adc; '>></span> $NAME
<span style='color:#bb7977; font-weight:bold; '>echo</span> <span style='color:#0000e6; '>"Архивирование..."</span>
arch<span style='color:#808030; '>=</span><span style='color:#0000e6; '>"dbbackup_</span><span style='color:#000000; background:#ffffe8; '>`hostname`</span><span style='color:#0000e6; '>_</span><span style='color:#000000; background:#ffffe8; '>`date +%d%m%y`</span><span style='color:#0000e6; '>.tar.gz"</span>
tar czf $arch $NAME
<span style='color:#bb7977; font-weight:bold; '>echo</span> <span style='color:#0000e6; '>"Отправка бекапа на почту..."</span>
sendEmail <span style='color:#44aadd; '>-u</span> <span style='color:#0000e6; '>"</span><span style='color:#000000; background:#ffffe8; '>`hostname`</span><span style='color:#0000e6; '> MySQL backup"</span> <span style='color:#44aadd; '>-f</span> <span style='color:#0000e6; '>"db-backup@</span><span style='color:#000000; background:#ffffe8; '>`hostname`</span><span style='color:#0000e6; '>"</span> <span style='color:#44aadd; '>-t</span> $TO -m <span style='color:#0000e6; '>"All databases backup from </span><span style='color:#000000; background:#ffffe8; '>`hostname`</span><span style='color:#0000e6; '>"</span> <span style='color:#44aadd; '>-s</span> $SMTP -xu $MUSER -xp $MPASSW <span style='color:#44aadd; '>-a</span> $arch
<span style='color:#bb7977; font-weight:bold; '>echo</span> <span style='color:#0000e6; '>"Удаление бекапа с локального диска..."</span>
rm $NAME
rm $arch
<span style='color:#bb7977; font-weight:bold; '>echo</span> <span style='color:#0000e6; '>"Скрипт завершен!"</span>
</pre>
<p>В первых 9 строках нужно заполнить ваши данные, где какие, думаю, понятно (: Для &laquo;добычи&raquo; дампов БД используется утилита <strong>mysqldump</strong>. В 11 строке эта утилита создает дамп всех баз данных в 1 файл и перенаправляет его в файл.<br />
13 строка задем формат имени архива (в данном примере это что-то вроде dbbackup_имя_хоста_191010.tar.gz. В 14 строка создается архив, содержащий <strong>бекап всех баз данных</strong> с помощью утилиты tar. А вот в 16 строке  уже самая интересная часть скрипта&nbsp;&mdash; отправка бекапа на почту! Отправляем почту мы с помощью утилиты sendEmail, которую можно найти и скачать <a href="/go.php?url=http://caspian.dotconf.net/menu/Software/SendEmail/" target="_blank">здесь</a> (для удобства вызова я поместил её в  /usr/bin/ и дал права на выполнение, поэтому в скрипте она вызывается просто так: &laquo;sendEmail ...&raquo;). </p>
<p>Данный скрипт нужно сохранить в файл, например назовем его <em>dbbackup</em>, и положить его по адресу /usr/local/bin/, а также дать ему права на выполнение: chmox +x /usr/local/bin/dbbackup</p>
<p>Теперь можно проверить работу скрипта запустив его: /usr/local/bin/dbbackup</p>
<p>Если всё хорошо, то можно занести его выполнение в планировщик крон. Пишем в консоли crontab -e и уже в редакторе добавляем следующую строку:</p>
<p> 0 3 * * * /usr/local/bin/dbbackup > /var/logs/dbbackup.log</p>
<p>Сохраняем изменения и радуемся&nbsp;&mdash; теперь у нас настроен автоматический бекап всех баз данных. Каждый день в 3  часа 0 минут скрипт будет запускаться и отправлять к вам на почту <strong>бекап БД</strong>. Лог выполнения скрипта можно будет посмотреть в файле /var/log/dbbackup.log</p>
<p>P.S. по поводу работы и недочетов скрипта прошу писать в комментариях и сильно помидорами не бросаться&nbsp;&mdash; опыта еще мало, учусь (:</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/10/19/how-do-i-make-a-backup-of-the-database/">Как я делаю бекапы баз данных</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2010/10/19/how-do-i-make-a-backup-of-the-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как подружить Twitter и WordPress. Часть 2</title>
		<link>http://www.spoofi.ru/2010/05/14/kak-podruzhit-twitter-i-wordpress-chast-2/</link>
		<comments>http://www.spoofi.ru/2010/05/14/kak-podruzhit-twitter-i-wordpress-chast-2/#comments</comments>
		<pubDate>Fri, 14 May 2010 08:46:30 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=3466</guid>
		<description><![CDATA[В первой части я рассказывал о том, как можно легко сделать удобную кнопку Retweet для Вашего блога на WordPress, которая умеет сокращать ссылки. Сегодня, уже во второй части, я научу Вас выводить последние сообщения из Twitter-ленты пользователя с минимальной нагрузкой на сервер (используя кеширование). То, что получится в итоге можно посмотреть у меня на блоге [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/05/14/kak-podruzhit-twitter-i-wordpress-chast-2/">Как подружить Twitter и WordPress. Часть 2</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2010/05/wordpress_twitter_2.jpg"><img src="http://www.spoofi.ru/wp-content/uploads/2010/05/wordpress_twitter_2.jpg" alt="wordpress twitter 2 Как подружить Twitter и WordPress. Часть 2" title="wordpress_twitter_2" width="250" height="222" class="alignleft size-full wp-image-3470" /></a> В первой части я рассказывал о том, как можно легко сделать удобную кнопку Retweet для Вашего блога на WordPress, которая умеет сокращать ссылки. Сегодня, уже во второй части, я научу Вас <strong>выводить последние сообщения</strong> из Twitter-ленты пользователя с минимальной нагрузкой на сервер (используя кеширование).</p>
<p>То, что получится в итоге можно посмотреть у меня на блоге в самом низу сайдбара (правая колонка). Там выводятся последние 5 твитов из моей ленты.</p>
<p>В первую очередь нам нужно создать файл, например назовем его twitter.php, в который требуется поместить следующий код, предварительно поменяв параметры на свои (читайте комментарии в коде): <span id="more-3466"></span><br />
<noindex></p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span><br />
<span class="coMULTI">/*<br />
Template Name: Twitter<br />
*/</span><br />
<span class="co1">// Выводим нужное количество постов с твиттера + кешируем. Врема жизни кеша&nbsp;&mdash; 5 минут.</span><br />
<span class="co1">// Author: Spoofi</span><br />
<span class="co1">// Author-URL: http://www.spoofi.ru/ &nbsp;</span></p>
<p><span class="co1">// Настройки:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$username</span> <span class="sy0">=</span> <span class="st0">&quot;spoofi&quot;</span><span class="sy0">;</span> <span class="co1">// имя в твиттере</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$feedURL</span> <span class="sy0">=</span> <span class="st0">&quot;http://twitter.com/statuses/user_timeline/23056352.rss&quot;</span><span class="sy0">;</span> <span class="co1">// Адрес RSS вашего твиттера</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$limit</span> <span class="sy0">=</span> <span class="nu0">5</span><span class="sy0">;</span> <span class="co1">// сколько сообщений выводить?</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$time_live</span> <span class="sy0">=</span> <span class="nu0">300</span><span class="sy0">;</span> <span class="co1">// время жизни кеша (в секундах)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$before</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;li&gt;&quot;</span><span class="sy0">;</span> <span class="co1">// до твита</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$after</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span> &nbsp; &nbsp; <span class="co1">// после твита</span><br />
&nbsp; &nbsp; <span class="re0">$before_all</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span> <span class="co1">// Выводим это ДО всех твитов</span><br />
&nbsp; &nbsp; <span class="re0">$after_all</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;/ul&gt;&quot;</span><span class="sy0">;</span> <span class="co1">// после всего.</span></p>
<p><span class="kw1">echo</span> <span class="re0">$before_all</span><span class="sy0">;</span></p>
<p><span class="co1">// Кеширование и вывод:</span><br />
<span class="re0">$d</span><span class="sy0">=@</span><a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="st0">&quot;twitter.cache&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$fs</span><span class="sy0">=</span><a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$d</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/intval"><span class="kw3">intval</span></a><span class="br0">&#40;</span><span class="re0">$d</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">&lt;</span>time<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">&mdash; </span><span class="re0">$time_live</span> <span class="sy0">||</span> <a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$fs</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$fw</span><span class="sy0">=</span><a href="http://www.php.net/fopen"><span class="kw3">fopen</span></a><span class="br0">&#40;</span><span class="st0">&quot;twitter.cache&quot;</span><span class="sy0">,</span><span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// &nbsp; &nbsp; &nbsp; flock ($fw, LOCK_EX);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">@</span><a href="http://www.php.net/fputs"><span class="kw3">fputs</span></a><span class="br0">&#40;</span><span class="re0">$fw</span><span class="sy0">,</span><a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$doc</span> <span class="sy0">=</span> <span class="kw2">new</span> DOMDocument<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$doc</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$feedURL</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$arrFeeds</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$doc</span><span class="sy0">-&gt;</span><span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st_h">&#39;item&#39;</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$node</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$itemRSS</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="br0">&#40;</span><span class="st_h">&#39;title&#39;</span> <span class="sy0">=&gt;</span> <span class="re0">$node</span><span class="sy0">-&gt;</span><span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st_h">&#39;title&#39;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">item</span><span class="br0">&#40;</span>0<span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">nodeValue</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array_push"><span class="kw3">array_push</span></a><span class="br0">&#40;</span><span class="re0">$arrFeeds</span><span class="sy0">,</span> <span class="re0">$itemRSS</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$x</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span><span class="re0">$x</span><span class="sy0">&lt;</span><span class="re0">$limit</span><span class="sy0">;</span><span class="re0">$x</span><span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$title</span> <span class="sy0">=</span> <span class="sy0">@</span><a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="re0">$username</span><span class="sy0">.</span><span class="st_h">&#39;: &#39;</span><span class="sy0">,</span><span class="st_h">&#39;&#39;</span><span class="sy0">,</span><span class="re0">$arrFeeds</span><span class="br0">&#91;</span><span class="re0">$x</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">&#39;title&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// заменяем строчку</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <span class="sy0">@</span><a href="http://www.php.net/ereg_replace"><span class="kw3">ereg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;[[:alpha:]]+://[^&lt;&gt;[:space:]]+[[:alnum:]/]&quot;</span><span class="sy0">,</span><span class="st0">&quot;&lt;noindex&gt;&lt;a href=<span class="es1">\&quot;</span><span class="es1">\\</span>0<span class="es1">\&quot;</span> rel=<span class="es1">\&quot;</span>nofollow<span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es1">\\</span>0&lt;/a&gt;&lt;/noindex&gt;&quot;</span><span class="sy0">,</span> <span class="re0">$title</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pattern</span> <span class="sy0">=</span> <span class="st_h">&#39;/[#|@][^\s]*/&#39;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="re0">$pattern</span><span class="sy0">,</span> <span class="re0">$str</span><span class="sy0">,</span> <span class="re0">$matches</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span> <span class="kw1">as</span> <span class="re0">$keyword</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$keyword</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;)&quot;</span><span class="sy0">,</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span><span class="re0">$keyword</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$link</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;#&quot;</span><span class="sy0">,</span><span class="st0">&quot;%23&quot;</span><span class="sy0">,</span><span class="re0">$keyword</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$link</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;@&quot;</span><span class="sy0">,</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span><span class="re0">$keyword</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/strstr"><span class="kw3">strstr</span></a><span class="br0">&#40;</span><span class="re0">$keyword</span><span class="sy0">,</span><span class="st0">&quot;@&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$search</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;noindex&gt;&lt;a href=<span class="es1">\&quot;</span>http://twitter.com/<span class="es4">$link</span><span class="es1">\&quot;</span> rel=<span class="es1">\&quot;</span>nofollow<span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$keyword</span>&lt;/a&gt;&lt;/noindex&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$link</span> <span class="sy0">=</span> <a href="http://www.php.net/urlencode"><span class="kw3">urlencode</span></a><span class="br0">&#40;</span><span class="re0">$link</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$search</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;noindex&gt;&lt;a href=<span class="es1">\&quot;</span>http://twitter.com/#search?q=<span class="es4">$link</span><span class="es1">\&quot;</span> rel=<span class="es1">\&quot;</span>nofollow<span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$keyword</span>&lt;/a&gt;&lt;/noindex&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="re0">$keyword</span><span class="sy0">,</span> <span class="re0">$search</span><span class="sy0">,</span> <span class="re0">$str</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$before</span><span class="sy0">.</span><span class="re0">$str</span><span class="sy0">.</span><span class="re0">$after</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="st0">&quot;&lt;br /&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">@</span><a href="http://www.php.net/fputs"><span class="kw3">fputs</span></a><span class="br0">&#40;</span><span class="re0">$fw</span><span class="sy0">,</span><a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">@</span><a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fw</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; </p>
<span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="co1">// Чтение из кеша:</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$file</span> <span class="sy0">=</span> <a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="st0">&quot;twitter.cache&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span><span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="re0">$limit</span><span class="sy0">;</span><span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$before</span><span class="sy0">.</span><span class="re0">$file</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="re0">$after</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="st0">&quot;&lt;br /&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">echo</span> <span class="re0">$after_all</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div>
</div>
<p></noindex></p>
<p>Файл нужно обязательно сохранить в кодировке UTF-8! Иначе может всё очень криво отображаться.</p>
<p>После того, как наш скрипт готов, нужно залить его в папку темы:</p>
<div class="codesnip-container" >/wp-content/themes/имя-темы/</div>
<strong>Важно:</strong> так как для уменьшения нагрузки на сервер я использую кеширование здесь нам понадобиться файл twitter.cache с правами на запись. Я рекомендую не опытным пользователям просто выставить права 777 на директорию
<div class="codesnip-container" >/wp-content/themes/имя-темы/</div>
<p>делается это очень просто через FTP клиент, либо через ssh: </p>
<div class="codesnip-container" >chmod 777 путь/wp-content/themes/имя-темы/</div>
<p>Затем, можно проверить как работает скрипт просто зайдя на эту страничку&nbsp;&mdash; http://блог.ру/wp-content/themes/имя-темы/twitter.php<br />
Если Твиты выводятся&nbsp;&mdash; значит все работает и остались последние штрихи.</p>
<p>Через админку WP заходим в редактор тем, ищем файл, который отвечает за сайдбар и в нужном нам месте вставляем простенький код:<br />
<noindex></p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="st0">&quot;http://блог.ру/wp-content/themes/deep-mix/twitter.php&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></div>
</div>
<p></noindex><br />
Для примера, у меня это выглядит так:<br />
<noindex></p>
<div class="codesnip-container" >
<div class="html4strict codesnip" style="font-family:monospace;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span>Мой Twitter<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h2.html"><span class="kw2">h2</span></a>&gt;</span><br />
<span class="sc2">&lt;?php echo file_get_contents<span class="br0">&#40;</span><span class="st0">&quot;http://www.spoofi.ru/wp-content/themes/deep-mix/twitter.php&quot;</span><span class="br0">&#41;</span>; ?&gt;</span></div>
</div>
<p></noindex></p>
<p>Вот и все! Теперь при просмотре любой страницы, где выводится сайдбар пользователи увидят Ваши последние сообщения с Twitter&#39;а.</p>
<p><strong>Примечание:</strong> скрипт я постарался сделать так, чтобы было максимум нужных настроек. Например, можно указать что нужно выводить до и после каждого твита, а также что вывести перед и после всего блока. У меня это используется для вывода твитов как списка.</p>
<hr />
<p>
Каждый из нас, блоггеров, пишет для души, а также для кое-какого заработка, не правда ли? Все мы хотим  заработать в интернете, но не все знают, как это сделать и с чего начать. О том, <a href="http://profynet.ru/">как заработать в интернете</a>, Вы узнаете из блога profynet.ru!</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/05/14/kak-podruzhit-twitter-i-wordpress-chast-2/">Как подружить Twitter и WordPress. Часть 2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2010/05/14/kak-podruzhit-twitter-i-wordpress-chast-2/feed/</wfw:commentRss>
		<slash:comments>122</slash:comments>
		</item>
		<item>
		<title>Как подружить Twitter и WordPress. Часть 1</title>
		<link>http://www.spoofi.ru/2010/04/26/kak-podruzhit-twitter-i-wordpress-chast-1/</link>
		<comments>http://www.spoofi.ru/2010/04/26/kak-podruzhit-twitter-i-wordpress-chast-1/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 11:52:23 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=3309</guid>
		<description><![CDATA[Каждый из блоггеров, который параллельно является пользователем твиттера, наверняка задумывался о том, что не плохо было бы &#171;подружить&#187; свой twitter с блогом. В своих постах я постараюсь раскрыть секреты как это осуществить. Сегодня, в первой части статей &#171;как подружить твиттер и wordpress&#187; я расскажу о том, как сделать кнопку &#171;Retweet&#187; без плагинов (с сокращением длинных [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/04/26/kak-podruzhit-twitter-i-wordpress-chast-1/">Как подружить Twitter и WordPress. Часть 1</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.spoofi.ru/wp-content/uploads/2010/04/wordpress_twitter_1.jpg"><img src="http://www.spoofi.ru/wp-content/uploads/2010/04/wordpress_twitter_1.jpg" alt="wordpress twitter 1 Как подружить Twitter и WordPress. Часть 1" title="Как подружить Twitter и WordPress. Часть 1" width="250" height="222" class="alignleft size-full wp-image-3317" /></a>  Каждый из блоггеров, который параллельно является пользователем твиттера, наверняка задумывался о том, что не плохо было бы &laquo;подружить&raquo; свой twitter с блогом. В своих постах я постараюсь раскрыть секреты как это осуществить.</p>
<p>Сегодня, в первой части статей <strong>&laquo;как подружить твиттер и wordpress&raquo;</strong> я расскажу о том, как <strong>сделать кнопку &laquo;Retweet&raquo;</strong> без плагинов (с сокращением длинных ссылок).</p>
<p>И так, <strong>что нам понадобиться</strong>:</p>
<ol>
<li> Блог на движке WordPress</li>
<li> Доступ на запись для файлов темы</li>
</ol>
<p>Приступая к этапам создания кнопки, скажу, что посмотреть как это будет выглядеть можно у меня в блоге в любой статье. Под названием статьи есть строка, в которой содержиться имя категории, дата написания поста и, собственно, кнопка retweet. Нажмите на нее, чтобы проверить как это  работает.</p>
<p>Убедились, что это именно то, что Вам требуется? Тогда вперед!</p>
<p><strong>1. </strong> Открываем редактор шаблонов через админку WordPress (рекомендую использовать именно редактор самого движка, так как тут делов мало, не стоит себя натруждать перекидыванием файлов туда-сюда по FTP).</p>
<p><strong>2.</strong> Находим и открываем файл темы, который отвечает за вывод одиночного поста. Теперь ищем то место, куда хотим вставить кнопку и вставляем туда следующий код:</p>
<div class="codesnip-container" >
<div class="html4strict codesnip" style="font-family:monospace;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;http://twitter.com/home?status=&lt;?php the_title (); ?&gt;</span></span> <span class="sc2">&lt;?php &nbsp;shorturl<span class="br0">&#40;</span><span class="br0">&#41;</span>; ?&gt;</span>&quot; target=&quot;_blank&quot;&gt;<span class="sc2">&lt;<a href="http://december.com/html/4/element/img.html"><span class="kw2">img</span></a> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;Ретвитнуть пост&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;путь к желаемому изображению&quot;</span> <span class="kw3">alt</span><span class="sy0">=</span><span class="st0">&quot;Ретвитнуть этот пост&quot;</span> <span class="sy0">/</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;</span></div>
</div>
<p>Вам нужно лишь подставить путь к изображению, либо убрать его и сделать ссылкой. Сохраняем файл.</p>
<p><strong>3. </strong> Знающие PHP увидят, что в данном коде используется вызов функции shorturl (), которой нету в WP. Она используется здесь для укорачивания ссылок через сервис tinyurl.com. Сейчас мы и напишем эту функцию.</p>
<p>Открываем файл functions.php и вставлем в самый конец следующий код:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> shorturl<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">// укорачивание ссылок с помощью tinyurl.com</span><br />
<span class="br0">&#123;</span> <span class="re0">$url</span> <span class="sy0">=</span> get_permalink<span class="br0">&#40;</span><span class="re0">$post</span><span class="sy0">-&amp;</span>gt<span class="sy0">;</span>ID<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// получаем URL поста</span><br />
&nbsp; <span class="re0">$shorten_url</span> <span class="sy0">=</span> <a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="st0">&quot;http://tinyurl.com/api-create.php?url=&quot;</span><span class="sy0">.</span><span class="re0">$url</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// получаем короткую ссылку</span><br />
<span class="kw1">echo</span> <span class="re0">$shorten_url</span><span class="sy0">;</span> <span class="co1">// печатаем полученную ссылку</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Каждая строка кода прокомментаирована, поэтому там всё понятно даже самым &laquo;чайникам&raquo;.</p>
<p><strong>Примечание:</strong> Если вы не хотите использовать укорачивание ссылок, то замените код из 2 пункта следующим:</p>
<div class="codesnip-container" >
<div class="html4strict codesnip" style="font-family:monospace;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;http://twitter.com/home?status=&lt;?php the_title (); ?&gt;</span></span> <span class="sc2">&lt;?php the_permalink<span class="br0">&#40;</span><span class="br0">&#41;</span>; ?&gt;</span>&quot; target=&quot;_blank&quot;&gt;<span class="sc2">&lt;<a href="http://december.com/html/4/element/img.html"><span class="kw2">img</span></a> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;Ретвитнуть пост&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;путь к желаемому изображению&quot;</span> <span class="kw3">alt</span><span class="sy0">=</span><span class="st0">&quot;Ретвитнуть этот пост&quot;</span> <span class="sy0">/</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a>&gt;</span></div>
</div>
<hr />
<p>
Проект Bloggers.su запустил <a target="_blank" href="http://blog.bloggers.su/raznoe/obmen-postovymi-3/">обмен постовыми со всеми желающими</a>! Пузомерки и посещаемость не важны&nbsp;&mdash; принимайте участие.</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/04/26/kak-podruzhit-twitter-i-wordpress-chast-1/">Как подружить Twitter и WordPress. Часть 1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2010/04/26/kak-podruzhit-twitter-i-wordpress-chast-1/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>DISQUS — система комментирования</title>
		<link>http://www.spoofi.ru/2010/03/16/disqus-sistema-kommentirovaniya/</link>
		<comments>http://www.spoofi.ru/2010/03/16/disqus-sistema-kommentirovaniya/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 14:04:07 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[Вебстроительство]]></category>
		<category><![CDATA[disqus]]></category>
		<category><![CDATA[комментарии]]></category>
		<category><![CDATA[плагины]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=2894</guid>
		<description><![CDATA[В посте &#171;изменения в блоге&#187; я упоминал о том, что я установил плагин, а точнее систему, для комментирования&#160;&#8212; DISQUS. Именно о нем я сейчас и поведаю Вам. Давайте для начала рассмотри все преимущества и недостатки этой системы. Основные преимущества этой системы комментирования: Авторизация через twitter, OpenID, стандартным способ и другие Сервер не загружается от использования [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/03/16/disqus-sistema-kommentirovaniya/">DISQUS — система комментирования</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_2885" class="wp-caption alignleft" style="width: 147px"><a href="http://www.spoofi.ru/wp-content/uploads/2010/03/disqus.jpg"><img src="http://www.spoofi.ru/wp-content/uploads/2010/03/disqus.jpg" alt="disqus DISQUS — система комментирования" title="disqus" width="137" height="42" class="size-full wp-image-2885" /></a><p class="wp-caption-text">DISQUS - система комментирования</p></div> В посте &laquo;<a href="http://www.spoofi.ru/2010/03/07/izmeneniya-v-bloge/" title="Изменения в блоге">изменения в блоге</a>&raquo; я упоминал о том, что я установил плагин, а точнее систему, для комментирования&nbsp;&mdash; <noindex><a href="http://disqus.com/">DISQUS</a></noindex>. Именно о нем я сейчас и поведаю Вам.</p>
<p>Давайте для начала рассмотри все преимущества и недостатки этой системы.</p>
<p><strong>Основные преимущества этой системы комментирования:</strong></p>
<ul>
<li>Авторизация через twitter, OpenID, стандартным способ и другие</li>
<li>Сервер не загружается от использования вышесказанных способов авторизации (все это происходит на стороннем сервере)</li>
<li>Комментарии хранятся как у Вас в базе данных, так и в базе DISQUS&#39;а (своего рода бекап)</li>
<li>Автоматическая подписка на комментарии по E-mail (теперь не нужны эти лишние плагины&nbsp;&mdash; все делает дискус)</li>
<p><span id="more-2894"></span></p>
<li>Поддержка Gravatar и Трекбеков</li>
<li>Симпотичный дизайн</li>
<li>Модерирование комментариев прямо через почту (об этом будет сказано чуть ниже)</li>
<li>DISQUS можно установить на <em>любой</em> сайт</li>
<li>Возможность запостить комментарий в разные сервисы (Twitter, Facebook)</li>
<li>SEO-frendly (поисковики прекрасно видят все комментарии)</li>
<li>Можно назначить модераторов (для этого у модератора должна быть зарегистрирована учетная запись на disqus.com)</li>
<li>Имеется возможность просматривать и выводить отзывы о Вашей записи в социальных сетях, таких как Twitter, Digg, FriendFeed</li>
<li>защита от спама (будет описано ниже)</li>
</ul>
<p><strong>Минусы системы:</strong></p>
<ul>
<li>Перевод&nbsp;&mdash; дискус переведен на русский язык только частично (Вы можете видеть это в моем блоге). Также, практически весь сайт дискуса тоже на английском языке.</li>
<li>Нет возможности самому перевести сообщения (... comments and 0 reactions)</li>
<li>При медленном соединении вся &laquo;красота&raquo; может долго загружаться</li>
</ul>
<p>Получился у меня большой список плюсов и маленький минусов,  в принципе я так и  ожидал <img src='http://www.spoofi.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile DISQUS — система комментирования" class='wp-smiley' title="DISQUS — система комментирования" /> </p>
<p>Теперь подробности:<br />
<strong>Модерирование через почту:</strong><br />
Как было сказано выше, с помощью DISQUS можно модерировать комментарии прямо через пришедшее письмо с новым комментарием. Делается все очень просто: на пришедшее письмо можно просто ответить и тогда тело вашего письма станет новым комментарием (причем поместить в ветке комментариев как ответ на комментарий, пришедший по почте). Если ответить на письмо с тексом Delete, то комментарий удалиться с глаз долой. Просто и со вкусом! С помощью этой системы комментирования можно отвечать на комментарии из любого места, где есть доступ к Вашей почте.</p>
<p><strong>Антиспам:</strong><br />
Сам по себе дискус (лично у меня) не пропустил еще ни одного спам комментария. Считаю это заслугой самой системы и Akismet. Да, Акисмет, Вы правильно прочли <img src='http://www.spoofi.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile DISQUS — система комментирования" class='wp-smiley' title="DISQUS — система комментирования" />  В настройках можно указать свой ключик от Akismet и тогда система будет проверять комментарии через него. Спам не пройдет!</p>
<p><strong>Установка и настройка (WordPress):</strong><br />
Ничего сложного здесь нет&nbsp;&mdash; устанавливаем плагин (качаем или же в админке ищем плагины по запросу DISQUS&nbsp;&mdash; будет среди первых трех, не думаю что ошибетесь), заходим в настройки, в advanced options делаем импорт текуших комментариев на сервера DISQUS (у меня заняло порядка 15-20 минут). Остальные настройки по желанию. Готово! </p>
<p><strong>Если появятся вопросы</strong>&nbsp;&mdash; обращайтесь. Буду рад помочь.</p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2010/03/16/disqus-sistema-kommentirovaniya/">DISQUS — система комментирования</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2010/03/16/disqus-sistema-kommentirovaniya/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Урок PHP #3</title>
		<link>http://www.spoofi.ru/2009/06/18/urok-php-3/</link>
		<comments>http://www.spoofi.ru/2009/06/18/urok-php-3/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 14:00:08 +0000</pubDate>
		<dc:creator>Spoofi</dc:creator>
				<category><![CDATA[Уроки PHP]]></category>

		<guid isPermaLink="false">http://www.spoofi.ru/?p=815</guid>
		<description><![CDATA[Здравствуйте, дорогие читатели моего блога! Давно я не писал толковых постов... Зато сегодня очень даже толковый&#160;&#8212; урок PHP #3. (Предыдущие уроки можно посмотреть здесь: урок #1 и урок #2). И так приступим. Закончим наше знакомство с конструкцией if-else. Двойные условия. Бывают такие случаи, что надо проверить не одно условие, а сразу несколько. В таком случае [...]<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2009/06/18/urok-php-3/">Урок PHP #3</a></p></p>
]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте, дорогие читатели моего блога! Давно я не писал толковых постов... Зато сегодня очень даже толковый&nbsp;&mdash; урок PHP #3.<br />
(Предыдущие уроки можно посмотреть здесь: <a href="http://www.spoofi.ru/2009/05/04/urok-php-1/">урок #1</a> и <a href="http://www.spoofi.ru/2009/05/10/urok-php-2">урок #2</a>).</p>
<p>И так приступим. Закончим наше знакомство с конструкцией if-else.</p>
<p><strong>Двойные условия.</strong><br />
Бывают такие случаи, что надо проверить не одно условие, а сразу несколько. В таком случае потребуются двойные условия. Давайте рассмотрим пример:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span><br />
<span class="re0">$a</span> <span class="sy0">=</span> <span class="nu0">5</span><span class="sy0">;</span><br />
<span class="re0">$b</span> <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
<span class="re0">$c</span> <span class="sy0">=</span> <span class="nu0">20</span><span class="sy0">;</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$a</span> <span class="sy0">!=</span> <span class="re0">$b</span> and <span class="re0">$c</span> <span class="sy0">==</span> <span class="re0">$b</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">echo</span> <span class="st0">&quot;оба условия выполняются&quot;</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<span class="kw1">echo</span> <span class="st0">&quot;одно или оба условия не выполняется&quot;</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="sy1">?&gt;</span></div>
</div>
<p><a target="_blank" href="http://php.spoofi.ru/lesson3/1.php">Результат выполнения скрипта.</a></p>
<p>Посмотрите на 5-ю строку. В круглых скобках уже содержится не одно условие, а сразу два. Соединены условия словом <em>and</em> (в переводе с английского&nbsp;&mdash; <em>и</em>). Не сложно догадаться, что при соблюдении первого условия и при соблюдении второго будет выполнятся 6-я строка, а если одно из условий не верно&nbsp;&mdash; 8-я.<br />
<span id="more-815"></span><br />
<strong>И так, какие служебные слова можно использовать для связи условий:</strong><br />
<em>and</em> (аналог: <em>&#038;&</em>)&nbsp;&mdash; выполняется и то, и другое условие.<br />
<em>or</em> (аналог: <em>||</em>)&nbsp;&mdash; выполняется хотя бы одно из условий.<br />
Это еще не все слова, с помощью которых можно связывать переменные. Другие буду затронуты в других уроках.</p>
<p>Попробуйте поэкспериментировать с этими &laquo;связками&raquo;, а после мы пойдем дальше.<br />
Всё получилось? ок! Идём дальше. </p>
<p><strong>Вложенные конструкции if-else.</strong><br />
Тоже рассмотрим пример. В нём всё просто + будут комментарии. Смотрим:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span><br />
<span class="re0">$a</span> <span class="sy0">=</span> <span class="nu0">5</span><span class="sy0">;</span><br />
<span class="re0">$b</span> <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span><br />
<span class="re0">$c</span> <span class="sy0">=</span> <span class="nu0">20</span><span class="sy0">;</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$a</span> <span class="sy0">!=</span> <span class="re0">$b</span> and <span class="re0">$c</span> <span class="sy0">==</span> <span class="re0">$b</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">echo</span> <span class="st0">&quot;оба условия выполняются&quot;</span><span class="sy0">;</span> <span class="br0">&#125;</span><br />
<span class="kw1">else</span> <span class="br0">&#123;</span><br />
<span class="kw1">echo</span> <span class="st0">&quot;одно или оба условия не выполняется&quot;</span><span class="sy0">;</span> <span class="coMULTI">/* между фигурными скобками, стоящими после &lt;em&gt;else&lt;/em&gt;, можно писать какие-то действия. В ашем случае первое действие&nbsp;&mdash; вывод текст с помощью &lt;em&gt;echo&lt;/em&gt;. Добавим сюда еще одно условие. */</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$c</span> <span class="sy0">&lt;</span> 100<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
<span class="kw1">echo</span> <span class="st0">&quot;&lt;br /&gt;Переменная меньше ста&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span> <span class="co1">// добавили условие, если оно не будет выполнятся&nbsp;&mdash; ничего не выведется. Это условие и называется вложенным.</span><br />
<span class="br0">&#125;</span><br />
<span class="sy1">?&gt;</span></div>
</div>
<p><a target="_blank" href="http://php.spoofi.ru/lesson3/2.php">Результат выполнения скрипта.</a></p>
<p>На этом мы заканчиваем изучение конструкции if-else. В следующем уроке начинаем изучение циклов. <a href="http://feeds2.feedburner.com/spoofi">Не пропустите</a>.</p>
<hr noshade size="1" />
<p>
Рекомендую почитать <a href="http://mr-felix.ru/" target="_blank">блог обычного вебмастера</a> и в частности рубрику &laquo;SEO в практике&raquo; <img src='http://www.spoofi.ru/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Урок PHP #3" class='wp-smiley' title="Урок PHP #3" /> </p>
<p><br/>
<p align="right"><a href="http://www.spoofi.ru/2009/06/18/urok-php-3/">Урок PHP #3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spoofi.ru/2009/06/18/urok-php-3/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>

