<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
		<title>Блог ПРОФЕССОРА</title>
		<link>http://vizr.ru/</link>
		<description>Наблюдения, факты и интересные мысли об интернет-бизнесе, сайтах для людей, контекстной рекламе и многом тематически близком.</description>
		<pubDate>Sun, 18 Mar 2012 13:15:54 +0600</pubDate>
		<language>en-ru</language>
		<generator>MaxSite CMS (http://maxsite.org/)</generator>
		<copyright>Copyright 2012, http://vizr.ru/</copyright>
				<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/vizr_ru" /><feedburner:info uri="vizr_ru" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title><![CDATA[Плагин «XML Sitemap Pro» &#45;  настройте ваш sitemap.xml!]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/yHmnQt5nB-s/plugin-xml-sitemap-pro-dlja-sitemap-xml</link>
			<guid isPermaLink="false">http://vizr.ru/page/plugin-xml-sitemap-pro-dlja-sitemap-xml</guid>
			<pubDate>Sun, 18 Mar 2012 13:15:54 +0600</pubDate>
			<category><![CDATA[Лаборатория]]></category>
			<description>&lt;p&gt;Всем веб-мастерам известно, что оценка «Качественный сайт», которую ставят вашему детищу поисковые системы, складывается из множества факторов. Один из таких факторов - количество ошибок индексации сайта поисковой системой. Есть ли у Яндекса/Гугла проблемы с индексацией вашего сайта можно узнать с помощью соответствующих сервисов этих систем. Именно с помощью сервиса Яндекс.Вебмастер я увидел, что Яндекс пытается индексировать кучу "несуществующих" страниц недавно &lt;a href="/page/moj-pervyj-novosibirskij-klient" rel="follow" title="пост про разработанный сайт"&gt;разработанного сайта&lt;/a&gt;, а именно, были обращения к страницам меток, юзеров, служебных категорий и служебным страницам. "Несуществующие" они потому, что в шаблоне даже не было сделано обработчика для них или же потому, что на сайте не должно было быть ссылок на эти страницы (как правило, такие страницы нужны для служебных целей или для тестирования контекстной рекламы и нет желания скармливать их поисковым роботам).&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/pictures/screen_sitemap_poster_min.jpg" class="border center" title="скриншот ошибок индексирования Яндексом" alt="скриншот ошибок индексирования Яндексом" width="600" align="middle" height="523"&gt;&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;
&lt;p&gt;Когда я увидел, что творится такое - был «малость» удивлён. Главным вопросом было - где Яндекс нашёл ссылки на страницы типа &lt;span style="font-weight: bold;"&gt;«/tag/&lt;/span&gt;» , страницы типа &lt;span style="font-weight: bold;"&gt;«/author/»&lt;/span&gt; и ещё нескольких страниц в slug «&lt;span style="font-weight: bold;"&gt;/page/»&lt;/span&gt;? В шаблоне сайта-визитке нет обработчика страниц меток. Да, метки заполняются «про запас», но выводить их в большой мир никто не собирался! Также со страницами авторов-юзеров. Если у вас обычный сайт-блог на слегка кастомизированном дефолтном шаблоне, то конечно вам все эти страницы нужны в индексе Яндекса. Но у меня был другой случай (мне не нужны лишние страницы в индексе поисковых систем) и поэтому надо было как-то это безобразие прекращать.&lt;/p&gt;
&lt;p&gt;Источник дезинформации поисковиков был найден на первом же шаге - это sitemap.xml, который генерировался стандартным maxsite-овским плагином «&lt;span style="font-weight: bold;"&gt;XML Sitemap&lt;/span&gt;». Плагин простой, как автомат Калашникова. Погуглив, нашёл, что не я один &lt;a href="http://max-3000.com/page/xml-sitemap-i-roditelskie-stranicy#comment-429" rel="nofollow" title="Комментарий к статье «XML-sitemap и родительские страницы» на сайте max-3000.com"&gt;хочу иметь страницу опций настройки этого плагина&lt;/a&gt;. Надо? Сделаем! Точнее уже сделал. Вот так выглядит страница настройки: &lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;p&gt;&lt;a href="/uploads/pictures/screen_sitemap_options.jpg" class="lightbox"&gt;&lt;img src="/uploads/pictures/mini/screen_sitemap_options.jpg" alt=""&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Как вы можете видеть, кроме широкого спектра настроек указания какие страницы не включать в sitemap.xml, ещё добавил опцию «&lt;span style="font-weight: bold;"&gt;Приоритеты и частота обновления&lt;/span&gt;». С её помощью можно задать отличные от задаваемых движком по-умолчанию параметры повторного обращения поисковых роботов к различным группам страниц. &lt;/p&gt;
&lt;blockquote&gt;Считаю, что не стоит все блоги грести под одну гребёнку - вдруг будут созданы более активно обновляемые ресурсы и зачем они должны сами себе наступать на горло?&lt;/blockquote&gt;

&lt;p&gt;Пример результата работы плагина можно увидеть &lt;a href="http://abb-shield.ru/sitemap.xml" rel="nofollow" title="sitemap.xml сайта фирмы «АББ-ЩИТ»"&gt;здесь&lt;/a&gt;. Убедитесь сами, что ничего лишнего в файле нет.&lt;/p&gt;
&lt;h2&gt;Заключение&lt;/h2&gt;
&lt;p&gt;В общем, вся эта красота теперь трудится на благо моих сайтов. Если вы хотите, чтобы и у вас &lt;span style="text-decoration: line-through;"&gt;в доме&lt;/span&gt;на сайтах всё с sitemap.xml было на «&lt;span style="font-weight: bold;"&gt;5+&lt;/span&gt;», то вам обязательно нужно улучшить стандартный плагин генерации sitemap.xml до описанного выше функционала. У вас есть два варианта сделать это с моей помощью:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Перечислите 500 рублей на Вебмани или Яндекс.Деньги кошелёк (актуальные платежные реквизиты можно найти &lt;a href="/myservices"&gt;здесь&lt;/a&gt;). Укажите в примечании к платежу, что «деньги за модернизацию XML Sitemap» и &lt;span style="color: red;"&gt;ОБЯЗАТЕЛЬНО(!)&lt;/span&gt; ваш E-mail, куда прислать архив с модернизированным кодом плагина. Желательно продублировать информацию о платеже на мой E-mail vimruler@yandex.ru с указанием от кого и где искать платёж.&lt;/li&gt;&lt;li&gt;Предложите ваши бартерные условия! Меня постоянно интересуют вечные индексируемые поисковиками ссылки на мой блог с качественных сайтов/блогов. Но, думаю, возможны и другие варианты. Связаться со мной для обсуждения вариантов можно, например, через &lt;a href="/contact"&gt;контактную страницу&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;
&lt;a href="http://vizr.ru/page/plugin-xml-sitemap-pro-dlja-sitemap-xml#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/yHmnQt5nB-s" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/plugin-xml-sitemap-pro-dlja-sitemap-xml</feedburner:origLink></item>
				<item>
			<title><![CDATA[Хак: jQuery тюнинг админ&#45;страницы «Информация» в MaxSite CMS]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/DOaCRryZ-bY/hack-jquery-tjuning-admin-stranicy-informacija-v-maxsite-cms</link>
			<guid isPermaLink="false">http://vizr.ru/page/hack-jquery-tjuning-admin-stranicy-informacija-v-maxsite-cms</guid>
			<pubDate>Tue, 07 Feb 2012 10:06:20 +0600</pubDate>
			<category><![CDATA[Лаборатория]]></category>
			<description>&lt;p&gt;Как вы считаете, насколько полезны сведения, которые выводятся в админ-панели MaxSite CMS на странице «Информация»? Напомню, там выводятся блок ссылок на разные страницы о движке, версия движка, две кнопки («проверить последнюю версию» и «сбросить кэш») и, при наличии, закладки плагина «Админ-анонс». Вы часто переходите из админки на официальный сайт движка? Ваши клиенты тоже каждый свой рабочий день начинают с открытия форума MaxSite CMS через админку своего сайта? Лично у меня для этих целей есть закладки браузера, а у клиентов и без движка хватает дел. Но ссылки выводятся каждый раз. Занимают полезное место. Именно с мысли «занимают полезное место» я пришёл к тому, чем я хочу с вами поделиться в этом посте.&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/pictures/adminka-ban.png" class="border center" title="Тюнинг админки MaxSite CMS" alt="Тюнинг админки MaxSite CMS" height="300" width="600" align="middle"&gt;&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;

&lt;h2&gt;Какая информация нужна на странице «Информация»?&lt;/h2&gt;
&lt;p&gt;Итак, если стандартные ссылки я считаю бесполезными, то что же тогда является, по-моему, полезным? Мой минимальный набор полезных ссылок, которые я устанавливаю всем клиентам по-умолчанию, выглядит так:&lt;/p&gt;

&lt;blockquote&gt;

&lt;ul&gt;

&lt;li&gt;Мониторинг посещений сайта через сервис «&lt;a href="http://metrika.yandex.ru/" rel="nofollow" class="" title="Яндекс.Метрика" alt="Яндекс.Метрика"&gt;Яндекс.Метрика&lt;/a&gt;»&lt;br&gt;

&lt;li&gt;Панель «&lt;a href="http://webmaster.yandex.ru/" rel="nofollow" title="Яндекс.Вебмастер" alt="Яндекс.Вебмастер"&gt;Яндекс.Вебмастер&lt;/a&gt;»&lt;br&gt;

&lt;li&gt;Сервис «&lt;a href="https://www.google.com/webmasters/tools/home?hl=ru" rel="nofollow" title="Инструменты для веб-мастеров" alt="Инструменты для веб-мастеров"&gt;Инструменты для веб-мастеров&lt;/a&gt;» от Google.com&lt;br&gt;

&lt;li&gt;Управление счётчиком RSS-подписчиков на сервисе &lt;a href="http://feedburner.google.com/gfb/#overview" rel="nofollow" title="Google Feedburner" alt="Google Feedburner"&gt;Google Feedburner&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;

&lt;p&gt;Кроме ссылок есть потребность видеть статистику посещаемости сайта. Сам я пользуюсь браузерными закладками, но есть клиенты, которые не приучены к ним и поэтому нужно где-то в удобном месте показывать счётчики. Т.е. чтобы клиент видел статистику «без лишних дополнительных телодвижений». При этом отпадает вариант с выводом счётчиков на самом сайте клиента - не все клиенты желают раскрывать данные о посещаемости или же считают, что «это несолидно, размещать счётчики на сайте большой компании». Как бы то ни было, а решать проблему надо. Самое очевидное решение проблемы - воспользоваться плагином «Админ-анонс» и выводить всю необходимую информацию с помощью него. Собственно, других вариантов практически нет, а те, что есть - не выглядят универсально-красивыми. В общем, результат использования «Админ-анонса» выглядит так:&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;a href="/uploads/pictures/adminka-1.png" class="lightbox"&gt;&lt;img src="/uploads/pictures/mini/adminka-1.png" alt=""&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Не знаю как вам, а на мой вкус, самое интересное/важное место на странице занято тем, на что, в лучшем случае, обратят внимание один раз (в самом начале работы). Я имею в виду блок со стандартными ссылками. Это место великолепно подходит для вывода своей информации, но в движке пока нет стандартных средств для этого. То, что получается в результате работы плагина «Админ-анонс» выглядит, конечно, лучше, чем ничего, но всё равно только очень отдалённо напоминает желаемое. А если не пользоваться встроенной в движок статистикой, то система табов (на одном из табов выводится наш блок ссылок и другая необходимая информация) заметно перегружает страницу бесполезными элементами интерфейса. На мой взгляд, страница «Информация» должна выглядеть хотя бы так:&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;a href="/uploads/pictures/adminka-2.png" class="lightbox"&gt;&lt;img src="/uploads/pictures/mini/adminka-2.png" alt=""&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Нравится? Хотите знать, как я этого добился? Рассказываю по порядку.&lt;/p&gt;

&lt;h2&gt;jQuery-код для изменения страницы «Информация»&lt;/h2&gt;
&lt;p&gt;Страница принимает такой вид после работы следующего кода, который нужно разместить в поле «Текст на стартовой странице» плагина «Админ-анонс»:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;script type="text/javascript"&amp;gt;&amp;lt;!--
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content .r br:lt(2)").hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content .r ul:eq(0)").hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content .r #tabs-widget-fragment-0 .info")
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .insertBefore(".admin-content .r p:first");
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content #tabs-widget").hide();
// --&amp;gt;&amp;lt;/script&amp;gt;
&amp;#91;h2&amp;#93;Полезные ссылки: &amp;#91;/h2&amp;#93;
&amp;#91;list&amp;#93;
&amp;#91;*&amp;#93;Мониторинг посещений сайта через сервис 
«&amp;#91;url=http://metrika.yandex.ru/&amp;#93;Яндекс.Метрика&amp;#91;/url&amp;#93;»
&amp;#91;*&amp;#93;Панель «&amp;#91;url=http://webmaster.yandex.ru/&amp;#93;Яндекс.Вебмастер&amp;#91;/url&amp;#93;»
&amp;#91;*&amp;#93;Сервис «&amp;#91;url=https://www.google.com/webmasters/tools/home?hl=ru&amp;#93;Инструменты 
для веб-мастеров&amp;#91;/url&amp;#93;» от Google.com
&amp;#91;*&amp;#93;Сервис управления комментариями 
&amp;#91;url=http://cackle.ru/site/809/comments&amp;#93;Cackle.ru&amp;#91;/url&amp;#93;
&amp;#91;*&amp;#93;Управление счётчиком RSS-подписчиков на сервисе 
&amp;#91;url=http://feedburner.google.com/gfb/#overview&amp;#93;Google Feedburner&amp;#91;/url&amp;#93;
&amp;#91;/list&amp;#93;
&amp;lt;!-- Здесь код счётчиков --&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Из листинга видно, что код написан с использованием jQuery. Эта библиотека подключается по-умолчанию на страницах админки и позволяет лихо (на CSS, тоже можно было бы многое из описываемого достичь, но насколько гибкое решение бы получилось?) манипулировать содержимым страниц, так что вопрос выбора средства достижения цели не стоял в принципе.&lt;/p&gt;
&lt;p&gt;Что именно делает скрипт? В первой строчке скрываются два первых &lt;span style="font-weight: bold;"&gt;BR&lt;/span&gt; внутри блока с классом &lt;span style="font-weight: bold;"&gt;.r&lt;/span&gt;, который вложен в блок с классом &lt;span style="font-weight: bold;"&gt;.admin-content&lt;/span&gt;. При этом, отмечу, остальные блоки BR, если они будут присутствовать на странице, останутся нетронутыми. Во второй строке происходить скрытие первого UL списка. &lt;/p&gt;
&lt;p&gt;Самое интересное происходит в третьей строке. В ней происходит манипуляция с DOM страницы. Всё содержимое блока с классом &lt;span style="font-weight: bold;"&gt;.info&lt;/span&gt; (который вложен в блок с id равным &lt;span style="font-weight: bold;"&gt;tabs-widget-fragment-0&lt;/span&gt;) вставляется с переносом перед первым параграфом, который вложен в блок с классом &lt;span style="font-weight: bold;"&gt;.r&lt;/span&gt;. Чтобы было понятно, почему именно так и о чём идёт речь, можно заглянуть в html-код страницы. На момент написания статьи нужный фрагмент кода после отработки скрипта выглядел так:&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;a href="http://vizr.ru/uploads/pictures/adminka-2-html.png" class="lightbox"&gt;&lt;img src="http://vizr.ru/uploads/pictures/mini/adminka-2-html.png" alt=""&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;На картинке отчётливо видно, какие блоки были скрыты и куда переместился блок с полезными ссылками. Думаю, теперь также стало понятно, что четвертая строка скрипта скрывает блок с табами. Если вы пользуетесь страницами со статистикой, то последнюю строчку кода вам лучше убрать (иначе потеряете доступ к нужной информации) и вместо неё написать такой код:&lt;/p&gt;


&lt;pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content #tabs-widget ul#tabs-menu li:eq(1)")
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .addClass("ui-tabs-selected");
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".admin-content #tabs-widget ul#tabs-menu li:first")
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .hide();
&lt;/pre&gt;


&lt;p&gt;Этот код скрывает первый пустой (после наших предыдущих манипуляций) таб с заголовком «Админ-анонс» и делает активным следующий таб, который имеет заголовок «Статистика».&lt;/p&gt;
&lt;p&gt;Ссылку на скачивание исходного кода не даю, ибо он и так весь на ладони.&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие сайты" title="Другие сайты"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту MoscowStroi.com, который предлагает услуги &lt;a href="http://moscowstroi.com/"&gt;строительства и ремонта загородных домов в Подмосковье и СПб&lt;/a&gt;. Помимо непосредственной рекламы строительных услуг, на сайте предлагается купить уже готовые загородные дома.&lt;/p&gt;
&lt;a href="http://vizr.ru/page/hack-jquery-tjuning-admin-stranicy-informacija-v-maxsite-cms#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/DOaCRryZ-bY" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/hack-jquery-tjuning-admin-stranicy-informacija-v-maxsite-cms</feedburner:origLink></item>
				<item>
			<title><![CDATA[Три GreaseMonkey/Scriptish jQuery&#45;userscript&#45;а для облегчения веб&#45;серфинга]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/5TXXquTLxUg/tri-greasemonkey-scriptish-jquery-userscript-dlja-oblegchenija-web-serfinga</link>
			<guid isPermaLink="false">http://vizr.ru/page/tri-greasemonkey-scriptish-jquery-userscript-dlja-oblegchenija-web-serfinga</guid>
			<pubDate>Sun, 05 Feb 2012 17:29:54 +0600</pubDate>
			<category><![CDATA[Инструменты, Лаборатория]]></category>
			<description>&lt;p&gt;Так уж вышло, что браузерные юзерскрипты я долгое время игнорировал, хотя постоянно натыкался на их упоминание. Думаю, что на меня «пагубно» подействовало впечатление, которое сложилось после прочтения первого упоминания. В тот момент я почему-то сделал для себя вывод, что GreaseMonkey (а именно это средство расширения браузера Firefox считается «основателем» юзерскрипт-движения) используется в основном для автоматизации заполнения форм. Заполнять кучи веб-форм мне тогда не нужно было и я отложил изучение GreaseMonkey в долгий ящик. А зря. Но, как говорится, мир не без добрых людей. В конце прошлого года ко мне обратились с просьбой помочь решить одну небольшую задачу. &lt;img src="/uploads/pictures/greasemonkey.gif" class="border left" title="Лого GreaseMonkey" alt="Лого GreaseMonkey" width="200" border="0" height="200"&gt; Суть задачи сводилась к тому, что на одном интранет-сайте была страница со списком товарных позиций, а параметры товара скрывались под «спойлером» (это такая специальная кнопка «свернуть-развернуть»). Человек хотел, чтобы я сделал что-нибудь, после чего спойлерные кнопки автоматически нажимались и происходило разворачивание всей информации по товарным позициям открытой страницы. Так как человек уже намучился с проблемой и даже успел поискать решение самостоятельно, то он мне сразу предложил попробовать решать с помощью GreaseMonkey. Я достаточно быстро разобрался с необходимыми средствами и понял, что &lt;b&gt;GreaseMonkey/Scriptish/Trixie&lt;/b&gt; можно использовать не только для заполнения форм, но и в куче других ситуаций. Далее, за несколько минут был написан скрипт, который избавил человека от многолетней муки. А я, чтобы закрепить знания и успех в использовании userscripts, тут же разобрался с несколькими своими давними «веб-занозами». В общем, в продолжении материала предлагаю ознакомиться с тремя скриптами, которые облегчают посещение сайтов &lt;b&gt;habrahabr.ru&lt;/b&gt;, offtop.ru и oko-planet.su.&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;

&lt;h2&gt;Userscript автоматической авторизации на habrahabr.ru&lt;/h2&gt;
&lt;p&gt;Не знаю как у других людей, но у меня habrahabr.ru выбрасывает из авторизованной сессии примерно раз в неделю (точнее не приглядывался). Ничего особенного в этом нет, пока не возникает желания добавить статью в свои избранные или проголосовать за статью/комментарий. Обычно приходится переходить на страницу авторизации, вводить пароль/капчу, возвращаться на нужную страницу и обновлять её, чтобы вступила в силу авторизация. Решил я эту проблему таким скриптом:&lt;/p&gt;


&lt;pre&gt;
// ==UserScript==
// @id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; habrahabr.ru@scriptish
// @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; habrahabr_auth
// @version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0
// @namespace&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; habrahabr
// @author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vimruler
// @description&amp;nbsp;&amp;nbsp;&amp;nbsp; auto autorization on habrahabr.ru
// @require&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://code.jquery.com/jquery.min.js
// @include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://habrahabr.ru/*
// @run-at&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document-end
// ==/UserScript==
$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; var user = GM_getValue("user", "");
&amp;nbsp;&amp;nbsp;&amp;nbsp; var pass = GM_getValue("pass", "");
&amp;nbsp;&amp;nbsp;&amp;nbsp; if((user == "") || (pass == "")){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var user = pass = "";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((user == "") || (pass == "")) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("Пожалуйста, введите не пустые значения 'логин' and 'пароль'");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user = prompt("Логин");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass = prompt("Пароль");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GM_setValue("user", user);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GM_setValue("pass", pass);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; if($("div.userpanel &amp;gt; a.login").length &amp;gt; 0 &amp;amp;&amp;amp; confirm('Авторизовать?')) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "/ajax/auth/",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: &amp;nbsp; "login=" + 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; user + 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;password=" + 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pass + 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;act=login&amp;amp;redirect_url=http://habrahabr.ru/",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; success: function(msg){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.location.reload(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error:function(msg){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(confirm('Ошибка. Перебросить на страницу авторизации?')) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; window.location = 'http://habrahabr.ru/login/';
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
});
&lt;/pre&gt;


&lt;p&gt;Логика работы скрипта такая: На пером шаге проводится проверка на наличие данных о логине и пароле. Если данных нет, то пользователю показывается диалоговое окно для ввода логина и пароля и затем они сохраняются в браузере с помощью функций GM API. На следующем шаге происходит проверка наличия характерных для разлогиненного юзера блоков. Если такие есть, то задаётся вопрос о проведении авторизации. Если пользователь утвердительно ответил на этот вопрос, то выполняется авторизационный AJAX-запрос. Пусть вас не смущает, что параметру запроса redirect_url задаётся значение 'http://habrahabr.ru/' - просто нужно соблюсти наличие параметра, но редиректа на эту страницу происходить не будет. Если AJAX-запрос пришёл успешно, то происходит перезагрузка текущей страницы. В случае ошибки пользователю задаётся вопрос о переходе на страницу авторизации. Всё.&lt;/p&gt;
&lt;p&gt;Осталось только пояснить содержание некоторых строчек секции метаданных юзерскрипа:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;@require&lt;/span&gt; - подключаем сжатый вариант jQuery. Использование jQuery значительно облегчает написание userscript-ов. Чтобы не заботиться об актуальности библиотеки подключаем с официального сайта библиотеки.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;@include&lt;/span&gt; - настраивается фильтр страниц, на которых будет происходить срабатывание скрипта. В данном случае скрипт будет срабатывать на всех страницах сайта.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;@run-at&lt;/span&gt; - в какой момент запускать скрипт? В данном случае - после того как вся страница будет сформирована.&lt;/li&gt;&lt;/ul&gt;

&lt;blockquote&gt;&lt;a href="http://vizr.ru/dc/aHR0cDovL3ZpenIucnUvdXBsb2Fkcy9zcmMvaGFicmFoYWJycnVzY3JpcHRpc2gudXNlcl8uanMuemlw" title="http://vizr.ru/uploads/src/habrahabrruscriptish.user_.js.zip"  target="_blank" alt="Скачать код habrahabrruscriptish.user.js.zip" title="Скачать код habrahabrruscriptish.user.js.zip"&gt;Скачать userscript habrahabrruscriptish.user.js.zip&lt;/a&gt; &lt;sup title="Количество переходов"&gt;1&lt;/sup&gt;&lt;br&gt;
&lt;b&gt;ZIP (872 б).&lt;/b&gt;&lt;/blockquote&gt;


&lt;h2&gt;Userscript авторизации на форумах Offtop.ru&lt;/h2&gt;
&lt;p&gt;Не знаю кто ещё посещает этот внешне очень устаревший сайт, лично я изредка заглядывал раньше в &lt;a href="http://offtop.ru/satsang/1.php" rel="nofollow"&gt;эту ветку форума «Сатсанг»&lt;/a&gt;. Чтобы увидеть новые сообщения с момента последнего посещения форума нужно быть авторизованным. Авторизация слетает через несколько часов с момента посещения. Каждый раз вбивать логин и пароль - утомляет. Даже простое нажатие клавиши Enter (или мышкой кнопки "Войти") в случае, когда Firefox заботливо подставляет сохранённые данные - утомляет. Теперь решение этой проблемы выглядит так:&lt;/p&gt;

&lt;pre&gt;
// ==UserScript==
// @id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offtop.ru@scriptish
// @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offtopru_auth
// @version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0
// @namespace&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; offtopru
// @author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vimruler
// @description&amp;nbsp;&amp;nbsp;&amp;nbsp; auto autorization on offtop.ru/satsang/
// @require&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://code.jquery.com/jquery.min.js
// @include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://offtop.ru/satsang/*
// @run-at&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document-end
// ==/UserScript==
$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; var user = GM_getValue("user", "");
&amp;nbsp;&amp;nbsp;&amp;nbsp; var pass = GM_getValue("pass", "");
&amp;nbsp;&amp;nbsp;&amp;nbsp; if((user == "") || (pass == "")){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var user = pass = "";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((user == "") || (pass == "")) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("Please enter nonempty user and password");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user = prompt("Login");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass = prompt("Password");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GM_setValue("user", user);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GM_setValue("pass", pass);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("input&amp;#91;name=login&amp;#93;").val(user);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("input&amp;#91;name=pass&amp;#93;").val(pass);
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("form:has(input:password)").append(
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;input name=submit_auth type=hidden value&lt;img src="http://vizr.ru/uploads/vim_smiles/shok.gif" width="20" height="20" alt="shok" class="smile" /&gt;k&amp;gt;");
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("form:has(input:password)").submit();
});
&lt;/pre&gt;

&lt;/p&gt;
&lt;p&gt;Всё примерно так же, как в скрипте для habrahabr.ru, только нет AJAX-запроса - идёт обычный сабмит формы.&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="http://vizr.ru/dc/aHR0cDovL3ZpenIucnUvdXBsb2Fkcy9zcmMvb2ZmdG9wcnVzY3JpcHRpc2gudXNlcl8uanMuemlw" title="http://vizr.ru/uploads/src/offtopruscriptish.user_.js.zip"  target="_blank" alt="Скачать код offtopruscriptish.user.js.zip" title="Скачать код offtopruscriptish.user.js.zip"&gt;Скачать userscript offtopruscriptish.user.js.zip&lt;/a&gt; &lt;sup title="Количество переходов"&gt;0&lt;/sup&gt;&lt;br&gt;
&lt;b&gt;ZIP (625 б).&lt;/b&gt;&lt;/blockquote&gt;


&lt;h2&gt;Юзерскрипт для вырезания рекламы на сайте oko-planet.su&lt;/h2&gt;
&lt;p&gt;Сайт «&lt;a href="http://oko-planet.su/" rel="nofollow"&gt;Око планеты&lt;/a&gt;» я посещал в моменты моего интереса к получения неофициальных новостей о происходящем на Земле. Сейчас интерес пропал, но оставалась горечь поражения от неудачи в борьбе с рекламным блоком, который администрация сайта размещала после статей и при этом они умудрялись периодически менять рекламодателя после чего старые Adblock-фильтры переставали работать. Я обрёл своё счастье после написания следующего скрипта:&lt;/p&gt;


&lt;pre&gt;
// ==UserScript==
// @id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oko-planet.su@scriptish
// @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oko-planet_adblock
// @version&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0
// @namespace&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oko-planet
// @author&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vimruler
// @description&amp;nbsp;&amp;nbsp;&amp;nbsp; hide advertise 
// @require&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://code.jquery.com/jquery.min.js
// @include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://oko-planet.su/*.html
// @run-at&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document-end
// ==/UserScript==
$(function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("div#dle-content &amp;gt; table &amp;gt; tbody &amp;gt; tr &amp;gt; td &amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;table &amp;gt; tbody &amp;gt; tr &amp;gt; td &amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;table &amp;gt; tbody &amp;gt; tr &amp;gt; td.news &amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;table").hide();
&amp;nbsp;&amp;nbsp;&amp;nbsp; $("body &amp;gt; table &amp;gt; tbody &amp;gt; tr &amp;gt; td &amp;gt; table &amp;gt; tbody &amp;gt; tr &amp;gt; td &amp;gt; iframe").hide();
});
&lt;/pre&gt;


&lt;p&gt;В этом скрипте видна вся мощь возможностей селекторов jQuery. Суть скрипта - скрывается весь блок, в котором размещается реклама на странице. Пусть владельцы сайта резвятся с перебором рекламодателей без меня. Как получить адрес блока для скрытия? С помощью Firebug! Вот скриншот как был получен селектор-адрес одного из наиболее «труднодоступных» блоков для нужд приведённого выше скрипта:&lt;/p&gt;

&lt;div style="text-align: center;"&gt;&lt;a href="/uploads/pictures/oko-userscript.png" class="lightbox"&gt;&lt;img src="/uploads/pictures/mini/oko-userscript.png" alt=""&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Конечно, этот скрипт не гарантирует, что владельцы сайта снова не изменят вёрстку и адрес блока не изменится после этого. Однако, намного проще просто подправить уже имеющийся скрипт под новые условия, нежели пробираться через рекламные дебри особенно меркантильных сайтовладельцев. Всё таки верстка меняется не так часто на сайтах.&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="http://vizr.ru/dc/aHR0cDovL3ZpenIucnUvdXBsb2Fkcy9zcmMvb2tvLXBsYW5ldHN1c2NyaXB0aXNoLnVzZXJfLmpzLnppcA==" title="http://vizr.ru/uploads/src/oko-planetsuscriptish.user_.js.zip"  target="_blank" alt="Скачать код oko-planetsuscriptish.user.js.zip" title="Скачать код oko-planetsuscriptish.user.js.zip"&gt;Скачать userscript oko-planetsuscriptish.user.js.zip&lt;/a&gt; &lt;sup title="Количество переходов"&gt;0&lt;/sup&gt;&lt;br&gt;
&lt;b&gt;ZIP (458 б).&lt;/b&gt;&lt;/blockquote&gt;


&lt;h2&gt;Заключение&lt;/h2&gt;
&lt;p&gt;В заключении хотел бы сказать, что для исполнения скриптов я использую &lt;a href="https://addons.mozilla.org/ru/firefox/addon/scriptish/" rel="nofollow"&gt;Firefox-плагин Scriptish&lt;/a&gt;. И хотя в нём есть довольно странные особенности поведения, но на мой личный вкус в нём их меньше, чем в GreaseMonkey, да и удобнее редактировать и управлять скриптами. А проводники мы будем делать из дерева.&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие сайты" title="Другие сайты"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту OfficesConcept.com, который занимается продажей &lt;a href="http://officesconcept.com/"&gt;офисной мебели для руководителя и персонала в Москве и Санкт-Петербурге&lt;/a&gt;. Помимо непосредственной рекламы различной офисной мебели, на сайте также предлагают купить стандартные или мобильные офисные перегородки.&lt;/p&gt;
&lt;a href="http://vizr.ru/page/tri-greasemonkey-scriptish-jquery-userscript-dlja-oblegchenija-web-serfinga#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/5TXXquTLxUg" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/tri-greasemonkey-scriptish-jquery-userscript-dlja-oblegchenija-web-serfinga</feedburner:origLink></item>
				<item>
			<title><![CDATA[Оживляем сайт jQuery&#45;анимацией в шапке сайта. Мой опыт]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/c5nJOjka6AI/ozhivljaem-sajt-jquery-animaciej-v-shapke-sajta</link>
			<guid isPermaLink="false">http://vizr.ru/page/ozhivljaem-sajt-jquery-animaciej-v-shapke-sajta</guid>
			<pubDate>Sat, 04 Feb 2012 20:24:22 +0600</pubDate>
			<category><![CDATA[Лаборатория]]></category>
			<description>&lt;p&gt;Согласитесь, что если на сайте есть гармоничные «двигающиеся» элементы, то сайт выглядит немного более живым и тем самым - более привлекательным. Я считаю, что у любого сайта должна быть визуальная «изюминка». Пусть небольшая, но должна быть. Ещё лучше, если эта «изюминка» будет вызывать «Вау!-эффект» у посетителей. Ну, или должна привлекать и задерживать на себе взгляд серфера. В этой публикации я хочу рассказать о своей работе над «изюминкой» сайта компании «АББ-ЩИТ» и поделиться программным кодом реализации анимации. Суть «изюминки» вы можете видеть уже сейчас на следующей картинке:&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/pictures/abb-anim-header.gif" class="border center" title="анимированная шапка сайта компании АББ-ЩИТ" alt="анимированная шапка сайта компании АББ-ЩИТ" height="308" width="700" align="middle"&gt;&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;
&lt;p&gt;Шапка сайта в таком виде появилась случайно. Первоначально &lt;a href="/page/moj-pervyj-novosibirskij-klient"&gt;я задумывал и предлагал клиенту&lt;/a&gt; использовать в шапке &lt;a href="http://ruseller.com/lessons.php?rub=32&amp;amp;id=1186"&gt;галерею изображений с эффектом аккордеона&lt;/a&gt;. Из всей массы перебранных jQuery-эффектов этот, на мой взгляд, подходил больше всего. Однако директор компании проявил творческий подход и принял решение разместить в шапке сайта в качестве основы - красивую фотографию города. Без «непонятного аккордеона».&lt;/p&gt;
&lt;p&gt;Фото нашлось и купилось относительно быстро. Однако далее встала в полный рост проблема реализации блока ссылок на страницы основных услуг компании. В основное меню, по понятным причинам (мало места), втиснуть ссылки было нельзя. Выпадающее меню (при наведении мышки на пункт «Услуги» основного горизонтального меню должно появляться-выпадать дополнительное вертикальное меню) заказчик посчитал неприемлемым в виду «малозаметности». В то время, как на услугах хотелось бы акцентировать внимание посетителя.&lt;/p&gt;
&lt;p&gt;И вот глядя то на аккордеон, то на фото города, мне пришла мысль попробовать разбить фото города на пять частей и сделать каждую часть ссылкой. Плюс к этому, логичным показалось выводить над фото  название услуги, соответствующее фрагменту фотографии. В таком виде была заказана вёрстка html-шаблона. Верстальщик предложил реализовать требуемой с помощью тэгов &amp;lt;map&amp;gt; и &amp;lt;area&amp;gt;. Для карты получился примерно следующий CSS+jQuery+html-код:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;style&amp;gt;
.header_right {
&amp;nbsp;&amp;nbsp;&amp;nbsp; position:relative; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; float:right; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; width:693px; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; padding:0 7px 7px 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; text-align:center; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; font-weight:bold; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; font-size:12px; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; color:#fff;
}
.header-text {height:21px; line-height:18px;}
img.layer {position:absolute; right:7px;}
&amp;lt;/style&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".imglink").mousemove(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $('.services_name').text($(this).attr('alt'));
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
});
&amp;lt;/script&amp;gt;
&amp;lt;div class="header_right"&amp;gt;
&amp;nbsp;&amp;lt;div class="header-text"&amp;gt;читать подробнее об услугах:&amp;lt;span class="services_name"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp;&amp;lt;img src="/images/layer.png" class="layer" width="689" height="249" usemap="#shapes"&amp;gt;
&amp;nbsp;&amp;lt;map name="shapes"&amp;gt;
&amp;nbsp; &amp;lt;area shape="rect" coords="0,0,135,248" href="/page/1.html"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="пультовая охрана"&amp;gt;
&amp;nbsp; &amp;lt;area shape="rect" coords="139,0,270,248" href="/page/2.html" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="физическая охрана стационарных объектов"&amp;gt;
&amp;nbsp; &amp;lt;area shape="rect" coords="275,0,413,248" href="/page/3.html" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="личная охрана"&amp;gt;
&amp;nbsp; &amp;lt;area shape="rect" coords="418,0,551,248" href="/page/4.html" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="сопровождение грузов"&amp;gt;
&amp;nbsp; &amp;lt;area shape="rect" coords="556,0,688,248" href="/page/5.html" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="охрана мероприятий"&amp;gt;
&amp;nbsp;&amp;lt;/map&amp;gt;
&amp;nbsp;&amp;lt;img src="/images/city.jpg" class="img-header" width="689" height="249"&amp;nbsp; alt=""&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Здесь приведён не весь код, а только значимая часть для иллюстрации идеи. Думаю, что этого фрагмента кода вполне достаточно для понимания задумки. Пожалуй, только следует пояснить присутствие файла 'layer.png'. Эта картинка реализовывала визуальное разбиение фотографии города на 5 частей с помощью наложения узеньких полосок. Если слова не проясняют ситуацию, то просто взгляните на сами картинки:&lt;/p&gt;

&lt;div style="text-align: center;"&gt;
&lt;div class="gallery"&gt;
&lt;a href="/uploads/pictures/abb-city.jpg" title="city.jpg"&gt;&lt;img src="/uploads/pictures/mini/abb-city.jpg" alt="city.jpg"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-layer.png" title="layer.png"&gt;&lt;img src="/uploads/pictures/mini/abb-layer.png" alt="layer.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-layer-2.png" title="layer-2.png"&gt;&lt;img src="/uploads/pictures/mini/abb-layer-2.png" alt="layer-2.png"&gt;&lt;/a&gt;
&lt;p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Второй файл 'layer-2.png' был нужен для обхода «особенности» отображения прозрачных картинок в IE6.&lt;/p&gt;
&lt;p&gt;Такой вариант реализации «изюминки», которая бы привлекала внимание, работал. Но мучила мысль, что «этого мало». Поэтому была проведена длинная череда экспериментов с различным сочетанием эффектов, которые прошиты в библиотеке jQuery. Ничего толкового не получилось - выяснилось, что на карту (&amp;lt;map&amp;gt; ) не применимы большинство эффектов. За всю веб-мастерскую жизнья с html-картами я практически не работал и поэтому не знал о такой особенности, а следовательно - пришлось проделать такой длинный путь. В конце концов, я принял решение поступить менее технологичным, но зато гарантированно рабочим методом (а скорее всего вообще единственно возможным) - разрезать картинку на отдельные кусочки и попробовать прикладывать эффекты уже к ним, в поиске наиболее интересного сочетания. &lt;/p&gt;
&lt;p&gt;Так появился следующий html-код и картинки:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;script type="text/javascript"&amp;gt;
$(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(".tbl-header").fadeswitcher({});
});
&amp;lt;/script&amp;gt;
&amp;lt;div class="header_right"&amp;gt;
&amp;nbsp;&amp;lt;div class="header-text"&amp;gt;&amp;lt;span class="services_name"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;
&amp;nbsp; &amp;lt;table border=0 cellspacing=0 cellpadding=0 width=689 class="tbl-header"&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;a href="/page/pult"&amp;gt;&amp;lt;img src="/uploads/header_photos/block1.png" 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="пультовая охрана" class="imglink"&amp;gt;&amp;lt;/a&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;img src="/uploads/header_photos/line1.png" alt="line1"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;a href="/page/buildprotect"&amp;gt;&amp;lt;img src="/uploads/header_photos/block2.png" 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="физическая охрана стационарных объектов" class="imglink"&amp;gt;&amp;lt;/a&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;img src="/uploads/header_photos/line2.png" alt="line2"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;a href="/page/bodyguard"&amp;gt;&amp;lt;img src="/uploads/header_photos/block3.png" 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="личная охрана" class="imglink"&amp;gt;&amp;lt;/a&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;img src="/uploads/header_photos/line3.png" alt="line3"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;a href="/page/cargoescort"&amp;gt;&amp;lt;img src="/uploads/header_photos/block4.png" 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="сопровождение грузов" class="imglink"&amp;gt;&amp;lt;/a&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;img src="/uploads/header_photos/line4.png" alt="line4"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;a href="/page/eventprotect"&amp;gt;&amp;lt;img src="/uploads/header_photos/block5.png" 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alt="охрана мероприятий" class="imglink"&amp;gt;&amp;lt;/a&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;
&amp;nbsp; &amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;



&lt;div style="text-align: center;"&gt;
&lt;div class="gallery"&gt;
&lt;a href="/uploads/pictures/abb-block1.png" title="block1.png"&gt;&lt;img src="/uploads/pictures/mini/abb-block1.png" alt="block1.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-line1.png" title="line1.png"&gt;&lt;img src="/uploads/pictures/mini/abb-line1.png" alt="line1.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-block2.png" title="block2.png"&gt;&lt;img src="/uploads/pictures/mini/abb-block2.png" alt="block2.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-line2.png" title="line2.png"&gt;&lt;img src="/uploads/pictures/mini/abb-line2.png" alt="line2.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-block3.png" title="block3.png"&gt;&lt;img src="/uploads/pictures/mini/abb-block3.png" alt="block3.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-line3.png" title="line3.png"&gt;&lt;img src="/uploads/pictures/mini/abb-line3.png" alt="line3.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-block4.png" title="block4.png"&gt;&lt;img src="/uploads/pictures/mini/abb-block4.png" alt="block4.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-line4.png" title="line4.png"&gt;&lt;img src="/uploads/pictures/mini/abb-line4.png" alt="line4.png"&gt;&lt;/a&gt;
&lt;a href="/uploads/pictures/abb-block5.png" title="block5.png"&gt;&lt;img src="/uploads/pictures/mini/abb-block5.png" alt="block5.png"&gt;&lt;/a&gt;
&lt;p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Из приведённого html-кода видно, что основной функционал, который реализует визуальный эффект, был вынесен в jQuery плагин fadeswitcher:&lt;/p&gt;


&lt;pre&gt;
(function($){
$.fn.fadeswitcher = function(options){
&amp;nbsp;return this.each(function(){
&amp;nbsp; options = $.extend({
&amp;nbsp;&amp;nbsp;&amp;nbsp; name :&amp;nbsp;&amp;nbsp; 'fadeswitcher',
&amp;nbsp;&amp;nbsp;&amp;nbsp; imgclass :&amp;nbsp; '.imglink',
&amp;nbsp;&amp;nbsp;&amp;nbsp; altcopy :&amp;nbsp; true,
&amp;nbsp;&amp;nbsp;&amp;nbsp; altcopyclass : '.services_name',
&amp;nbsp;&amp;nbsp;&amp;nbsp; speed:&amp;nbsp;&amp;nbsp; 500,
&amp;nbsp;&amp;nbsp;&amp;nbsp; times:&amp;nbsp;&amp;nbsp; 2, // сколько раз мигать
&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout:&amp;nbsp; 3000,
&amp;nbsp;&amp;nbsp;&amp;nbsp; autorun:&amp;nbsp; true
&amp;nbsp;&amp;nbsp; },options);
&amp;nbsp; var $this = $(this), 
&amp;nbsp;&amp;nbsp; current = -1, 
&amp;nbsp;&amp;nbsp; intervalID = 0,
&amp;nbsp;&amp;nbsp; altto = $(options.altcopyclass),
&amp;nbsp;&amp;nbsp; pics = $(options.imgclass),
&amp;nbsp;&amp;nbsp; count = pics.length - 1,
&amp;nbsp;&amp;nbsp; run = false,
&amp;nbsp;&amp;nbsp; methods = {
&amp;nbsp;&amp;nbsp;&amp;nbsp; init: function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pics.stop(true,true).show();// делаем всех видимыми
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this.bind('mousemove.fadeswitcher',function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; methods.stop();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $this.bind('mouseleave.fadeswitcher',function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; methods.start();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pics.bind('mouseleave.fadeswitcher',function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; altto.text('');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pics.bind('mousemove',function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var txt = $(this).attr('alt');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(options.altcopyclass).text( txt );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(options.autorun) methods.start();
&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp; start: function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intervalID = setInterval(function(){methods.next();},options.timeout);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop: function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(run){ 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; altto.text('');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearInterval(intervalID);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pics.show();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp; next: function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; altto.text('');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; current++;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(current &amp;gt;= count) current = -1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; altto.text( pics.eq(current).attr('alt') );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pics.eq(current).show("pulsate", {times: options.times}, options.speed);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; };
&amp;nbsp; methods.init();
&amp;nbsp;});
};
})(jQuery);
&lt;/pre&gt;


&lt;p&gt;Исходный код jQuery-плагина доступен для скачивания:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="http://vizr.ru/dc/aHR0cDovL3ZpenIucnUvdXBsb2Fkcy9zcmMvanF1ZXJ5LmZhZGVzd2l0Y2hlcl8uanMuemlw" title="http://vizr.ru/uploads/src/jquery.fadeswitcher_.js.zip"  target="_blank" alt="Скачать код jQuery-плагина" title="Скачать код jQuery-плагина"&gt;Скачать код jQuery-плагина «попеременного затухания элементов шапки сайта»&lt;/a&gt; &lt;sup title="Количество переходов"&gt;5&lt;/sup&gt;&lt;br&gt;
&lt;b&gt;ZIP (1,04 Кб).&lt;/b&gt;&lt;/blockquote&gt;

&lt;p&gt;Суть работы плагина сводится к циклическому последовательному переходу от одного фрагмента фотографии к другому. При переходе на следующий фрагмент происходит изменение подписи над фотографией на соответствующую текущему фрагменту. Также к текущему фрагменту применяется эффект визуального затухания с последующим обратным проявлением - pulsate (jQuery). Цикл прерывается, если курсор мышки оказался в области фотографии. Возобновляется цикл при выходе мышиного курсора за пределы области с фотографией. Фрагменты собираются в единую фотографию с помощью таблицы (table). Можно было сделать с помощью div. Но после эпикфейла с map почему-то потянуло использовать проверенные годами приёмы верстки.&lt;/p&gt;
&lt;p&gt;Демонстрацию работы данного кода можно увидеть на &lt;a href="http://abb-shield.ru" rel="nofollow"&gt;сайте компании АББ-ЩИТ&lt;/a&gt;. Код достаточно очевидный и думаю, что сейчас нет смысла ещё более детально разбирать логику его работы - программисты и так разберутся. Если же у вас всё же возникнут вопросы, то смело задавайте их в комментариях - отвечу (по мере сил и свободного времени). Очень интересуют идеи и предложения по улучшению алгоритма реализации визуального эффекта. Не каждый день занимаюсь разработкой визуальных эффектов на jQuery и поэтому мог что-то упустить или не знать какого-нибудь трюка. Также буду благодарен, если в комментариях вы выскажете своё общее мнение об описанном варианте решения проблемы привлечения внимания к важным элементам сайта.&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие сайты" title="Другие сайты"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту AutoTulz.com, который занимается продажей &lt;a href="http://autotulz.com/"&gt;шин и дисков для автомобилей&lt;/a&gt;. Помимо непосредственной рекламы различных шин и дисков, на сайте ксеноновые лампы (фары) и парктроники с установкой.&lt;/p&gt;
&lt;a href="http://vizr.ru/page/ozhivljaem-sajt-jquery-animaciej-v-shapke-sajta#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/c5nJOjka6AI" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/ozhivljaem-sajt-jquery-animaciej-v-shapke-sajta</feedburner:origLink></item>
				<item>
			<title><![CDATA[Как привлечь внимание к форме быстрого контакта?]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/DjA5TEjKA0c/kak-privlech-vnimanie-k-forme-bystrogo-kontakta</link>
			<guid isPermaLink="false">http://vizr.ru/page/kak-privlech-vnimanie-k-forme-bystrogo-kontakta</guid>
			<pubDate>Wed, 01 Feb 2012 21:52:11 +0600</pubDate>
			<category><![CDATA[Лаборатория]]></category>
			<description>&lt;p&gt;Изучая сайты-визитки компаний никогда не обращал внимания на формы типа «Мы вам перезвоним, только оставьте свои данные». Вроде как незачем было. Но вот на одном сайте смогли-таки привлечь моё разборчивое внимание простым, но очень действенным эффектом - затемнением всего пространства страницы, за исключением самой контактной формы при случайном наведении курсора мышки на форму. При этом получается эдакий визуальный акцент на форме. Похоже у нас на подсознательном уровне есть модель поведения, когда мы инстинктивно ориентируемся в темноте на хоть маленький, но источник света. Так и здесь получается - всё погасло и нам нужно рассмотреть «откуда свет?» В общем, мне этот эффект настолько понравился, что я его тут же применил в своей &lt;a href="/page/moj-pervyj-novosibirskij-klient"&gt;работе над сайтом фирмы «АББ-ЩИТ»&lt;/a&gt;. Если вам интересно, то пройдите на &lt;a href="http://abb-shield.ru/" rel="nofollow"&gt;сайт компании&lt;/a&gt;, посмотрите этот эффект в действии. Форма расположена в сайдбаре и имеет заголовок «Заявка на услугу». А потом можно будет перейти к моему описанию как такой эффект воспроизвести у вас на сайте.&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/pictures/orderform.gif" class="border center" title="Эффект затемнения вокруг формы быстрого контакта" alt="Эффект затемнения вокруг формы быстрого контакта" width="480" align="middle" border="0" height="200"&gt;&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;
&lt;p&gt;Как оказалось, реализуется такой эффект с помощью использования специальных CSS стилей и небольшого кода на JavaScript. Давайте договоримся, что наша контактная форма расположена в специальном DIV блоке с прописанным атрибутом id (пусть id='request-content') и есть глобальный блок-контейнер с id='request'. Выносить заголовок (caption) формы за пределы этого блока или же оставлять «внутри» - дело ваше. Просто учтите при вёрстке. А я, для наглядности, вынес за пределы формы. Итак, Предположим у вас есть контактная форма, которая в html выглядит так:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;div id="request"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h2&amp;gt;Заявка&amp;lt;/h2&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;hr&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div class="request-content" id="request-content"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form action="" method="POST" class="request-form"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p class="input-text"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="contact_name"&amp;gt;Контактное лицо:&amp;lt;/label&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="text" class="text" id="contact_name" name="contact_name" value=""&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p class="input-text"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="phone_number"&amp;gt;Ваш телефон:&amp;lt;/label&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="text" class="text" id="phone_number" name="phone_number" value=""&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="submit" class="submit" value="Отправить заявку"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;hr&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;Мы с вами свяжемся!&amp;lt;/h3&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Теперь нам нужно прописать стили оформления. Впоследствии вы сможете настроить их под себя, экспериментируя со свойствами фона области формы и background-ом. В качестве основы берём такие стили:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;style&amp;gt;
.request-content {
&amp;nbsp;&amp;nbsp;&amp;nbsp; position: relative;
&amp;nbsp;&amp;nbsp;&amp;nbsp; z-index: 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp; padding:10px 6px 1px;
&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 294px;
&amp;nbsp;&amp;nbsp;&amp;nbsp; background: none repeat scroll 0 0 #ccffcc;
}
.request-content_hover {
&amp;nbsp;&amp;nbsp;&amp;nbsp; background: none repeat scroll 0 0 #ffeeee;
&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 294px;
&amp;nbsp;&amp;nbsp;&amp;nbsp; padding:10px 6px 1px;
&amp;nbsp;&amp;nbsp;&amp;nbsp; position: relative;
&amp;nbsp;&amp;nbsp;&amp;nbsp; z-index: 100;
}
#fade {
&amp;nbsp;&amp;nbsp;&amp;nbsp; background: none repeat scroll 0 0 #000000;
&amp;nbsp;&amp;nbsp;&amp;nbsp; height: 100%;
&amp;nbsp;&amp;nbsp;&amp;nbsp; left: 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; position: fixed;
&amp;nbsp;&amp;nbsp;&amp;nbsp; top: 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 100%;
&amp;nbsp;&amp;nbsp;&amp;nbsp; z-index: 50;
}
&amp;lt;/style&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Класс &lt;span style="font-weight: bold;"&gt;.request-content&lt;/span&gt; отвечает за внешний вид блока в состоянии «покоя». Класс &lt;span style="font-weight: bold;"&gt;.request-content_hover&lt;/span&gt; описывает внешний вид в момент активности эффекта. Класс с уникальным идентификатором #fade описывает оформления блока, который будет использоваться для создания эффекта затенения страницы. Приведённый код для случая, когда стили прописываются в секции head (т.е. должен быть внедрен в код страницы с помощью пары '&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;'). Вы же можете вынести эти классы в ваш общий файл стилей (например, в 'style.css').&lt;/p&gt;
&lt;p&gt;Заключительный и основной элемент реализации эффекта - код на JavaScript. Для облегчения задачи и уменьшения самой программы проще реализовать нужный функционал с помощью библиотеки jQuery (не забываем, что в этом случае вам нужно убедиться, что на странице подключается эта библиотека). Код действительно получается более наглядным и простым для понимания. Вот он:&lt;/p&gt;


&lt;pre&gt;
&amp;lt;script type="text/javascript"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var last_hover = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $('#request-content').hover(
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (last_hover !== true) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ($("#fade").length)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("#fade").remove();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("#request").append('&amp;lt;div id="fade" &amp;gt;&amp;lt;/div&amp;gt;');
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("div#fade").fadeTo(0, 0).fadeTo('fast', 0.6);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("div#request-content").removeClass('request-content').addClass('request-content_hover');
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; last_hover = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("#fade").fadeTo('fast', 0, function() {$(this).remove();});
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("div#request-content").removeClass('request-content_hover').addClass('request-content');
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ($("#fade").length)
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $("#fade").remove();
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; last_hover = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;lt;/script&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Немного поясню. Во-первых, определяется глобальная булевая переменная, которая отвечает за хранение текущего состояния формы. Далее мы видим, что на событие готовности страницы (см. конструкцию '$(document).ready') навешивается функция, в которой уже происходит связывание события попадания мышки на блок ('hover') с блоком, который имеет id='request-content'. При этом обработчику события "попадания на блок мышки" передаётся две функции, которые в конечном итоге и реализуют нужные действия при "попадании" и при "покидании" блока. Думаю, что дальше программисты и сами разберутся как кастомизировать этот код, а «непрограммисты» могут  обратиться ко мне за &lt;a href="/page/myservices"&gt;помощью сюда&lt;/a&gt;. Тем, кому нужен полный исходный код эффекта, вот ссылка на скачивание:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="http://vizr.ru/dc/aHR0cDovL3ZpenIucnUvdXBsb2Fkcy9zcmMvb3JkZXJmb3JtLmh0bWw=" title="http://vizr.ru/uploads/src/orderform.html"  target="_blank" alt="Скачать код эффекта" title="Скачать код эффекта"&gt;Скачать код эффекта «Затемнение вокруг контактной формы»&lt;/a&gt; &lt;sup title="Количество переходов"&gt;6&lt;/sup&gt;&lt;br&gt;
&lt;b&gt;HTML (2,4 Кб).&lt;/b&gt;&lt;/blockquote&gt;

&lt;p&gt;Буду благодарен, если в комментариях вы расскажете о других интересных способах привлечения внимания к форме быстрого контакта. Хотя бы покажите сайт, где вы его увидели и тогда, возможно, я опишу, как его реализовать у вас на сайте. Заранее спасибо!&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие сайты" title="Другие сайты"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту MebiusPrime.ru, который занимается продажей &lt;a href="http://mebiusprime.ru/"&gt;мягкой мебелив Москве и Подмосковье&lt;/a&gt;. Помимо непосредственной рекламы различной мебели, на сайте помогают выбирать лучшую мебель из сотен предложений и быстро сравнивать цены в разных мебельных магазинах.&lt;/p&gt;
&lt;a href="http://vizr.ru/page/kak-privlech-vnimanie-k-forme-bystrogo-kontakta#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/DjA5TEjKA0c" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/kak-privlech-vnimanie-k-forme-bystrogo-kontakta</feedburner:origLink></item>
				<item>
			<title><![CDATA[Про синхронизацию MaxSiteCMS&#45;сайтов на локальной машине и сервере]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/eD5Mfunp8j4/pro-sinhronizaciju-maxsitecms-sajtov-na-lokalnoj-mashine-i-servere</link>
			<guid isPermaLink="false">http://vizr.ru/page/pro-sinhronizaciju-maxsitecms-sajtov-na-lokalnoj-mashine-i-servere</guid>
			<pubDate>Mon, 30 Jan 2012 22:45:40 +0600</pubDate>
			<category><![CDATA[Лаборатория]]></category>
			<description>&lt;p&gt;В файле &lt;a href="http://max-3000.com/install-ru.txt" rel="nofollow"&gt;install-ru.txt&lt;/a&gt;, который идёт в поставке с MaxSite CMS, есть подробные инструкции по установки движка «с нуля» и инструкции по обновлению движка с предыдущей версии. Благодаря им я уже много раз успешно поставил и/или обновил движок сайтов. Однако, в моей практике есть ситуация, которая не описана в мануале, но которая встречается даже чаще, чем указанные ситуации. Я имею ввиду ситуацию, когда сайт создан и уже давно «работает в продакшене» на сервере и возникла производственная необходимость синхронизировать состояние скриптов на машине разработчика с файлами на сервере.&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;

&lt;h2&gt;С сервера на локальную машину&lt;/h2&gt;
&lt;p&gt;Отлаживать плагины или дорабатывать шаблон на сервере хоть и не рекомендую никому, но сам иногда этим грешу, ибо бывает нужно быстро &lt;span style="text-decoration: line-through;"&gt;заткнуть&lt;/span&gt;решить проблему, а уже потом «с чувством, с толком» разбираться с тем, что же произошло. Ещё мне нравится разрабатывать плагины в условиях приближенных к реальным. Т.е. желательно чтобы на локальном сайте крутились не тексты про белку, галактику или «лорем ипсум», а реально опубликованные в данный момент статьи. С картинками, ссылками и т.п. Мне так легче ловить баги вёрстки и функционирования сайта. В общем, без копирования на локальную машину работающей на сервере версии сайта в моём случае не обойтись. &lt;/p&gt;
&lt;p&gt;На локальной машине у меня стоит система Windows 7 (+ Denwer). На сервере стандартно-комфортная конфигурация FreeBSD+Apache+MySQL+Php. Поэтому задача немного упрощается, ибо, как минимум, нет необходимости на локальной машине отслеживать права доступа на файлы скрипта и заботиться о настройках Php и Apache. Поэтому план действий по переносу сайта с сервера на машину разработчика выглядит так:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Делаем резервную копию базы данных с помощью Dumper&lt;/span&gt;. При стандартном комплекте движка нужно обратиться по адресу 'http://имя_вашего_сайта/dumper/dumper.php' (при условии, что Dumper у вас настроен и имя папки вы не меняли). На своих проектах я использую следующее поколение Dumper - &lt;a href="http://sypex.net/ru/products/dumper/downloads/" rel="nofollow"&gt;Sypex Dumper 2.0.9&lt;/a&gt;. Поэтому обращение идёт по адресу 'http://имя_вашего_сайта/sxd/' (далее буду писать только для станадартной версии Dumper, а для 2.0.9 всё то же самое - только имя папки меняется соответственно).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Скачиваем по FTP папку с сайтом на локальный компьютер&lt;/span&gt;. За всё время работы у меня пока не прижились специальные программы FTP-клиенты - я пользуюсь по старинке FTP-клиентом FAR Manager-а. Обычно я копирую серверные файлы в папку 'S:\home\локальное_имя_сайта\www_serv'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Настраиваем коннект к базе данных&lt;/span&gt;. Нахожу файл 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php' и правлю настройки подключения к базе данных:&lt;blockquote&gt;Мой стандартный вариант для локального компьютера:&lt;br&gt;


&lt;pre&gt;
$db&amp;#91;'default'&amp;#93;&amp;#91;'hostname'&amp;#93; = 'localhost';
$db&amp;#91;'default'&amp;#93;&amp;#91;'username'&amp;#93; = 'root';
$db&amp;#91;'default'&amp;#93;&amp;#91;'password'&amp;#93; = '';
$db&amp;#91;'default'&amp;#93;&amp;#91;'database'&amp;#93; = 'имя_сайта_db';
&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;Эта операция обычно проводится только при первой синхронизации. При повторных синхронизациях можно не править настройки заново, а просто заменить серверный файл настроек на локальный файл. Я делаю так: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;переименовываю 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php' в 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php-serv'&lt;/p&gt;&lt;/li&gt;&lt;li&gt;переименовываю 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php-local' в 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php'&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Заменяем локальную версию файлов на скачанную с сервера&lt;/span&gt;. Т.е. нам нужно отправить в архив локальную версию сайта и поставить вместо неё работать версию сайта, которую только что скачали с сервера. Обычно я проделываю эту операцию следующим образом:&lt;ul&gt;&lt;li&gt;переименовываю папку 'S:\home\локальное_имя_сайта\www\' в 'S:\home\локальное_имя_сайта\www_текущая_дата\'&lt;/li&gt;&lt;li&gt;переименовываю папку 'S:\home\локальное_имя_сайта\www_serv\' в 'S:\home\локальное_имя_сайта\www\'&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Контролируем файл '.htaccess'&lt;/span&gt;. В некоторых случаях конфигурация сервера на хостинге может потребовать каких-то особенных настроек в файле '.htaccess' (под nginx нужно уточнять) и это надо учитывать. Обычно будет достаточно иметь две версии этого файла - для сервера и локальной машины. Поэтому, если вы столкнулись с такой необходимостью, переименуйте текущий файл (помним, что он только что скачан с сервера) из 'S:\home\локальное_имя_сайта\www\.htaccess' в 'S:\home\локальное_имя_сайта\www\.htaccess-serv'. Теперь скопируем из только что созданной архивной папки файл с настройками для локальной машины 'S:\home\локальное_имя_сайта\www_текущая_дата\.htaccess' в файл 'S:\home\локальное_имя_сайта\www\.htaccess'. Если вы уже не первый раз проходите весь процесс, то файл с локальными настройками у вас уже должен быть и поэтому можно не копировать из архива, а просто:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;переименовываем 'S:\home\локальное_имя_сайта\www\.htaccess' в 'S:\home\локальное_имя_сайта\www\.htaccess-serv'&lt;/p&gt;&lt;/li&gt;&lt;li&gt;переименовываем 'S:\home\локальное_имя_сайта\www\.htaccess-local' в 'S:\home\локальное_имя_сайта\www\.htaccess'&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Обновляем локальную базу из серверного бэкапа с помощью Dumper&lt;/span&gt;. При использовании Dumper 1.0.8 нужно обратиться по адресу 'http://локальное_имя_сайта/dumper/dumper.php'. При использовании Dumper 2.0.9 обращение идёт по адресу 'http://локальное_имя_сайта/sxd/'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Проверяю работу сайта&lt;/span&gt; обращаясь в браузере по адресу 'http://локальное_имя_сайта/'. Сайт должен нормально открыться. Если возникает ошибка, то ищу причину в соответствии с ней.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Сбрасываем кэш системы&lt;/span&gt;. Заходим в админку сайта 'http://локальное_имя_сайта/admin/' и нажимаем кнопку «Сбросить кэш системы». Делаем эту операцию для того, чтобы нам не мешал в разработке накопленный сервером кэш сайта.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Приступаем к работе на локальной машине&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;

&lt;h2&gt;С локальной машины на сервер&lt;/h2&gt;
&lt;p&gt;Разработка закончена и пора выкладывать новую версию сайта на сервер. Теперь важно определиться с тем, что именно вы будете заливать на сервер. Если изменения коснулись только каких-то отдельных файлов плагинов, стилей, шаблона, то вся операция сводится к закачиванию по FTP изменившихся файлов на сервер с заменой (при необходимости) старых версий файлов. Это самый простой случай. Далее я опишу алгоритм действий в самом сложном случае - когда при работе на локальной машине был произведён апгрейд движка до более свежей версии и со времени последнего создания локальной копии серверной версии сайта менеджеры сайта успели опубликовать несколько постов, закачать несколько фотографий в папку '/uploads/' и изменить значения некоторых настроек шаблона сайта. А вы: добавили несколько важных опций в настройки шаблона, создали виджеты и пару ушек, в которых используются php-код. Итак, алгоритм действий такой:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Переводим работающий на сервере сайт в режим «На обслуживании»&lt;/span&gt;. Проще всего это сделать с помощью плагина &lt;a href="http://forum.max-3000.com/viewtopic.php?f=10&amp;amp;t=1091" rel="nofollow"&gt;Maintenance&lt;/a&gt;. В нём ещё нет (сейчас версия плагина 1.1) возможности ограничения работы с админкой пользователям группы users пока сайт на обслуживании и поэтому нужно предупредить редакторов сайта, что в данный момент с сайтом работать нельзя. Иначе могут возникнуть лишние сложности с обновлением или потеряются данные клиента (если обновляете клиентский сайт).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Переносим сделанные контент-менеджерами и/или комментаторами изменения с сервера на локальную машину&lt;/span&gt;. Если изменений не было и вы в этом уверены, то этот этап можно пропустить. Иначе делаем повторный бэкап базы данных сервера с помощью Dumper ('http://имя_вашего_сайта/dumper/dumper.php'). Скачиваем с сервера получившийся файл ('ftp://имя_вашего_сайта/dumper/backup/имя_сайта_db_текущая-дата_текущее-время.sql.gz') и размещаем его в локальной папке 'S:\home\локальное_имя_сайта\www\dumper\backup\'. Делаем бэкап базы данных локальной версии сайта ('http://локальное_имя_сайта/dumper/dumper.php').&amp;nbsp; &lt;/p&gt;

&lt;blockquote&gt;&lt;b&gt;ВАЖНО!&lt;/b&gt; Если при работе на локальной машине вы задавали какие-то важные и сложные (например, php/html/css-код в настройках ушек/виджетов/плагинов или многострочные опции главного меню сайта) настройки, то перед следующим действием рекомендую открыть текстовый редактор и скопировать в него эти самые&amp;nbsp; куски кода из настроек. Это нужно для того, чтобы быстрее и легче было восстановить значения.&lt;br&gt;&lt;/blockquote&gt;

&lt;p&gt;Теперь с помощью Dumper восстанавливаем в базе данных на локальной машине данные, которые перед этим скачали с сервера. Делаем это там же в 'http://локальное_имя_сайта/dumper/dumper.php' с файлом 'http://локальное_имя_сайта/dumper/backup/имя_сайта_db_текущая-дата_текущее-время.sql.gz' (точнее Dumper должен вам предложить на выбор несколько файлов 'имя_сайта_db_текущая-дата_текущее-время.sql.gz', среди которых вам нужно будет выбрать самый свежий по дате-времени).&lt;/p&gt;
&lt;p&gt;Когда с базой данных разобрались, пора переходить к файлам серверной папки '/uploads/'. Переименовываем локальную папку 'S:\home\локальное_имя_сайта\www\uploads\' в 'S:\home\локальное_имя_сайта\www\uploads-old\'. По FTP скачиваем полностью содержимое папки сервера 'ftp://имя_вашего_сайта/uploads/' в локальную папку 'S:\home\локальное_имя_сайта\www\uploads\'. Теперь папку 'S:\home\локальное_имя_сайта\www\uploads-old\' можно удалить или переместить в папку с архивами сайта (например, в 'S:\home\локальное_имя_сайта\backups\текущая-дата\uploads-old\').&lt;/p&gt;
&lt;p&gt;В заключении этой фазы нужно зайти в админ-панель локальной версии сайта ('http://локальное_имя_сайта/admin/') и пройтись по страницам настроек шаблона, виджетов, ушек и т.п. с целью внесения в базу данных настроек, которые не содержались в предыдущей версии сайта. При необходимости, нужно пользоваться скопированными в текстовый редактор кусками кода (о них говорилось в сноске "ВАЖНО"). После завершения этого этапа можно считать, что на вашей локальной машине находится самая последняя, самая полная, самая рабочая версия сайта. Откройте в браузере 'http://локальное_имя_сайта/' и убедитесь («гуляя» по сайту), что все доработки и нововведения отображаются и работают нормально.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Делаем резервную копию локальной базы данных с помощью Dumper&lt;/span&gt;. Для этого открываем 'http://локальное_имя_сайта/dumper/dumper.php'. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Настраиваем параметры подключения к базе данных на сервере&lt;/span&gt;. Для этого производим «обратное переименование»:&lt;ul&gt;&lt;li&gt;переименовываем 'S:\home\локальное_имя_сайта\www\application\config\database.php' в 'S:\home\локальное_имя_сайта\www\application\config\database.php-local'&lt;/li&gt;&lt;li&gt;переименовываем 'S:\home\локальное_имя_сайта\www\application\config\database.php-serv' в 'S:\home\локальное_имя_сайта\www\application\config\database.php'&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Копируем файлы сайта на сервер&lt;/span&gt;. Пользуясь FTP-клиентом копируем содержимое папки 'S:\home\локальное_имя_сайта\www\' на сервер в папку 'ftp://имя_вашего_сайта/'. При необходимости подтверждаем замену файлов. Если вы опасаетесь что-либо нарушить и хотели бы иметь возможность «откатить» обновление сайта к предыдущей версии, то можно сперва содержимое папки 'ftp://имя_вашего_сайта/' переместить в любую удобную для вас папку, например, можно перенести в папку 'ftp://имя_вашего_сайта/old/', предварительно создав её (и не перемещая её «саму в себя»). Однако нужно помнить, что сразу после перемещения всех файлов в другую папку перестанет работать сообщение «Сайт на обслуживании» (которое выдаёт плагин Maintenance). На малопосещаемых сайтах это не критично, а на выскопосещаемых ресурсах лучше подобрать утреннее время, когда на сайт приходит минимум посетителей или же совсем отказаться от этого варианта обновления.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Проверяем/устанавливаем права на файлы и папки&lt;/span&gt;. После копирования файлов на сервер нужно проверить и при необходимости установить права доступа на некоторые файлы и папки:&lt;ul&gt;&lt;li&gt;папке 'ftp://имя_вашего_сайта/application/cache/' и всем её подпапкам права CHMOD 777 (разрешение на запись);&lt;/li&gt;&lt;li&gt;файлу 'ftp://имя_вашего_сайта/sitemap.xml' права CHMOD 666 (разрешение на запись);&lt;/li&gt;&lt;li&gt;папке 'ftp://имя_вашего_сайта/uploads/' и подпапкам '_mso_float', '_mso_i' и 'mini' права CHMOD 777 (разрешение на запись);&lt;/li&gt;&lt;li&gt;папке 'ftp://имя_вашего_сайта/dumper/backup/' права CHMOD 777 (разрешение на запись) или же папке 'ftp://имя_вашего_сайта/sxd/backup/' права CHMOD 777 и файлам 'ftp://имя_вашего_сайта/sxd/cfg.php' и 'ftp://имя_вашего_сайта/sxd/ses.php' CHMOD 666 (в случае, если Dumper&lt;/p&gt;
&lt;p&gt; 2.0.9) &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Контролируем файл '.htaccess'&lt;/span&gt;. Если вы делали как указано выше, то контроль сводится к «рокировке»:&lt;ul&gt;&lt;li&gt;переименовываем 'ftp://имя_вашего_сайта/.htaccess' в 'ftp://имя_вашего_сайта/.htaccess-local'&lt;/li&gt;&lt;li&gt;переименовываем 'ftp://имя_вашего_сайта/.htaccess-serv' в 'ftp://имя_вашего_сайта/.htaccess'&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Обновляем серверную базу данных из локального бэкапа с помощью Dumper&lt;/span&gt;. При использовании Dumper 1.0.8 нужно обратиться по адресу 'http://имя_вашего_сайта/dumper/dumper.php'. При использовании Dumper 2.0.9 обращение идёт по адресу 'http://имя_вашего_сайта/sxd/'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Сбрасываем кэш системы&lt;/span&gt;. Заходим в админку сайта 'http://имя_вашего_сайта/admin/' и нажимаем кнопку «Сбросить кэш системы».&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Проверяем состояние плагина Maintenance&lt;/span&gt;. Если плагин включен, то переводим его в нерабочее состояние.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Проверяем работу сайта&lt;/span&gt; обращаясь в браузере по адресу 'http://имя_вашего_сайта/'. Сайт должен нормально открыться. Если возникает ошибка, то ищем причину в соответствии с выданным описанием или с помощью изучения логов веб-сервера.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Приступаем к работе с сайтом&lt;/span&gt;. И не забудьте уведомить контент-менеджеров о том, что сайт доступен для их работы.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Я понимаю, что инструкция довольно утомительна для простого чтения. Поэтому если кому-то кроме меня она пригодится, то буду искренне рад. Также я заранее благодарю комментаторов за все дельные советы по улучшению памятки.&lt;/p&gt;

&lt;blockquote&gt;В материале не отображен более технологичный способ обновления на оcнове технологий типа &lt;b&gt;SVN&lt;/b&gt;. Сделано это по той причине, что SVN в большинстве конфигураций тратит больше ресурсов, чем приносит пользы. Мои слова не повод для начала холивара, ибо SVN мне нравится и по возможности я его использую, но не вижу смысла навязывать технологию людям, которые очень редко ей пользуются (я имею в виду случаи, когда разрабатывается и обслуживается куча относительно мелких сайтов-блогов). Возможно в будущем появится материал об использовании SVN при обслуживании сайтов на MaxSite CMS.&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие источники" title="Другие источники"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту PhotoMagis.com, который занимается продажей &lt;a href="http://photomagis.com/"&gt;цифровых фотоаппаратов из магазинов в Москве, в Санкт-Петербурге и в Екатеринбурге&lt;/a&gt;. Помимо непосредственной рекламы фотоаппаратов и аксессуаров, на сайте опубликованы ознакомительные статьи на тему выбора фототехники.&lt;/p&gt;
&lt;a href="http://vizr.ru/page/pro-sinhronizaciju-maxsitecms-sajtov-na-lokalnoj-mashine-i-servere#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/eD5Mfunp8j4" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/pro-sinhronizaciju-maxsitecms-sajtov-na-lokalnoj-mashine-i-servere</feedburner:origLink></item>
				<item>
			<title><![CDATA[Насколько успешный вы человек? Маленький тест для самопроверки]]></title>
			<link>http://feedproxy.google.com/~r/vizr_ru/~3/o4hPASOHRks/naskolko-uspeshnyj-vy-chelovek-malenkij-test-dlja-samoproverki</link>
			<guid isPermaLink="false">http://vizr.ru/page/naskolko-uspeshnyj-vy-chelovek-malenkij-test-dlja-samoproverki</guid>
			<pubDate>Sat, 28 Jan 2012 18:30:13 +0600</pubDate>
			<category><![CDATA[Философия]]></category>
			<description>&lt;p&gt;Сталкивались ли вы с ситуацией, когда не можете объяснить что происходит вокруг вас и неясно что делать дальше? А может было всё иначе и, наоборот, вы замечали ситуации, когда вам всё понятно и ясно что делать, но вам противно «всё это» видеть (или даже участвовать в происходящем), что становится грустно, уныло и тоскливо на душе? Думаю, что человеку, который ответил «Да» хотя бы на один из заданных вопросов знакомо чувство «неуспешности». Далее я предлагаю простой тест (один вопрос), который позволяет понять причину возникновения такого некомфортного чувства.&lt;/p&gt;
&lt;p&gt;&lt;img src="/uploads/pictures/success-failure.png" class="border center" title="" alt="" height="220" width="483" align="middle"&gt;&lt;/p&gt;
&lt;a name="cut"&gt;&lt;/a&gt;
&lt;p&gt;Скоро (19 февраля 2012 года) в Россию приезжает Робин Шарма - знаменитый (ага, почему-то когда слышу это слово про неизвестного мне человека, то так и хочется схохмить «в узких кругах» &lt;img src="http://vizr.ru/uploads/vim_smiles/smile.gif" width="20" height="24" alt="smile" class="smile" /&gt; ) эксперт по мотивации, лидерству и развитию личности. По этому случаю в Рунете началась PR-движуха его семинара и книг. Ну и конечно в сети стали появляться фрагменты его трудов. На &lt;a href="http://mlm-goodnews.ru/lichnostnyj-rost-i-razvitie/dvesti-osnovnyx-sekretov-uspeshnoj-i-schastlivoj-zhizni-chast-1.html" rel="nofollow"&gt;один из таких цитатников&lt;/a&gt; я наткнулся и решил тоже процитировать наиболее подходящее высказывание Шарма (так правильно или нужно говорить «Шармы»?) для того, чтобы вам была понятна «теоретическая база» последующего за цитатой теста. Итак, цитата:&lt;/p&gt;
&lt;blockquote&gt;Одним из истинных золотых ключей от двери к счастью и величайшему успеху является то, как вы трактуете, объясняете себе те события, которые разворачиваются перед вами. Самые преуспевающие люди — всегда прекрасно всё объясняют. Люди, достигшие величия, обладают выработанной способностью объяснять негативные или обескураживающие события как положительный вызов, который им бросает судьба и который помогает им расти и подниматься все выше по лестнице успеха. Не существует отрицательного опыта вообще, а только опыт, который способствует вашему дальнейшему развитию, укрепляет характер. Так что можно начинать штурм новых вершин. Не существует поражений, есть уроки.&lt;br&gt;&lt;/blockquote&gt;

&lt;p&gt;В целом, Робин высказался настолько простым языком, что не понять и не согласится с его словами довольно трудно. Однако, мой опыт подсказывает мне, что вся сложность как раз в том, как именно люди себе объясняют услышанное (или увиденное и т.п.). Обычно этот «механизм объяснения» называется мировоззрением. Вот и получается из слов Робина, что чем более «сложные ситуации» с помощью своего мировоззрения человек сможет объяснить себе и при этом не упасть в уныние или агрессию к Миру, тем более успешным будет человек на Земле.&lt;/p&gt;
&lt;p&gt;Думаю, что вам известно, что мысленное представление ситуации само по себе не вызывает реализации мысли в реальном мире (иначе «мир превратился бы в сказку»). Тогда я предлагаю вам провести небольшой эксперимент, в результате которого вы сможете понять насколько близко вы приблизились к успешным людям по вашему ответу на вопрос: «Смогли ли вы извлечь положительный опыт из ситуации и тем более развить свой характер или же позитивных объяснений найти не удалось?» Итак, предлагаю вам ситуацию:&lt;/p&gt;
&lt;blockquote&gt;2000 лет у вас большой семейный бизнес, который имеет представительства во всех более-менее крупных населённых пунктах Земли. Ваша семья плотно занимает первые 1000 строк рейтинга богачей Forbs. Ваши родственники руководят всеми крупными странами на планете. Все люди Земли так или иначе зависят от вас и надеются на вас. И вот перед вами встаёт вопрос: а почему я до сих пор клюю на интригующе-привлекательные заголовки в каких-то непонятных блогах?&amp;nbsp; Почему я сижу перед экраном монитора и читаю сайт неизвестного мне ПРОФЕССОРА?&lt;br&gt;&lt;/blockquote&gt;

&lt;p&gt;Надеюсь вы поняли мою иронию. От всего сердца желаю вам успехов на вашем пути к первым строчкам Forbs &lt;img src="http://vizr.ru/uploads/vim_smiles/smile.gif" width="20" height="24" alt="smile" class="smile" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;p class="spons_month" alt="Другие источники" title="Другие источники"&gt;Постовой в рамках проходящей акции по обмену ссылками сегодня принадлежит сайту фирмы, которая занимается &lt;a href="http://autoscrub.ru/"&gt;бесконтактной мойкой автомобилей в Москве и Санкт-Петербурге&lt;/a&gt;. Помимо непосредственной рекламы моечных услуг, на сайте опубликована занимательная статья про дедовский вариант переключения передач МКПП с перегазовкой.&lt;/p&gt;
&lt;p&gt;&lt;p class="photo_copy"&gt;Photo by &lt;a rel="nofollow" href="http://www.flickr.com/photos/zarakikenpachi/2315747097/"&gt;zaraki.kenpachi&lt;/a&gt;&lt;/p&gt;
&lt;a href="http://vizr.ru/page/naskolko-uspeshnyj-vy-chelovek-malenkij-test-dlja-samoproverki#comments"&gt; Обсудить&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vizr_ru/~4/o4hPASOHRks" height="1" width="1"/&gt;</description>
		<feedburner:origLink>http://vizr.ru/page/naskolko-uspeshnyj-vy-chelovek-malenkij-test-dlja-samoproverki</feedburner:origLink></item>
			</channel>
</rss>

