<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;AkQMR387fip7ImA9WhRaF04.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223</id><updated>2012-02-20T19:46:26.106+08:00</updated><category term="ruby" /><category term="firefox" /><category term="консоль" /><category term="PR" /><category term="мысль вслух" /><category term="правим шаблоны blogspot" /><category term="javascript" /><category term="утилиты онлайн" /><category term="notepad++" /><category term="советы по настройке" /><category term="alsa" /><category term="перевод" /><category term="это интересно" /><category term="Blogger.com" /><category term="блогеру на заметку" /><category term="справочная информация" /><category term="поле чудес; страна дураков" /><title>iZhurnal</title><subtitle type="html">О блогинге, программировании и всём остальном.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/izhurnal" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="izhurnal" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ck4GQHg_fip7ImA9Wx9SEEw.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-3974393738432950739</id><published>2010-11-20T23:39:00.004+07:00</published><updated>2010-11-29T13:08:41.646+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-29T13:08:41.646+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><title>Скрипт для отображения списка похожих статей — обновленная версия</title><content type="html">&lt;p&gt;Новая версия скрипта для отслеживания похожих сообщений блога. Основные изменения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Основная часть скрипта вынесена во внешний файл. Теперь не нужно помещать в шаблон больше двух страниц (10 килобайт) текста скрипта.&lt;/li&gt;
&lt;li&gt;Добавлен плоский режим без разделения выдачи по ярлыкам.&lt;/li&gt;
&lt;li&gt;Добавлена возможность сортировать ярлыки по вручную задаваемому приоритету.&lt;/li&gt;
&lt;li&gt;Реализована возможность игнорировать ярлыки низкого приоритета, если сообщению назначены ярлыки высокого приоритета.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Принцип работы&lt;/h4&gt;

&lt;p&gt;Скрипт имеет 2 режима работы: с группировкой ссылок на посты по ярлыкам и плоский (общим списком). Принцип работы скрипта в режиме группировки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Берётся список ярлыков текущего поста, из него отбрасываются ярлыки, занесенные в настройках в список игнорируемых.&lt;/li&gt;
&lt;li&gt;Запрашивается с блога информация о постах, соответствующих оставшимся ярлыкам. (Параметр relposts_queryPostsPerLabel указывает, по сколько постов запрашивать для каждого ярлыка).&lt;/li&gt;
&lt;li&gt;Полученные посты группируются по ярлыкам с учётом настроек переименования ярлыков.&lt;/li&gt;
&lt;li&gt;В каждой группе удаляются лишние посты, если их количество превышает указанное в параметре relposts_showPostsPerLabel&lt;/li&gt;
&lt;li&gt;Каждой группе постов назначается приоритет, заданный в настройках.&lt;/li&gt;
&lt;li&gt;Группы ссылок на посты показываются на странице. Группы отображаются в порядке их приоритета, заданного в настройках. (Если у двух групп приоритет одинаков, первым показывается группа, идущая раньше по алфавиту.)&lt;/li&gt;
&lt;li&gt;При показе групп проверяются параметры relposts_showLabels и relposts_prioDelta, и при выполнении соответствующих условий, вывод прекращается. (Подробнее ниже, в описании настроек.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В плоском режиме скрипт работает иначе:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Берётся список ярлыков текущего поста, из него отбрасываются ярлыки, занесенные в настройках в список игнорируемых.&lt;/li&gt;
&lt;li&gt;Запрашивается с блога информация о постах, соответствующих оставшимся ярлыкам. (Параметр relposts_queryPostsPerLabel указывает, по сколько постов запрашивать для каждого ярлыка).&lt;/li&gt;
&lt;li&gt;Каждому посту назначается приоритет, равный сумме приоритетов ярлыков, по которым он пересекается с текущим постом. (Т.е. если у текущего поста ярлыки А, Б и В, и некий пост имеет ярлыки А, В и Г, то этот пост получит приритет, равный сумме приоритетов для ярлыков А и В.)&lt;/li&gt;
&lt;li&gt;Посты сортируются по приоритету.&lt;/li&gt;
&lt;li&gt;На странице отображаются ссылки на посты. Количество задаётся параметром relposts_showPostsPlainMode.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Настройка и установка&lt;/h4&gt;

&lt;p&gt;Аналогично &lt;a href='http://izhurnal.blogspot.com/2010/10/blog-post_26.html'&gt;изначальной версии скрипта&lt;/a&gt;, находим в шаблоне место, куда будем вставлять код. Обычно оно после строки &lt;code&gt;&amp;lt;data:post.body/&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Пишем туда:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;!--[relposts]--&amp;gt;
&amp;lt;b:if cond='data:blog.pageType == &amp;amp;quot;item&amp;amp;quot;'&amp;gt;
&amp;lt;b:if cond='data:post.labels'&amp;gt;
&amp;lt;div class='relposts'&amp;gt;

 &amp;lt;div id='relpostsdataheader'&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;div id='relpostsdatalisting'&amp;gt;&amp;lt;/div&amp;gt;

 &amp;lt;script type='text/javascript'&amp;gt;

 // Сюда будем вписывать настройки

 &amp;lt;/script&amp;gt;

 &amp;lt;script type='text/javascript'&amp;gt;
 relposts_sourceLabels = []
 &amp;lt;b:loop values='data:posts' var='post'&amp;gt;
  &amp;lt;b:loop values='data:post.labels' var='label'&amp;gt;
   relposts_sourceLabels.push(&amp;amp;quot;&amp;lt;data:label.name/&amp;gt;&amp;amp;quot;);
  &amp;lt;/b:loop&amp;gt;
 &amp;lt;/b:loop&amp;gt;
 &amp;lt;/script&amp;gt;

 &amp;lt;script type='text/javascript' src='http://izhurnalscripts.googlecode.com/svn/trunk/relposts.js'&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;!--[/relposts]--&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Внутри тега &lt;code&gt;script&lt;/code&gt;, где написано «Сюда будем вписывать настройки», следует поместить настройки скрипта. Впрочем и без настроек по умолчанию всё работает — можете сохранить шаблон и проверить. :)&lt;/p&gt;

&lt;p&gt;Настройки (общие для обоих режимов):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;relposts_headerPlain&lt;/code&gt; — использовать плоский или обычный режим. Значения: &lt;i&gt;true&lt;/i&gt;, &lt;i&gt;false&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_excludeLabels&lt;/code&gt; — список ярлыков, которые следует игнорировать. Значение: массив строк.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_queryPostsPerLabel&lt;/code&gt; — Количество постов, запрашиваемых для каждого ярлыка с блога. Значение: число.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_renameLabels&lt;/code&gt; — таблица для переименования ярлыков. Если при переименовании названия 2-х или более ярлыко совпадают, посты этих ярлыков объединяются в выдаче. Значение: ассоциативный массив.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_labelPrio&lt;/code&gt; — таблица приоритетов ярлыков. Обратите внимание: имена ярлыков даются в таблице в уже переименованном виде. Ярлыки, для которых приоритет не указан в таблице, имеют приоритет 1. Значение: ассоциативный массив.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Настройки, использущиеся в режиме группировки по ярлыкам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;relposts_excludeDups&lt;/code&gt; — исключать ли повторяющиеся ссылки в разных ярлыках. Значения: &lt;i&gt;true&lt;/i&gt;, &lt;i&gt;false&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_showPostsPerLabel&lt;/code&gt; — сколько максимально постов отображать для каждого ярлыка. Если постов с блога запрошено больше, чем число &lt;code&gt;relposts_showPostsPerLabel&lt;/code&gt;, посты выбираются случайным образом. Значение: число.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_showLabels&lt;/code&gt; — сколько максимально ярлыков отображать. Ярлыки отображаются, начиная с более высокого приоритета, и до тех пор, пока не будет выведено &lt;code&gt;relposts_showLabels&lt;/code&gt; ярлыков. Значение: число.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_prioDelta&lt;/code&gt; — ограничение на разницу приоритетов между ярлыками. Берётся приоритет максимального ярлыка и ярлыки выводятся до тех пор, пока разница между приоритетом следующего ярлыка и приоритетом первого не превысит значение &lt;code&gt;relposts_prioDelta&lt;/code&gt;. Значение: число.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_header0&lt;/code&gt; — Текст, который будет показан, если похожих постов не найдено. Значение: строка.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_header1&lt;/code&gt; — Текст, который будет показан, если найдёны похожие посты только по одному ярлыку. Если в строке есть фрагмент &lt;code&gt;__LABEL__&lt;/code&gt;, он заменяется на название ярлыка. Значение: строка.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_headerN&lt;/code&gt; — Текст, который будет показан, если похожие посты найдены более чем по одному ярлыку. Значение: строка.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Настройки, использущиеся в плоском режиме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;relposts_showPostsPlainMode&lt;/code&gt; — сколько максимально постов показывать. Посты показываются, начиная с самых приоритетных. Значение: строка.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;relposts_headerPlain&lt;/code&gt; — текст заголовка. Значение: строка.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Значения опций по умолчанию:&lt;/p&gt;

&lt;style type="text/css"&gt;
.table1 {
 border: 4px double black;
 border-collapse: collapse;
}
.table1 td { 
 padding: 5px;
 border: 1px solid black;
}
&lt;/style&gt;

&lt;table class='table1'&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_headerN&lt;/code&gt;&lt;/td&gt;&lt;td&gt;"Похожие статьи:"&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_header1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;"Еще статьи из категории «__LABEL__»:"&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_header0&lt;/code&gt;&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_headerPlain&lt;/code&gt;&lt;/td&gt;&lt;td&gt;"Похожие статьи:"&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_plainMode&lt;/code&gt;&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_showPostsPlainMode&lt;/code&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_showPostsPerLabel&lt;/code&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_queryPostsPerLabel&lt;/code&gt;&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_excludeDups&lt;/code&gt;&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_showLabels&lt;/code&gt;&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_excludeLabels&lt;/code&gt;&lt;/td&gt;&lt;td&gt;[]&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_renameLabels&lt;/code&gt;&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_labelPrio&lt;/code&gt;&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;relposts_prioDelta&lt;/code&gt;&lt;/td&gt;&lt;td&gt;10000&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;p&gt;Приоритеты ярлыков реализованы не только для указания порядка, в котором будут выводиться ярлыки, но и для того, чтобы иметь возможность прерывать вывод после определённых ярлыков.&lt;/p&gt;

&lt;p&gt;Пример настройки. Допустим, у нас есть ярлыки, имеющие максимальный приоритет, и если сообщению назначен один из этих ярлыков, ярлыки более низкого приоритета следует игнорировать. Для определённости возьмём в качестве образца ярлыки из этого блога: javascript и перевод. Выставляем им приоритет, а значение relposts_prioDelta ставим равным 0. Тогда в случае, когда у поста есть какой-либо из этих ярлыков, остальные ярлыки будут игнорироваться:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;script type='text/javascript'&amp;gt;
 var relposts_prioDelta = 0;
 var relposts_labelPrio = {
  'javascript' : 2,
  'перевод' : 2
 };
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-3974393738432950739?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/3974393738432950739/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_20.html#comment-form" title="Комментарии: 29" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3974393738432950739?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3974393738432950739?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_20.html" title="Скрипт для отображения списка похожих статей — обновленная версия" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>29</thr:total></entry><entry gd:etag="W/&quot;CE8GRH06fCp7ImA9Wx9TFUo.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-5995054418514760281</id><published>2010-11-17T00:42:00.004+07:00</published><updated>2010-11-24T11:27:05.314+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-24T11:27:05.314+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="поле чудес; страна дураков" /><title>«Сеошники, они такие... сеошники...» — и действительно. Совершенно упоротые сеошники.</title><content type="html">&lt;p&gt;Как я &lt;a href='http://commentarius.blogspot.com/2010/11/blog-post_8636.html'&gt;уже упоминал&lt;/a&gt;, отдельные сеошники дожили до того, что в упор не могут отличить сайт для людей от наколенных поделок. Но поскольку разговор получил продолжение, зацитирую целиком:&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;blockquote&gt;
&lt;div style='color:blue'&gt;
&lt;p&gt;&amp;laquo;Возьмем, к примеру, комментарий на одном из блогов&amp;raquo; — ну во-первых, я не сеошник. Так что с цитатой меня вы маху дали. 
&lt;/p&gt;&lt;p&gt;Во-вторых, имена, совпадающие с поисковым запросом нужны двум конкретным категориям сайтов: сайтам оффлайновых коммерческих организаций и сайтам сателлитчиков, дорвейщиков и далее в том же духе. Разумеется, хомячки набежали регить домены, и нарегали их там уже столько, что умным людям, организовавшим этот бизнес, теперь надолго хватит на хлеб и икру.
&lt;/p&gt;&lt;p&gt;Для всего остального интернета — т.е. для сайтов предоставляющих пользователю информацию и информационные услуги — доменное имя вообще в принципе не важно. Потому что там роль играет не столько СЕО, сколько социальные методы продвижения.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:red'&gt;
&lt;p&gt;Clr, ключевая фраза в вашем коментарии&amp;nbsp;&amp;mdash; &amp;laquo;вы не сеошник&amp;raquo;, потому для вас такие слова как &amp;laquo;поисковый трафик&amp;raquo; ничего и не значат )) а вот людям, создающим проекты под этот самый трафик&amp;nbsp;&amp;mdash; совсем даже не наплевать. Лучше не обсуждать вопросы, в которых вы не разбираетесь  &lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:blue'&gt;
&lt;p&gt;Моё скромное мнение таково, что лучшее, что могут сделать люди, создающие «проекты под трафик», вместо того чтобы создавать сервисы для людей — добровольно выпилить себя из интернетов и пойти въ*бывать на завод.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:red'&gt;
&lt;p&gt;Ага, то есть проекты типа BigPicture, smi2, news2 и даже Яндекс созданы людьми, которые пошли неправильным путем и место им за станком на заводе?.. Clr, я вежливый человек, давайте закроем тему, не хочу на личности переходить  &lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:blue'&gt;
&lt;p&gt;Яндекс, news2 и так далее не предоставляют информационных услуг? Интересно узнать, а что же они делают тогда, продают виагру, что ли? Ну это же смешно, вы еще скажите, что домен news2 строго соответствует поисковому запросу, по которому его находят.
&lt;/p&gt;&lt;p&gt;Вы сами своим комментарием подтвержаете мои аргументы.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:red'&gt;
&lt;p&gt;Ладно, а как быть с киносайтами? (фильмы онлайн) Они сделаны чисто под трафик&amp;nbsp;&amp;mdash; они тоже никому не нужны?&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div style='color:blue'&gt;
&lt;p&gt;Ну хватит отжигать-то так. На голубом глазу называть серьёзные СДЛ «сайтами чисто под трафик» — это надо уметь.
&lt;/p&gt;
&lt;p&gt;«Сайт чисто под трафик» — это, натурально, дор или саттелит к основному проекту. Потому что _единственная_ цель его существования — собирать и перенаправлять поисковый трафик. (И разница между дором и саттелитом тут чисто техническая.)
&lt;/p&gt;
&lt;p&gt;Вы отличаете проект, на который посетители приходят, конкретно, за информацией и услугами (И НАХОДЯТ ИХ ТАМ), от проекта, на котором висит 3 партнерки и полторы рерайченных статьи? Формально, и тот, и другой — «сайты под трафик». Но первый — настоящий сайт, а второй — говно на палочке. Первый после начального пинка раскрутки сам обрастёт естественными ссылками, и на такие мелочи, как имя домена, ему будет откровенно плевать. А второй будет всеми мыслимыми способами цепляться за топ, потому что ни естественных ссылок, ни непоискового трафика ему не светит никогда.
&lt;/p&gt;&lt;p&gt;Собственно, всё это уже не имеет никакого отношения к изначальной теме разговора, так что давайте на этом и закончим.&lt;/p&gt;        
&lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ситуация, можно сказать, анекдотическая. Я (на секундочку: программист!) второй день пытаюсь объяснить самому настоящему сеошнику, что «сайт под трафик» — не равно «сайт для людей». Пока что глухо, просветов понимания не видно.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_9LzkYxYJB94/TOLjFIPZK8I/AAAAAAAAANI/pxBvGk89vb0/s1600/webspider.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="363" src="http://1.bp.blogspot.com/_9LzkYxYJB94/TOLjFIPZK8I/AAAAAAAAANI/pxBvGk89vb0/s400/webspider.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-5995054418514760281?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/5995054418514760281/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_17.html#comment-form" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5995054418514760281?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5995054418514760281?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_17.html" title="«Сеошники, они такие... сеошники...» — и действительно. Совершенно упоротые сеошники." /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_9LzkYxYJB94/TOLjFIPZK8I/AAAAAAAAANI/pxBvGk89vb0/s72-c/webspider.jpg" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CE4FRXw9eSp7ImA9Wx9TFUo.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-3955731592573420013</id><published>2010-11-16T19:47:00.003+07:00</published><updated>2010-11-24T11:28:34.261+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-24T11:28:34.261+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><category scheme="http://www.blogger.com/atom/ns#" term="правим шаблоны blogspot" /><title>Как сделать, чтобы на разных страницах отдельные элементы блога были разными</title><content type="html">Описываю, как сделать, чтобы определённая часть блога имела разный вид на разных страницах/постах/разделах.&lt;br /&gt;
Пост написан для &lt;a href='http://izhurnal.blogspot.com/2010/11/blog-post_11.html?showComment=1289903136168_AIe9_BGA9geKcdYio2ELVaEkEku6OsCGtKSg6oL8o3WzDMeh44JnqUl615d8LCcNAk72VYXNOagiyP9neiRs3ZPysYVvjC2I0givSHDIJB_ejUpFVWis5Gr1oKQ-fzdWzTMmBpfEN55p9nsxpd5X5X2YKqEQcXDvFwPDsGsPgrwITIw8KLlzEcePVs6A8syNc06xrbBHfNZMMdj3EyFZV0l72TjpQgFtRknUKk-6VaOkDyrX7JKgs5sTyvRjfXrINBARTEHhr9x3S9aTncPdTYfnyesdYYSqljznUJ3Adbo5uR688dKypjB6GbRRuTDBirOZs2UDDfA132LBzzrTbqwI7Qb7xnq0W-TFH-VyZ6bqCNYsTVbBamLPkhB90t-mcLrPmBB86WNu-ey3L2jfV-iN8Y93kA-aZjFQfQmLS__gr3O4nluWjyryfkqeds7CcY_2FUjUpxkarLhOZutK946PFPK-5Cz4fBOFVrwYcoMv7v2kwhVEXSxTvayQiybhSa1GJ0uQmQYVEQMYxlOOQcLUHV2pWP7m3QIkNp2ajhEjdf1viCRc8KGQ2GNsCyTgijFeXXTaDJQZWOoIv_aByKToCHI2Zjd2Ii5zpqzOhEIu-EgFcjLx6ETDkODes4KdPMl-bWdcohAs7yk-ijWV7jg5O7-1Ynpm4nf6ePAddV_9K8MWuyA3z4xlR-WS6dDcpT_GyjXneeLOt9dFNNwVk1rS1o0yOSu4vyecIsRBDokgTK3bY1OGefVqCcwYjcYUwInwTI6WOZuqyvhSRfM8YOxvGdeARlV_anMJ4Y4C4HisgPh9K9wqO70#comment-5997483846380389153'&gt;по просьбе FUSESOUND&lt;/a&gt;. Всяким программистам и прочим гикам типа меня достаточно &lt;a href='http://izhurnal.blogspot.com/2010/09/widget-tags-blogspot.html'&gt;краткого справочника&lt;/a&gt;, а нормальным людям более подробный мануал лишним не будет.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;
&lt;br /&gt;
1. Находим в шаблоне место, куда будем вписывать код. В моём примере я буду издеваться над подзаголовоком в шапке блога, у меня в шаблоне он изначально выглядел вот так:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;  &amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;&amp;lt;data:description/&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;Чуток переформатируем его для удобства дальнейшего восприятия:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;  &amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;
      &amp;lt;data:description/&amp;gt;
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;2. Итак, тег &lt;code&gt;&amp;lt;data:description/&amp;gt;&lt;/code&gt; подставляет в шаблон подзаголовок из настроек блога, а нам надо, чтобы на некоторых страницах вместо него выводился нужный нам текст. В этом нам поможет &lt;a href='http://izhurnal.blogspot.com/2010/09/widget-tags-blogspot.html'&gt;условная конструкция&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;b:if cond='условие'&amp;gt;
  тут текст, который будет показан, если условие выполняется
&amp;lt;b:else/&amp;gt;
  тут текст, который будет показан, если условие НЕ выполняется
&amp;lt;/b:if&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;В качестве условия используем проверку на равенство некоторому URL: &lt;code&gt;'data:blog.url == &amp;amp;quot;адрес&amp;amp;quot;'&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Собираем всё вместе: вместо &lt;code&gt;&amp;lt;data:description/&amp;gt;&lt;/code&gt; ставим условную конструкцию, а прежний &amp;lt;data:description/&amp;gt; загоняем под &lt;code&gt;&amp;lt;b:else/&amp;gt;&lt;/code&gt;:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;  &amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес&amp;amp;quot;'&amp;gt;
         какой-то текст
      &amp;lt;b:else/&amp;gt;
        &amp;lt;data:description/&amp;gt;
      &amp;lt;/b:if&amp;gt;
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;Вместо 'адрес' подставить конкретный URL нужной страницы/поста.&lt;br /&gt;
Теперь на странице с указанным адресом в подзаголовке будет «какой-то текст», а на остальных — подзаголовок, взятый из настроек блога.&lt;br /&gt;
&lt;br /&gt;
3. Чтобы добавить текст подзаголовка для еще одной страницы, повторяем предыдущий шаг, добавляя еще одно условие:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;  &amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес&amp;amp;quot;'&amp;gt;
         какой-то текст
      &amp;lt;b:else/&amp;gt;
        &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;второй адрес&amp;amp;quot;'&amp;gt;
           еще какой-то текст
        &amp;lt;b:else/&amp;gt;
          &amp;lt;data:description/&amp;gt;
        &amp;lt;/b:if&amp;gt;
      &amp;lt;/b:if&amp;gt;
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;Теперь у нас предусмотрены варианты текста для двух адресов.&lt;br /&gt;
&lt;br /&gt;
Повторяем так нужное число раз, добавляя описания для всех нужных адресов.&lt;br /&gt;
&lt;br /&gt;
Однако, тут есть некоторая проблема. Как видите, на каждом шаге конструкция лесенкой растёт «вглубь». Я не знаю, есть ли у движка blogspot ограничение на количество вложенных условных конструкций, но вполне возможно, что добавив так определённое число условий, вы столкнётесь с тем, что blogspot откажется работать с вашим шаблоном. Впрочем, думаю, гораздо раньше вас просто утомит писать эту многоступенчатую «лесенку».&lt;br /&gt;
В нормальных языках программирования можно легко создавать многозвенные условные конструкции любой длины, но в blogspot авторы решили использовать такой вот странный синтаксис шаблонов.&lt;br /&gt;
Поэтому, если вам нужно создать варианты для 5-6 страниц, это имеет смысл, а если больше — это превращается в крайне утомительное занятие.&lt;br /&gt;
&lt;br /&gt;
Еще несколько рекомендаций:&lt;br /&gt;
&lt;br /&gt;
1. Имейте ввиду, что else-часть писать не обязательно, если вам она не нужна, например:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес&amp;amp;quot;'&amp;gt;
 текст
&amp;lt;/b:if&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
2. Этим способом можно создать &lt;b&gt;разные варианты метатега description для разных страниц&lt;/b&gt;!. Хотел написать об этом отдельную заметку, но раз уж зашла речь об использовании условий в шаблоне, упоминаю об этом тут. ;)&lt;br /&gt;
&lt;br /&gt;
3. Бывает, нужно добавить в блог виджет/агджет, но сделать так, чтобы он отображался только на отдельных страницах. Находим в шаблоне данный виджет, находим внутри него фрагмент, начинающийся с &lt;code&gt;&amp;lt;b:includable id='main'&amp;gt;&lt;/code&gt; и выносим его содержимое в условие. &lt;br /&gt;
Было:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;b:widget id='HTML6' locked='false' title='' type='HTML'&amp;gt;
&amp;lt;b:includable id='main'&amp;gt;
  &amp;lt;!-тут какие-то внутренности виджета--&amp;gt;
&amp;lt;/b:includable&amp;gt;
&amp;lt;/b:widget&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;Стало:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;b:widget id='HTML6' locked='false' title='' type='HTML'&amp;gt;
&amp;lt;b:includable id='main'&amp;gt;
&amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес&amp;amp;quot;'&amp;gt;
  &amp;lt;!-тут какие-то внутренности виджета--&amp;gt;
&amp;lt;/b:if&amp;gt;
&amp;lt;/b:includable&amp;gt;
&amp;lt;/b:widget&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
4. Другие типы проверок. &lt;a href='http://izhurnal.blogspot.com/2010/09/blogspot_04.html'&gt;Вот тут&lt;/a&gt; можно посмотреть имена и назначение переменных, содержимое которых можно проверять в условии. В качестве образца достаточно сложного условия можно использовать код, &lt;a href='http://izhurnal.blogspot.com/2010/09/blogspot_08.html'&gt;согласующий слово «комментарий» с числительным&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
5. Если у вас есть набор условий, для которого не нужен вариант типа «а для всего остального, не подходящего под условия, сделать так-то» (т.е. самый внутренняя else-часть пустая или отсутствует) и все условия взаимоисключающие (т.е., как раз рассмотренный выше случай: если URL страницы равнен одному значению, то он уже не может быть для этой страницы равен какому-то другому значению), то можно «лесенку» переделать в последовательность одиночных условий:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;  &amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес1&amp;amp;quot;'&amp;gt;
         какой-то текст1
      &amp;lt;/b:if&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес2&amp;amp;quot;'&amp;gt;
         какой-то текст2
      &amp;lt;/b:if&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес3&amp;amp;quot;'&amp;gt;
         какой-то текст3
      &amp;lt;/b:if&amp;gt;
      &amp;lt;b:if cond='data:blog.url == &amp;amp;quot;адрес4&amp;amp;quot;'&amp;gt;
         какой-то текст4
      &amp;lt;/b:if&amp;gt;
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
В этом случае так можно вполне удобно записать множество разных условий, не путаясь у лесенке вложенных if-else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-3955731592573420013?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/3955731592573420013/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_2858.html#comment-form" title="Комментарии: 14" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3955731592573420013?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3955731592573420013?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_2858.html" title="Как сделать, чтобы на разных страницах отдельные элементы блога были разными" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>14</thr:total></entry><entry gd:etag="W/&quot;CEcMR3o5eip7ImA9Wx5aGUw.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-2223974498645760316</id><published>2010-11-16T17:20:00.001+07:00</published><updated>2010-11-16T19:54:46.422+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-16T19:54:46.422+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="блогеру на заметку" /><title>Динамический подзаголовок в шапке сайта</title><content type="html">Спрашивают, как у меня сделан меняющийся подзаголовок в шапке. Отвечаю: просто джаваскриптом выводится случайно выбираемая фраза.&lt;br /&gt;
&lt;br /&gt;
Находим в шаблоне место, где выводится подзаголовок и изменяем. Было:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;&amp;lt;data:description/&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
Стало:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;div class='descriptionwrapper'&amp;gt;
    &amp;lt;p class='description'&amp;gt;&amp;lt;span id='random_subtitle'&amp;gt;&amp;lt;data:description/&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;script type='text/javascript'&amp;gt; 
 random_subtitles = [
  &amp;amp;#39;Журнал обо всём.&amp;amp;#39;,
  &amp;amp;#39;Всё обо всём.&amp;amp;#39;,
  &amp;amp;#39;Что вижу, то пою.&amp;amp;#39;,
  &amp;amp;#39;Рандом не дремлет.&amp;amp;#39;,
  &amp;amp;#39;Странное место.&amp;amp;#39;,
  &amp;amp;#39;Хроники оттуда.&amp;amp;#39;,
  &amp;amp;#39;Вам и не снилось.&amp;amp;#39;,
  &amp;amp;#39;Копипаста оптом.&amp;amp;#39;,
  &amp;amp;#39;Здесь водятся буквы.&amp;amp;#39;,
  &amp;amp;#39;Что-то здесь не так.&amp;amp;#39;,
  &amp;amp;#39;Под веществами.&amp;amp;#39;,
  &amp;amp;#39;Нетрезвые мысли.&amp;amp;#39;];
 document.getElementById(&amp;amp;#39;random_subtitle&amp;amp;#39;).innerHTML =  random_subtitles[Math.floor(Math.random() * random_subtitles.length)]
&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;Фразы, как видно, задаются прямо в коде.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update.&lt;/b&gt; &lt;a href="http://izhurnal.blogspot.com/2010/11/blog-post_2858.html"&gt;Еще на схожую тему&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-2223974498645760316?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/2223974498645760316/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_16.html#comment-form" title="Комментарии: 6" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/2223974498645760316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/2223974498645760316?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_16.html" title="Динамический подзаголовок в шапке сайта" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>6</thr:total></entry><entry gd:etag="W/&quot;DUUHSX8-fyp7ImA9Wx5aF0k.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-6339878681205660434</id><published>2010-11-14T22:04:00.002+07:00</published><updated>2010-11-14T22:07:18.157+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-14T22:07:18.157+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="блогеру на заметку" /><title>Получаем код страницы как она есть (innerHTML), а не просто код принятого браузером файла</title><content type="html">Некоторое время назад задался вопросом: как просмотреть исходный код страницы в том виде, в каком она видна в браузере (со всеми результатами работы скриптов, динамически загруженным содержимым и т.п.).&lt;br /&gt;
&lt;br /&gt;
Браузер стандартными средствами позволяет просмотреть только код полученного с сервера файла, который, в случае интенсивного применения javascript, имеет мало общего с тем, что пользователь на самом деле увидит на странице. Конечно, можно просмотреть дерево узлов в DOM Inspector, но хотелось иметь решение, не зависящее от плагинов.&lt;br /&gt;
&lt;br /&gt;
В общем, решение на самом деле элементарно. Берем вот эту &lt;a href="javascript:(function(){var%20_script=document.createElement('script');_script.type='text/javascript';_script.src='http://izhurnalscripts.googlecode.com/svn/trunk/viewhtml.js';document.documentElement.appendChild(_script);})();"&gt;ссылку&lt;/a&gt; и добавляем её на панель ссылок или в избранное. Теперь, находясь на любой странице, можно тыкнуть эту ссылку и просмотреть содержимое кода в document.body.innerHTML.&lt;br /&gt;
Profit!&lt;br /&gt;
&lt;br /&gt;
Проверялось в Firefox, но и в остальных браузерах должно работать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-6339878681205660434?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/6339878681205660434/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/innerhtml.html#comment-form" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6339878681205660434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6339878681205660434?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/innerhtml.html" title="Получаем код страницы как она есть (innerHTML), а не просто код принятого браузером файла" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;D0ICQXg_eSp7ImA9Wx5aFUk.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-8834827933310156841</id><published>2010-11-12T14:01:00.001+07:00</published><updated>2010-11-12T14:06:00.641+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T14:06:00.641+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>commentarius</title><content type="html">Завёл &lt;a href="http://commentarius.blogspot.com/"&gt;еще один блог&lt;/a&gt; — нечто вроде персонального твиттера без ограничения длины сообщений.&lt;br /&gt;
&lt;br /&gt;
Нормальные поддомены на блогспоте еще не все разобрали, долго и мучительно имя блогу выдумывать не пришлось: adversaria — занято, commentarius — свободно, ок.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-8834827933310156841?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/8834827933310156841/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/commentarius.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/8834827933310156841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/8834827933310156841?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/commentarius.html" title="commentarius" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEIDSHs6fCp7ImA9Wx5aFEo.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-5448966229470648612</id><published>2010-11-11T14:47:00.002+07:00</published><updated>2010-11-11T17:49:39.514+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T17:49:39.514+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><title>Реализация карты или оглавления для блога с разбиением на рубрики/категории</title><content type="html">&lt;h4&gt;Вроде как вступление&lt;/h4&gt;

&lt;p&gt;Вот и обещанное «нечто удивительное» для blogspot-а — &lt;b&gt;полнофункциональный скрипт для создания оглавления или карты сайта&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Практически каждый, кто завёл блог на blogspot, рано или поздно задаётся вопросом, каким образом на этой платформе можно &lt;b&gt;сделать разделение статей по рубрикам и добавить оглавление&lt;/b&gt;. И к сожалению, напрямую Blogger.com такую возможность не поддерживает — всё, что есть в нашем распоряжениии, это лента постов, которым мы можем назначать ярлыки, и возможность фильтровать посты по отдельным ярлыкам.&lt;/p&gt;

&lt;p&gt;В этой ситуации, распространённый способ сделать «категории» — использовать вместо них ярлыки, а в качестве карты сайта использовать длинную-длинную выдачу списка сообщений, в которой оставлены только лишь заголовки, а текст сообщений скрыт при помощи CSS. Все эти «улучшения блога» описаны на множестве сайтов, посвященных «хакам для blogspot» — и преподносятся там как невероятное откровение, хотя им примерно столько же лет, сколько самому blogspot-у. (На самом деле, как я &lt;a href='http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html'&gt;уже упоминал&lt;/a&gt;, 90% этих сайтов почти целиком содержат переводы с английского и копипаст друг друга, и если вы видели один такой сайт, значит вы видели все. Впрочем, это вполне типично для русской блогосферы вообще, по любой тематике. Реально что-то новое для блогспота можно увидеть, от силы, на 4-х англоязычных блогах.)&lt;/p&gt;

&lt;p&gt;Но не всё так печально, как кажется. В нашем распоряжении имеется rss-лента блога и javascript, а значит, приложив каплю терпения, мы можем получить рубрики, оглавления, и вообще что угодно, что можно только получить на снове анализа сообщений из rss. Именно так, без всякой магии, заработал виджет &lt;a href='http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html'&gt;Календарь&lt;/a&gt;, и именно так работает скрипт, которому посвящена данная статья.&lt;/p&gt;

&lt;p&gt;Пример работы скрипта можно посмотреть в виде &lt;a href='http://izhurnal.blogspot.com/p/site-map.html'&gt;оглавления этого блога&lt;/a&gt;. Впрочем, это довольно бледный пример: во первых, у меня практически нет картинок в постах, и оглавление идёт без иллюстраций, а во-вторых, с помощью CSS можно сделать реально круто выглядящее оглавление — но мне лень.&lt;/p&gt;

&lt;h4&gt;Обзор возможностей&lt;/h4&gt;

&lt;p&gt;Фактически, хотя изначальное предназначение данного скрипта — отображать &lt;b&gt;карту сайта&lt;/b&gt;, его потенциальная область применения намного шире. Посмотрим, что он может делать:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Считать с блога сообщения по заданным в настройках ярлыкам и сгруппировать их в категории.&lt;/b&gt; Например, допустим, у вас блог о растениях, и вы используете ярлыки «Комнатные цветы», «Садовые цветы» и «Плодовые культуры». Вы хотите, чтобы всё, что связано с цветами, отображалось в оглавлении в одной категории, а всё, что связано с ягодами/фруктами, в другой. Тогда в настройках вы задаёте, что «Плодовые культуры» — это отдельная категория, а вот «Комнатные цветы» и «Садовые цветы» следует объединить в категорию «Цветы». Также для каждой категории можно задать описание — дополнительный текст, который будет показан после заголовка категории.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Для каждого сообщения отобразить дату, заголовок со ссылкой на сообщение, описание сообщения и картинку.&lt;/b&gt; Что именно из этого нужно показывать, а что нет, можно задать в настройках.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Автоматически сформировать для каждого сообщения описание на основе начала текста сообщения.&lt;/b&gt; В настройках вы можете задать и свои собственные описания для конкретных сообщений.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Найти в посте первую картинку и использовать её в качестве иллюстрации.&lt;/b&gt; Также есть возможность задать картинку и вручную.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Отсортировать сообщения по дате публикации или названию&lt;/b&gt; — в прямом или обратном порядке.&lt;/li&gt;
&lt;/ul&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;p&gt;Вы можете расположить всё оглавление вашего блога на одной странице или разместить скрипт на нескольких страницах и на каждой задать только оглавление конкретного раздела. Можете использовать краткое перечисление постов блога или дополнить их описанием — вручную введённым или автоматическим. Можете разбавить сухость текстового оглавления иллюстрациями к каждому сообщению.&lt;/p&gt;

&lt;p&gt;Если же вы разбираетесь в программировании на javascript, то, благодаря расширяемости скрипта, вы можете дополнить его практически любыми возможностями. Несколько примеров:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Можно в оглавлении показывать размер каждого сообщения.&lt;/li&gt;
&lt;li&gt;Можно отобразить оглавление в две колонки.&lt;/li&gt;
&lt;li&gt;Если у вас фотоблог, можно сделать галерею изображений.&lt;/li&gt;
&lt;li&gt;Если у вас в блоге есть статьи, посвященные каким-нибудь однотипным объектам (например, обзоры фильмов, описания цветов, рецензии и т.п.), то можно автоматически извлечь из таких постов какие-либо ключевые данные (например, для фильмов — год выхода, жанр, имя режиссёра и т.п.) и предоставить всю эту информацию в виде сводной таблицы, с возможностью сортировать её по выбранным посетителем сайта колонкам.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Во всех этих случаях ядро скрипта считывает с блога списки сообщений, а вам необходимо лишь переопределить методы, формирующие из списка готовую страницу, чтобы получить желаемый результат.&lt;/p&gt;

&lt;h4&gt;Установка и настройка&lt;/h4&gt;

&lt;p&gt;Скрипт устанавливается не как виджет и не как «хак» для шаблона блога, а в виде содержимого отдельного поста. Это может быть обычный пост или статическая страница. Таких постов-рубрик вы можете создать сколько угодно с разными настройками.&lt;/p&gt;

&lt;p&gt;1. Итак, &lt;b&gt;создаём новое сообщение блога&lt;/b&gt;, в редакторе постов переходим на вкладку «Изменить HTML» — все правки поста необходимо будет выполнять в этом режиме. Также убедитесь, что в настройках сообщения выбраны пункты «Интерпретировать введенный HTML-код» и «Используйте теги &amp;lt;br /&amp;gt;». (Если вы создали страницу, а не пост, в её настройках пункт «Используйте теги &amp;lt;br /&amp;gt;» подписан как «Пропускать символы новой строки».)&lt;/p&gt;

&lt;p&gt;Вводим туда &lt;s&gt;заклинание&lt;/s&gt; текст:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;script type='text/javascript'&amp;gt;
/* Настройки скрипта */
&amp;lt;/script&amp;gt;

&amp;lt;script type='text/javascript' src='http://izhurnalscripts.googlecode.com/svn/trunk/itoc.js'&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;noscript&amp;gt;
Для отображения содержимого страницы необходима поддержка JavaScript.
&amp;lt;/noscript&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;В первый тег &lt;code&gt;script&lt;/code&gt; мы сейчас будем вписывать настройки скрипта. Второй тег &lt;code&gt;script&lt;/code&gt; подключает непосредственно сам скрипт с заданными настройками. Наконец, текст, введённый в теге &lt;code&gt;noscript&lt;/code&gt; будет показан посетителю, если в его браузере отключена поддержка JavaScript.&lt;/p&gt;

&lt;p&gt;2. &lt;b&gt;Базовая настройка скрипта&lt;/b&gt; включает в себя указание адреса блога и списка рубрик. Примеры настройки здесь и далее будут показаны на примере настройки карты сайта на этом блоге.&lt;/p&gt;

&lt;p&gt;В переменной &lt;code&gt;itoc_siteUrl&lt;/code&gt; указываем адрес блога.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;var itoc_siteUrl = "http://izhurnal.blogspot.com/"&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Адрес блога, с которого будут показаны рубрики, не обязан совпадать с адресом блога, на котором вы размещаете само оглавление — в принципе, можно отображать на одном блоге оглавление другого блога. (Правда не знаю, зачем такое может понадобиться, но вдруг.)&lt;/p&gt;

&lt;p&gt;Далее в переменной &lt;/code&gt;itoc_categories&lt;/code&gt; необходимо указать таблицу категорий. Тут проще показать, чем объяснить словами:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
var itoc_categories = [
 ['Blogger.com'        , ''                   , 'Cкрипты, виджеты, идеи и советы для всех, кто держит блог на платформе Blogger.com'],
 ['блогеру на заметку' , 'Блогеру на заметку' , 'Полезности для блогеров, вне зависимости от используемой платформы.'],
 ['утилиты онлайн'     , 'Утилиты онлайн'     , 'Полезные скрипты, выполняющиеся прямо в браузере.'],
 ['советы по настройке', 'Советы по настройке', 'Рецепты и рекомендации по настройке программ.'],
 ['это интересно'      , 'Это интересно'      , 'Заметки обо всём на свете.'],
 ['мысль вслух'        , 'Мысль вслух'        , 'Случайные мысли на произвольные темы.'],
 ['разное'             , 'Разное'             , 'Сообщения, не вписавшиеся в формат других разделов.'],
 ['PR'                 , 'Разное'             , ''],
 ['поле чудес; страна дураков', 'Разное'      , '']
];
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;В первом столбце указывается ярлык, по которому будет считываться список сообщений.&lt;br/&gt;
Во втором столбце указывается название категории, к которой принадлежат сообщения, имеющие данный ярлык. Если название категории оставлено пустым, оно автоматически устанавливается равным названию ярлыка.&lt;br/&gt;
В третьем столбце (если он не пуст) задаётся описание категории.
&lt;/p&gt;

&lt;p&gt;В примере выше в первой строке указано, что ярлык Blogger.com относится к категории Blogger.com (поскольку имя категории категории не указано, считается равным названию ярлыка), и для этой категории дано описание. В следующих шести строчках задаётся еще 6 категорий с описаниями. Поскольку перечисленные там ярлыки написаны со строчной буквы, а названия категорий хотелось видеть с заглавной, то названия категорий указаны в явном виде. В последних двух строчках указано, что к категории Разное относятся еще 2 ярлыка. Поскольку описание категории Разное уже было дано до этого, то в этих двух строчках столбец описания не заполнен.&lt;/p&gt;

&lt;p&gt;Здесь следует обратить внимание, что строки таблицы разделяются запятой, а в конце последней строки запятая не ставится — если у вас скрипт не станет работать, в первую очередь убедитесь, нет ли у вас лишних или пропущенных запятых.&lt;/p&gt;

&lt;p&gt;3. Далее указываем &lt;b&gt;настройки режима отображения&lt;/b&gt;. Эти опции не являются обязательными, если их не указывать, скрипт будет использовать значения по умолчанию.&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
var itoc_showDate = true;        // Отображать ли даты
var itoc_showDesc = true;        // Отображать ли описания
var itoc_showImg  = false;       // Отображать ли изображения-иллюстрации
var itoc_showImgOnlyWithDesc  = true; // Отображать изображение только если есть описание

var itoc_sortBy = 'published';   // Режим сортировки: published или title. (По дате публикации или по заголовку.)
var itoc_sortOrderAscending = true; // Сортировка по возрастанию/убыванию.

var itoc_minContentLength = 700; // Минимальная длина поста, при которой включается автоматическое описание.
var itoc_maxDescLength = 500;    // Максимальная длина автоматически формируемого описания.
var itoc_minDescLength = 30;     // Если автоматическое описание получилось короче этого значения, не выводить это описание.
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Здесь первые 4 переменные указывают, какие данные отображать для каждого сообщения, далее еще 2 переменные задают режим сортировки — тут всё самоочевидно.&lt;/p&gt;

&lt;p&gt;Переменные &lt;code&gt;itoc_minContentLength&lt;/code&gt;, &lt;code&gt;itoc_maxDescLength&lt;/code&gt;, &lt;code&gt;itoc_minDescLength&lt;/code&gt; задают параметры работы механизма, отвечающего за автоматические описания постов. Тут следует подробнее остановиться на особенностях его работы.&lt;/p&gt;

&lt;p&gt;При формировании краткого описания  в первую очередь из сообщения вырезаются теги, не имеющие прямого отношения к текстовой составляющей — картинки, флеш-ролики и т.п. Затем проверяется длина этой урезанной версии. Если она меньше значения переменной &lt;code&gt;itoc_minContentLength&lt;/code&gt;, то на этом обработка прекращается, и автоматическое описание не формируется. Эта проверка позволяет не показывать описания для коротких постов.&lt;/p&gt;

&lt;p&gt;Затем текст урезается по одному из следующих тегов: многострочная цитата, таблица, список, разрыв сообщения по ссылке «Читать далее». Если получившийся фрагмент меньше, чем значение переменной &lt;code&gt;itoc_minDescLength&lt;/code&gt;, автоматическое описание также не формируеться — это проверка проводится, чтобы избежать слишком коротких описаний. (Например, когда в начале поста идёт буквально пара слов, а затем таблица.)&lt;/p&gt;

&lt;p&gt;Из оставшегося фрагмента удаляются остальные теги, и если размер текста превышает значение переменной &lt;code&gt;itoc_maxDescLength&lt;/code&gt;, он урезается до этого размера. (Дополнительно проверяется, чтобы урезка шла по границе между словами, а не внутри слова.)&lt;/p&gt;

&lt;p&gt;Следует заметить, что если у вас в настройках блога RSS-лента настроена отображать только начало постов, то данный скрипт «увидит» только такие укороченные варианты сообщений. В общем, если RSS-лента выводит, например, только первые 200 символов сообщения, то не стоит ожидать здесь описаний постов по 500 символов.&lt;/p&gt;

&lt;p&gt;В данный момент всё готово для работы скрипта, можно нажать «Просмотр» и просмотреть получившееся или опубликовать пост. Однако результат будет выглядеть страшно, поскольку мы еще не задали стили оформления. Если вы не собираетесь вручную указывать описания сообщений и/или картинки, то переходите сразу к &lt;a href='#csssettings'&gt;настройке CSS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;4. Если автоматические описания и картинки вас не устраивают, то можно &lt;b&gt;настроить вручную заданные описания и иллюстрации&lt;/b&gt;. Описания задаются в переменной &lt;code&gt;itoc_descriptions&lt;/code&gt; в виде пар «адрес поста : описание поста». Образец: &lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
var itoc_descriptions = {
 'http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html' : 
  'Виджет «Календарь-архив» показывает в вашем блоге календарь на текущий месяц, в котором по дням проставлены ссылки на ваши статьи. Вам и вашим посетителям будет наглядно видно, когда и что вы писали. Календарь можно листать по месяцам и по годам, просматривая весь архив.',
 'http://izhurnal.blogspot.com/2010/11/css-typetextcss-table-background-color.html' :
  'Примеры оформления &amp;lt;a href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html"&amp;gt;виджета Календарь&amp;lt;/a&amp;gt; '+
  'при помощи таблиц стилей.'
};
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Здесь, как и в случае с настройкой таблицы категорий, будьте внимательны с запятыми: все пары «адрес:описание» разделяются запятой, а после последней пары запятую ставить не нужно.&lt;/p&gt;

&lt;p&gt;В переменной &lt;code&gt;itoc_images&lt;/code&gt; аналогичным образом задаются иллюстрации, торлько вместо описания указывается URL картинки.&lt;/p&gt;

&lt;p&gt;В итоге, после указания всех настроек получается что-то типа следующего:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;script type='text/javascript'&amp;gt;

var itoc_siteUrl = "http://izhurnal.blogspot.com/" // Адрес блога.

var itoc_categories = [
 ['Blogger.com'        , ''                   , 'Cкрипты, виджеты, идеи и советы для всех, кто держит блог на платформе Blogger.com'],
 ['блогеру на заметку' , 'Блогеру на заметку' , 'Полезности для блогеров, вне зависимости от используемой платформы.'],
 ['утилиты онлайн'     , 'Утилиты онлайн'     , 'Полезные скрипты, выполняющиеся прямо в браузере.'],
 ['советы по настройке', 'Советы по настройке', 'Рецепты и рекомендации по настройке программ.'],
 ['это интересно'      , 'Это интересно'      , 'Заметки обо всём на свете.'],
 ['мысль вслух'        , 'Мысль вслух'        , 'Случайные мысли на произвольные темы.'],
 ['разное'             , 'Разное'             , 'Сообщения, не вписавшиеся в формат других разделов.'],
 ['PR'                 , 'Разное'             , ''],
 ['поле чудес; страна дураков', 'Разное'      , '']
];

var itoc_descriptions = {
 'http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html' : 
  'Виджет «Календарь-архив» показывает в вашем блоге календарь на текущий месяц, в котором по дням проставлены ссылки на ваши статьи. Вам и вашим посетителям будет наглядно видно, когда и что вы писали. Календарь можно листать по месяцам и по годам, просматривая весь архив.',
 'http://izhurnal.blogspot.com/2010/11/css-typetextcss-table-background-color.html' :
  'Примеры оформления &amp;lt;a href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html"&amp;gt;виджета Календарь&amp;lt;/a&amp;gt; '+
  'при помощи таблиц стилей.',
 'http://izhurnal.blogspot.com/2010/09/blog-post_10.html' :
  'Как изменить подпись «Анонимный» в комментариях блога на «Гость» или любую другую. Небольшой скрипт-хак для Blogger.com.',
 'http://izhurnal.blogspot.com/2010/10/blog-post_11.html' :
  'Как изменить текст и внешний вид ссылок навигации, что расположены в конце каждой страницы блога.',
 'http://izhurnal.blogspot.com/2010/10/disqus.html' :
  'Идея о том, как заставить поисковые системы индексировать текст комментариев, оставленных на блоге при помощи системы Disqus.',
 'http://izhurnal.blogspot.com/2010/09/today-yesterday-date-blogger.html' :
  'Сегодня мы научим блог писать вместо даты слова «вчера» и «сегодня» для сообщений, которые были опубликованы вчера и сегодня. :)',
 'http://izhurnal.blogspot.com/2010/09/blogspot_08.html' :
  '«1 комментарий», «2 комментария», «25 комментариев»... Хотите, чтобы ваш блог показывал число комментариев в полном соответствии с правилами русского языка? На самом деле, сделать это очень просто...',
 'http://izhurnal.blogspot.com/2010/09/blogspot-hidden-posts.html' :
  'Небольшой хак для шаблона блога: делаем так, чтобы сообщения без ярлыков не было видно на главной, в архиве и т.п.',
 'http://izhurnal.blogspot.com/2010/09/blogger.html' :
  'Оптимизация шаблона блога с целью сделать ваш блог более дружественным для поисковых систем.',
 'http://izhurnal.blogspot.com/2010/09/blogspot.html' :
  'Описание синтаксиса, используемого в шаблонах блога. В первой части рассматриваются базовые элементы: теги секций и виджетов.',
 'http://izhurnal.blogspot.com/2010/09/widget-tags-blogspot.html' :
  'Синтаксис шаблонов блога, часть вторая. Теги для формирования внутренностей виджетов: условия, циклы, подключаемые сегменты и так далее.',
 'http://izhurnal.blogspot.com/2010/09/blogspot_04.html' :
  'Синтаксис шаблонов блога, часть третья. Теги для подстановки в шаблон реальных данных, таких как название блога, содержимое сообщений, ярлыки и т.п.',
 'http://izhurnal.blogspot.com/2010/10/blog-post_26.html' :
  'Мой вариант скрипта для списка похожих статей. Как и большинство подобных скриптов, определяет похожие сообщения на основе совпадения ярлыков. Расширенные возможности настройки: фильтрация, переименование и объединение ярлыков.',
 'http://izhurnal.blogspot.com/2010/08/mp.html' :
  '',
 'http://izhurnal.blogspot.com/2010/09/blog-post_05.html' :
  '',
 'http://izhurnal.blogspot.com/2010/09/seo-intelligence.html' :
  '',
 'http://izhurnal.blogspot.com/2010/09/blog-post_7110.html' :
  '',
 'http://izhurnal.blogspot.com/2010/09/blog-post_9547.html' :
  '',
 'http://izhurnal.blogspot.com/2010/10/blog-post_10.html' :
  ''
};

var itoc_images = {
 'http://izhurnal.blogspot.com/2010/10/firefox-cache.html' :
  'http://3.bp.blogspot.com/_9LzkYxYJB94/TLAXCacumTI/AAAAAAAAAIQ/9hR0lBxOYJE/s200/mozilla-firefox-logo.jpg',
 'http://izhurnal.blogspot.com/2010/10/feedburner.html' :
  ''
};

var itoc_showDate = true;
var itoc_showDesc = true;
var itoc_showImg  = false;
var itoc_showImgOnlyWithDesc  = true;

var itoc_maxDescLength = 500;
var itoc_minContentLength = 700;
var itoc_minDescLength = 30;

var itoc_sortBy = 'published';
var itoc_sortOrderAscending = true;

&amp;lt;/script&amp;gt;

&amp;lt;script type='text/javascript' src='http://izhurnalscripts.googlecode.com/svn/trunk/itoc.js'&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;noscript&amp;gt;
Для отображения содержимого страницы необходима поддержка JavaScript.
&amp;lt;/noscript&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;



&lt;h4 id='csssettings'&gt;Настройка CSS&lt;/h4&gt;

&lt;p&gt;Сейчас скрипт полностью настроен, но результат его работы выглядит жутко. Особенно если вы включили отображение картинок — вся разметка разъехалась, и картинки, описания и ссылки отображаются как попало. Это происходит потому, что мы еще не указали стили оформления для выводимых скриптом элементов.&lt;/p&gt;

&lt;p&gt;Если у вас в блоге используется более одной страницы с данным скриптом, то имеет смысл вынести CSS в шаблон блога. Если же всёго одна страница, можно CSS указать прямо в посте перед настройками скрипта.&lt;/p&gt;

&lt;p&gt;Элементы CSS, которые используются в скрипте:&lt;/p&gt;

&lt;style type="text/css"&gt;
.table1 {
 border: 4px double black;
 border-collapse: collapse;
}
.table1 td { 
 padding: 5px;
 border: 1px solid black;
}
&lt;/style&gt;

&lt;table id='csstable' class='table1'&gt;
&lt;tr&gt;&lt;td&gt;.itoc h4&lt;/td&gt;&lt;td&gt;Заголовок категории&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc p&lt;/td&gt;&lt;td&gt;Описание категории&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc ul&lt;/td&gt;&lt;td&gt;Список сообщений категории&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc li&lt;/td&gt;&lt;td&gt;Элемент для конкретного сообщения&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .date&lt;/td&gt;&lt;td&gt;Дата сообщения&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc a&lt;/td&gt;&lt;td&gt;Ссылка на сообщение&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc img&lt;/td&gt;&lt;td&gt;Иллюстрация к сообщению&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .desc&lt;/td&gt;&lt;td&gt;Описание сообщения&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .endofdesc&lt;/td&gt;&lt;td&gt;Пустой div, вставляемый в конце описания&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .progressbartable&lt;/td&gt;&lt;td rowspan='5'&gt;Полоса загрузки, появляющаяся когда скрипт читает RSS-ленту&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .progressbartable td&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .progressbartable .ready&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .progressbartable .notready&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;.itoc .progressbartable .progressbartext&lt;/td&gt;&lt;/tr&gt;
&lt;!--tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr--&gt;
&lt;/table&gt;

&lt;p&gt;Я не буду здесь расписывать, как задавать стили элементов — предполагается, что читатель знаком с CSS хотя бы на уровне новичка. За основу при составлении вашего стиля можете взять CSS, который я использую для оглавления на этом блоге:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;style type='text/css'&amp;gt;
.itoc p {
 margin-top: 0px;
}
.itoc h4 {
 margin-bottom: 0px;
 clear:left;
}

.itoc li {
 list-style-type: none;
 clear:left;
}

.itoc .date {
 font-size: small;
 color: green;
 font-family: terminus, monospace;
}

.itoc a {
 font-size: 140%;
 color: #8bc;
}

.itoc .date:before  { content: "["  }
.itoc .date:after  { content: "]"  }

.itoc .desc {
 margin-left: 20px;
 padding-left: 20px;
 border-left: 1px solid green;
}

.itoc .endofdesc {
 clear:left;
}

.itoc img {
 float: left;
 padding-left: 41px;
 padding-right: 5px;
 width: 130px;
}

.itoc .progressbartable {
 margin-left: auto;
 margin-right: auto;
}

.itoc .progressbartable td {
 width:  10px;
 height: 5px;
}

.itoc .progressbartable .ready {
 background-color: #cdf;
}

.itoc .progressbartable .notready {
 background-color: #ccc;
}

.itoc .progressbartable .progressbartext {
 color: #cdf;
 font-family: terminus, monospace;
 font-size: small;
 text-align: center;
}
&amp;lt;/style&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;



&lt;h4&gt;Расширение возможностей скрипта&lt;/h4&gt;

&lt;p&gt;В какую сторону копать, если вы знаете JavaScript и хотите получить от скрипта дополнительную функциональность:&lt;/p&gt;

&lt;p&gt;Чтобы частично или полностью «взять на себя» управление формированием HTML-кода, выдаваемого виджетом, определите в шаблоне блога или в посте, из которого вызываете скрипт, следующие функции:&lt;/p&gt;

&lt;table id='jstable' class='table1'&gt;
&lt;tr&gt;&lt;td&gt;itoc_getShortDescFor&lt;/td&gt;&lt;td&gt;Возвращает автоматическое описание для заданного контента&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_getImageFor&lt;/td&gt;&lt;td&gt;Возвращает автоматически выбранный URL картинки для заданного контента&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_onItemReceived&lt;/td&gt;&lt;td&gt;Производит дополнительную обработку элемента перед началом сортировок и формированием HTML-кода&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_compareItems&lt;/td&gt;&lt;td&gt;Возвращает результат сравнения двух заданных постов для сортировки постов&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_getToCHtml&lt;/td&gt;&lt;td&gt;Возвращает HTML для всего оглавления&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_getHtmlForItems&lt;/td&gt;&lt;td&gt;Возвращает HTML для заданного списка элементов-постов&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;itoc_getHtmlForItem&lt;/td&gt;&lt;td&gt;Возвращает HTML для заданного элемента&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Скрипт проверяет, определена ли соответствующая функция на момент вызова скрипта, и если да, использует её, а не встроенную реализацию.&lt;/p&gt;

&lt;p&gt;Подробной документации по внутреннему устройству скрипта не пишу, так как всё можно посмотреть непосредственно в &lt;a href='http://izhurnalscripts.googlecode.com/svn/trunk/itoc.js'&gt;исходном коде&lt;/a&gt;. &lt;/p&gt;

&lt;h4&gt;Минусы скрипта&lt;/h4&gt;

&lt;p&gt;Основным минусом является необходимость загрузки RSS ленты со всеми теми постами, которые будут перечислены в выдаче скрипта. Если у вас RSS отдаётся в полном виде, то загружается полный текст постов. Соответственно, трафика скрипт кушает прилично и на медленных каналах загружаться может ощутимое время. Особенно это критично для посетителей с оплатой за трафик.&lt;/p&gt;

&lt;h4&gt;Что дальше?&lt;/h4&gt;

&lt;p&gt;Как я и обещал, отдельные части работы будут релизиться по мере готовности. Данный скрипт — лишь первая часть. Что же будет дальше?&lt;/p&gt;

&lt;p&gt;Во-первых, хотя скрипт довольно гибок, на мой вгляд, он всё еще недостаточно гибок в настройке. Кроме того, в нём есть несколько мелких недоработок, а в процессе эксплутатации наверняка обнаружатся баги. Поэтому уже идёт работа над второй версией.&lt;/p&gt;

&lt;p&gt;Во-вторых, результат работы скрипта формируется в браузере уже после открытия страницы, и значит, совершенно бесполезен для поисковых систем. Поэтом следующим шагом мы заставим все эти рубрики, оглавления, сводные таблицы и что угодно, что можно получить при помощи этого скрипта — заставим всё это индексироваться поисковыми ситемами как обычный текст. Фантастика? Как знать, как знать... Разумеется одним только джаваскриптом и браузером здесь не обойтись, но у нас есть кое-что в запасе.&lt;/p&gt;

&lt;p&gt;В третьих... time will tell. :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-5448966229470648612?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/5448966229470648612/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_11.html#comment-form" title="Комментарии: 22" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5448966229470648612?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5448966229470648612?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_11.html" title="Реализация карты или оглавления для блога с разбиением на рубрики/категории" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>22</thr:total></entry><entry gd:etag="W/&quot;CUcASX0_eCp7ImA9Wx9TFUo.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-9156862947614394465</id><published>2010-11-07T02:38:00.005+07:00</published><updated>2010-11-24T11:30:48.340+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-24T11:30:48.340+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="поле чудес; страна дураков" /><title>Инновационные ресурсы, PHP-видеокурсы и прочая фауна русских интернетов</title><content type="html">В общем, дело было вечером, делать было нечего. Скрипт, про который я &lt;a href="http://izhurnal.blogspot.com/2010/11/ie-php-getelementsbyclassname.html"&gt;вскользь упоминал&lt;/a&gt;, уже практически готов, осталось только написать документацию — а это делать лучше на свежую голову в первой половине дня...&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Так что отправился я, значит, чтоб время скоротать, читать, что братья по разуму в интернетах пишут.&lt;br /&gt;
&lt;br /&gt;
И наткнулся на &lt;a href="http://php.name/"&gt;блог&lt;/a&gt;, а в блоге том — на &lt;a href="http://php.name/php/pochemu-evgenij-popov-ploxoj/"&gt;заметку чудную&lt;/a&gt; о похождениях Женьки Попова, вебмастера самозванного. Прочитал, &lt;s&gt;охренел,&lt;/s&gt; подивился, да и пошел далее по этой теме информацию искать и по ссылкам куролесить — не каждый день такое встретишь, любопытно ведь флеймы почитать.&lt;br /&gt;
&lt;br /&gt;
Долго ли, коротко ли, а вышел я по ссылкам и указаниям Гугля Всезнающего на еще один &lt;a href="http://irbis-team.com/15/10/2"&gt;сайтец любопытный&lt;/a&gt;, где все злодейства смутьяна Попова подробно рассматривались: мол, де, наводит в неокрепших умах разброд и шатания, насаждает безграмотность и отучает писать семантически корректный код, дыры в безопасности сайтов пропагандирует своими скриптами отвратными...&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
...а потом я тыкнул в меню на том сайте, и тут басня-то возьми и кончись, и вывалился я обратно в суровую реальность. Попов, конечно, тот еще звиздун, но рассуждать за семантичный и грамотный код на ресурсе, где в главном меню вместо ссылок стоят обработчики событий onclick, — как-то несподручно. Отчего-то сразу становится понятно, что Попов, в общем-то, и не виноват. Ну или — виноват не только Попов.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;
&lt;br /&gt;
Собственно, в чём суть-то. Банальная, уже тысячу раз изжеванная в блогах и форумах проблема: &lt;b&gt;вся навигация на сайте должна быть выполнена ссылками&lt;/b&gt;. Как бы, тут даже обсуждать нечего — ссылки для того и придуманы. Кто не верит, может полистать стандарт HTML.&lt;br /&gt;
Висит в шапке сайта такое вот красивое меню:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9LzkYxYJB94/TNWsRATFy9I/AAAAAAAAAMo/7fbCWfGTT9k/s1600/Screenshot-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_9LzkYxYJB94/TNWsRATFy9I/AAAAAAAAAMo/7fbCWfGTT9k/s1600/Screenshot-16.png" /&gt;&lt;/a&gt;&lt;/div&gt;Красивое и бесполезное: по щелчку средней кнопкой на отдельной вкладке страницы не открываются, при наведении мыши адрес перехода в строке статуса не высвечивается, из контекстного меню скопировать его, соответственно, тоже нельзя. Не говоря уж о том, что у посетителя запросто могут быть отключены скрипты в браузере — может он с коммуникатора зашел, и ему эти скрипты там нафиг не уперлись, или вообще из-под консоли. Налицо синдром альтернативного мышления:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;div class="menu"&amp;gt;
 &amp;lt;div class="item_pas" id="general" onclick="tohref('http://irbis-team.com')"&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;Главная&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
 
 &amp;lt;div class="item_pas" id="lessons" onclick="tohref('http://irbis-team.com/15')"&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;Курсы&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;

 &amp;lt;div class="item_pas" id="datebase" onclick="tohref('http://irbis-team.com/2')"&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;База знаний&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
Там в коде страницы (и в комментариях к материалам на сайте) хватает и других... эээ... загадочных вещей, но чёрт с ними.&lt;br /&gt;
&lt;br /&gt;
На внутренних страницах это всё еще не так печально, там сбоку меню висит, а вот на главной ничего подобного не наблюдается. Я было решил, что разработчик специально заперся от поисковых систем и части посетителей, не дав с главной прямых ссылок внутрь сайта, но потом разглядел таки одну — было это мудрено, она сливалась цветом с остальным текстом.&lt;br /&gt;
&lt;br /&gt;
Короче. В рамках компании "Пятиминутка альтруизма", бесплатно восполню пробелы автора в HTML. (скину ему где-нибудь в комментариях на сайте ссылку сюда)&lt;br /&gt;
&lt;br /&gt;
Во-первых, вертаем ссылки на то место, где они законно должно быть:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;div class="menu"&amp;gt;
 &amp;lt;div class="item_pas" id="general" onclick="tohref('http://irbis-team.com')"&amp;gt;
  &amp;lt;a href='http://irbis-team.com'&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;Главная&amp;lt;/div&amp;gt;
  &amp;lt;/a&amp;gt;
 &amp;lt;/div&amp;gt;
 
 &amp;lt;div class="item_pas" id="lessons" onclick="tohref('http://irbis-team.com/15')"&amp;gt;
  &amp;lt;a href='http://irbis-team.com/15'&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;Курсы&amp;lt;/div&amp;gt;
  &amp;lt;/a&amp;gt;
 &amp;lt;/div&amp;gt;

 &amp;lt;div class="item_pas" id="datebase" onclick="tohref('http://irbis-team.com/2')"&amp;gt;
  &amp;lt;a href='http://irbis-team.com/2'&amp;gt;
  &amp;lt;div class="menu_img"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class="text"&amp;gt;База знаний&amp;lt;/div&amp;gt;
  &amp;lt;/a&amp;gt;
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
Если при этом что-нибудь в разметке разъедется (не должно бы, но вдруг — кто его знает, что там в стилях этого сайта) — не ругаем теги ссылок, а идём в CSS и подкручиваем там винтики до восстановления статус-кво.&lt;br /&gt;
Бесполезный onclick после этого можно убрать, но если дорог как память, пущай болтается...&lt;br /&gt;
&lt;br /&gt;
Во-вторых, в коде страницы видны странные функции — вроде как кто-то пытался сделать выпадающее меню, но забил. Так вот, javascript для этого &lt;b&gt;не нужен&lt;/b&gt;. Вот на этом блоге у меня сбоку висит календарь, а под календарём ссылка &lt;i&gt;Calendar Widget&lt;/i&gt; — если на неё навести мышь, появится выпадающее меню (оно там из одного пункта всего, но сути это не меняет). Без всяких скриптов, на голых стилях. Если есть желание, можно прямо у меня из исходника  страницы свиснуть соответствующий CSS, ну или нагуглить.&lt;br /&gt;
&lt;br /&gt;
В-третьих, изменение стиля текущего пункта меню при помощи document.getElementById('lessons').className, насколько я понимаю, производится подстановкой на стороне сервера конкретного идешника в параметры метода getElementById (во всяком случае, я надеюсь... иначе совсем печально). Так вот, это тоже &lt;b&gt;не нужно&lt;/b&gt;. Либо выносим полностью всю эту обработку на сторону сервера и сразу в html-код менюшки фигачим нужный стиль, либо полностью убираем её с сервера, и делаем самостоятельный джаваскрипт для этого — анализируем адрес текущей страницы и запиливаем на основе этого нужный стиль нужному пункту меню.&lt;br /&gt;
&lt;br /&gt;
Ну это были цветочки, на самом деле. Еще там есть база знаний... А в ней есть меню. Ну вы, конечно, догадались — оно тоже на скриптах, и без предоставления механизма нормальной навигации. Если в браузере javascript отключить, оно просто не работает,  а если включить и попробовать пользоваться, становится страшно:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_9LzkYxYJB94/TNWtAB41YvI/AAAAAAAAAMs/UBJRyt8wCbw/s1600/Screenshot-17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_9LzkYxYJB94/TNWtAB41YvI/AAAAAAAAAMs/UBJRyt8wCbw/s320/Screenshot-17.png" width="273" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Тут диагноз может быть только один — скрипты выпилить, сделать нормальное меню списком ссылок.&lt;br /&gt;
&lt;br /&gt;
Что еще... А, ну форум сайта меня порадовал небывалым сообщением, просто уникальным:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9LzkYxYJB94/TNWtU3EiQlI/AAAAAAAAAMw/WDdmyytrXjY/s1600/Screenshot-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://2.bp.blogspot.com/_9LzkYxYJB94/TNWtU3EiQlI/AAAAAAAAAMw/WDdmyytrXjY/s400/Screenshot-15.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Скриншот из разряда вебмастеры против посетителей. Пчёлы против мёда. Я просьбы форума послушался, и кликов больше делать не стал — закрыл страницу.&lt;br /&gt;
&lt;br /&gt;
Ну и забыл совсем. Самая жесть в названии сайта, разумеется. &lt;i&gt;Innovative resource for business information systems.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Морали не будет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-9156862947614394465?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/9156862947614394465/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/php.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/9156862947614394465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/9156862947614394465?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/php.html" title="Инновационные ресурсы, PHP-видеокурсы и прочая фауна русских интернетов" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_9LzkYxYJB94/TNWsRATFy9I/AAAAAAAAAMo/7fbCWfGTT9k/s72-c/Screenshot-16.png" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DkEEQ3g4eCp7ImA9Wx5aFEs.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-6144412736489268868</id><published>2010-11-05T21:50:00.002+07:00</published><updated>2010-11-11T15:36:42.630+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T15:36:42.630+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>Хроники веб-девелопера: о IE, запятых, PHP и снова о getElementsByClassName</title><content type="html">Убил полвечера на отладку скрипта только потому, что у меня нет под рукой компьютера с Windows, и баги в IE мне пришлось «отлаживать» через скриншоты и переписку по электронной почте. При этом еще и отнимая время у человека, не имеющего к программированию ни малейшего отношения.&lt;br /&gt;
&lt;br /&gt;
В итоге, как обычно и бывает с IE, виной всему оказались не мои кривые руки, а &lt;a href="http://habrahabr.ru/qa/454/"&gt;альтернативное восприятие действительности разработчиками браузера&lt;/a&gt;. Настолько альтернативное, что они уже 10 лет как не могут починить парсер, а в 5-м издании javascript  специально для них добавлено особое разъяснение.&lt;br /&gt;
Да-да, — запятые — если вы, не ходя по ссылке, догадались, что дело было в запятых, то вы молодец. А я — не молодец, я про них забыл и твердо верил, что как написано в спецификации, так оно и обязано работать.&lt;br /&gt;
&lt;br /&gt;
Попутно узнал &lt;a href="http://studioad.ru/blog/2010-01-08-103"&gt;о самом коротком определении IE из-под javascript&lt;/a&gt; с использованием этого бага. А так же — внезапно — о том, что «&lt;a href="http://nekt.ru/2008/11/javascript-massivy-i-xeshi/"&gt;многие языки для реализации и массивов, и хэшей используют один и тот же тип данных&lt;/a&gt;» (пунктуация цитаты не сохранена — хоть тут дайте запятую поставить нормально). Напомню, что в число «многих языков» входит PHP... и, собственно, никто больше не входит.&lt;br /&gt;
PHP разрушает мозг, ну вы в курсе.&lt;br /&gt;
&lt;br /&gt;
Еще выяснилось, что в отдельных случах IE8 таки настаивает на своём и по-прежнему «&lt;a href="http://izhurnal.blogspot.com/2010/09/blog-post_8924.html"&gt;не поддерживает это свойство или метод&lt;/a&gt;». Я наугад потыкал код, но кажется, это привело лишь к тому, что теперь на этом блоге в IE вообще никак не работаёт &lt;a href="http://izhurnal.blogspot.com/2010/09/today-yesterday-date-blogger.html"&gt;скрипт дат&lt;/a&gt;, а проверить не на чем. Да и чёрт с ним. На следующей неделе доберусь до ноутбука, на котором установлена винда, там и посмотрим, что опять не так с &lt;a href="http://izhurnal.blogspot.com/2010/10/getelementsbyclassname-ie8.html"&gt;getElementsByClassName&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ну и самое главное-то чуть не забыл сказать. Мы тут с &lt;a href="http://amateurblogger.ru/"&gt;amateurblogger&lt;/a&gt; подумали-подумали, и решили еще что-нибудь радикально улучшить в этом буржуйском блогспоте. Поэтому скоро вас ждёт нечто более удивительное, чем какой-то там &lt;a href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html"&gt;календарь&lt;/a&gt;. Удивительное будет выходить в свет по частям, по мере готовности частей к релизу.&lt;br /&gt;
Stay tuned!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-6144412736489268868?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/6144412736489268868/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/ie-php-getelementsbyclassname.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6144412736489268868?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6144412736489268868?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/ie-php-getelementsbyclassname.html" title="Хроники веб-девелопера: о IE, запятых, PHP и снова о getElementsByClassName" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;C0IMSH4zfSp7ImA9Wx5bGUk.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-589850720115595283</id><published>2010-11-05T12:03:00.001+07:00</published><updated>2010-11-05T14:19:49.085+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-05T14:19:49.085+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>Я не играю в WoW, потому что у меня есть блог</title><content type="html">Собрался было изложить свои мысли о прямых параллелях между блогингом и MMORPG, но, как обычно, &lt;a href="http://7bloggers.ru/blogging-kak-rpg/"&gt;всё умное уже написано до нас&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Я искренне и по-доброму завидую тем людям, которые могут превращать какое-то из своих занятий в пошаговую стратегию или RPG. В процессе прохождения они накапливают скилы, выполняют квесты и получают левелы с определенными бонусами и новыми открытыми картами. Я сам не раз пытался следовать подобной тактики, но получается не всегда.&lt;br /&gt;
&lt;br /&gt;
А правила как обычно просты, стоит лишь вспомнить мой первый курс и целые ночи, проводимые за игрой в Diablo II. Сейчас игры круче, но общие принципы остаются те же.&lt;br /&gt;
&lt;br /&gt;
Правило первое. Невозможно одновременно прокачивать нескольких персонажей (читай блогов). Вот никак не получится играть сразу на двух компах, точно проверял. Время можно уделять только одному персонажу, правда можно прокачивать персонажей по очереди, но тогда все равно каждому будет уделено значительно меньше времени, чем если бы играл только одним. И тут встает выбор – либо прокачать одного, но до 90 уровня, либо двух, но до 45 за то же время.&lt;br /&gt;
&lt;br /&gt;
Правило второе. Каждого мегабоса (читай тему, например как создать свой сайт) можно штурмовать несколько раз. Если при первой попытке добыто не слишком много денег/предметов/бонусов, можно попробовать еще и еще. Можно хоть все время посвятить лишь одному уровню, однако в конце концов наступит предел, когда нужно будет двигаться дальше, так как ваш персонаж достигнет потолка, а чтобы рассчитывать на что-то большее придется двигаться дальше. Без развития персонаж (читай блог) станет бесполезным.&lt;br /&gt;
&lt;br /&gt;
Правило третье. Каждый новый уровень начинается с трудом. Прокладывать дорогу и изучать карту в первый раз всегда трудно – постоянно убивают, выпивают всю манну и вообще куча гадостей и скрытых ловушек попадается на пути. Другое дело идти по тому же пути во второй раз – почти никакого напряга, но и пользы значительно меньше.&lt;br /&gt;
&lt;br /&gt;
Правило четвертое. Прокачивать нужно какое-то одно умение. Если распаляться на много скилов (читай тематик) ничего путного не выйдет. Нельзя сделать из персонажа и берсерка и хорошего мага одновременно, а одновременно прокачивая и манну и силу получится довольно посредственный персонаж – и заклинания средненькие – толком никого не убить – и силы не достаточно чтобы с одного удара уничтожать противников. До определенного уровня прокачать удастся, но потом либо ставить на персонаже крест, либо в срочном порядке прокачивать какой-то один скил.&lt;br /&gt;
&lt;br /&gt;
Правило пятое. Игра, как хороша бы она не была, изредка надоедает. Однако не стоит отправлять в мусорную корзину все сохранения. Через неделю-другую желание снова появится и можно будет отправится в новый всепокоряющий квест.&lt;br /&gt;
&lt;br /&gt;
Всем гамерам привет!&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-589850720115595283?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/589850720115595283/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/wow.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/589850720115595283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/589850720115595283?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/wow.html" title="Я не играю в WoW, потому что у меня есть блог" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DkUGRH46fSp7ImA9Wx5bGEo.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-1335163911484279808</id><published>2010-11-04T19:37:00.000+07:00</published><updated>2010-11-04T19:37:05.015+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-04T19:37:05.015+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>Чем отличается хороший сайт от плохого</title><content type="html">На хорошем сайте — информация. На плохом — контент.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-1335163911484279808?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/1335163911484279808/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_04.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/1335163911484279808?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/1335163911484279808?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/blog-post_04.html" title="Чем отличается хороший сайт от плохого" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;C0AAQXo4cSp7ImA9Wx5bFko.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-1304917826949380487</id><published>2010-11-02T11:19:00.002+07:00</published><updated>2010-11-02T11:22:20.439+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-02T11:22:20.439+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><title>Примеры стилей для виджета календаря</title><content type="html">Примеры оформления &lt;a href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html"&gt;виджета календаря&lt;/a&gt; при помощи CSS:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_9LzkYxYJB94/TM-RB6Ut_vI/AAAAAAAAAJk/nPRFRFyJcrg/s1600/Screenshot-13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_9LzkYxYJB94/TM-RB6Ut_vI/AAAAAAAAAJk/nPRFRFyJcrg/s1600/Screenshot-13.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;pre&gt;&amp;lt;style type='text/css'&amp;gt;

.iacalendar table {
 background-color: #888;
}

.iacalendar table td {
 background-color: #ddd !important;
 text-align: center  !important;
 font-family: Arial !important
}

.iacalendar .wday_cell {
 font-weight: bold !important
}

&amp;lt;/style&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_9LzkYxYJB94/TM-Q9C0SP0I/AAAAAAAAAJg/83Yym87S2D4/s1600/Screenshot-12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_9LzkYxYJB94/TM-Q9C0SP0I/AAAAAAAAAJg/83Yym87S2D4/s1600/Screenshot-12.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;pre&gt;&amp;lt;style type='text/css'&amp;gt;

.iacalendar table td {
 text-align: left  !important;
 font-family: Arial !important;
 font-size: 10pt !important;
 color: #ddd !important;
}

.iacalendar .wday_cell, .iacalendar .month_year_cell {
 font-weight: bold !important;
 color: #999 !important;
}

.iacalendar .month_year_cell {
 text-align: center !important;
}

.iacalendar .cell a {
 color: #888 !important;
 text-decoration: none !important;
}

.iacalendar .cell a:hover {
 color: #888 !important;
 text-decoration: underline !important;
}

&amp;lt;/style&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_9LzkYxYJB94/TM-QjgDjymI/AAAAAAAAAJc/T6APR2wFNG4/s1600/Screenshot-11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_9LzkYxYJB94/TM-QjgDjymI/AAAAAAAAAJc/T6APR2wFNG4/s1600/Screenshot-11.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;pre&gt;&amp;lt;style type='text/css'&amp;gt;

.iacalendar table {
 border: 1px solid #888;
 -webkit-border-radius: 5px;
 -moz-border-radius: 5px;
 border-radius: 5px;
}

.iacalendar table td {
 text-align: center  !important;
 font-family: Arial !important
}

.iacalendar .wday_cell {
 font-weight: bold !important
}

.iacalendar .month_year_cell {
 border-bottom: 1px solid #888;
}
&amp;lt;/style&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_9LzkYxYJB94/TM-QQ2RRt6I/AAAAAAAAAJY/JcYWcutObnw/s1600/Screenshot-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_9LzkYxYJB94/TM-QQ2RRt6I/AAAAAAAAAJY/JcYWcutObnw/s1600/Screenshot-10.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;pre&gt;&amp;lt;style type='text/css'&amp;gt;

.iacalendar table {
 border: 1px solid #888;
}

.iacalendar table td {
 text-align: center !important;
 font-family: Monospace !important
}

.iacalendar .wday_cell {
 font-weight: bold !important
}

.iacalendar .month_year_cell {
 border-bottom: 1px solid #888;
}

.iacalendar .cell a {
 display: block;
 background-color: #ddd;
 text-decoration: none !important;
}

&amp;lt;/style&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-1304917826949380487?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/1304917826949380487/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/css-typetextcss-table-background-color.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/1304917826949380487?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/1304917826949380487?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/css-typetextcss-table-background-color.html" title="Примеры стилей для виджета календаря" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_9LzkYxYJB94/TM-RB6Ut_vI/AAAAAAAAAJk/nPRFRFyJcrg/s72-c/Screenshot-13.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0EDQ34_fCp7ImA9Wx5bFUQ.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-7739701705867767148</id><published>2010-11-01T14:14:00.001+07:00</published><updated>2010-11-01T14:14:32.044+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-01T14:14:32.044+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="это интересно" /><title>Роботы проехали 13000 километров</title><content type="html">Завершился пробег роботизированных автомобилей из Италии в Китай.&lt;br/&gt;
&lt;br/&gt;
Как показал эксперимент, вмешательство человека потребовалось&lt;br/&gt;
- на таможнях&lt;br/&gt;
- в московских пробках&lt;br/&gt;
- при подвозе автостопщиков &lt;br/&gt;
&lt;br/&gt;
via &lt;a href="http://vitus-wagner.livejournal.com/561039.html"&gt;vitus-wagner.livejournal.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-7739701705867767148?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/7739701705867767148/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/11/13000.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7739701705867767148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7739701705867767148?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/11/13000.html" title="Роботы проехали 13000 километров" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0YNQXc9eSp7ImA9Wx5bFE0.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-4108927767963157278</id><published>2010-10-30T11:26:00.000+08:00</published><updated>2010-10-30T11:26:30.961+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-30T11:26:30.961+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="блогеру на заметку" /><title>Сбор статистики посещений для страниц социальных сетей</title><content type="html">&lt;a href="http://forbigblog.ru/?p=3358"&gt;Способ организовать сбор статистики посещений&lt;/a&gt; для любых страниц, на которых вы можете разместить изображение — например, для ваших постов в социальных сетях, форумах и так далее. Суть заключается в реализации микросчётчика с помощью сервиса сокращения ссылок bit.ly, который собирает статистику кликов по времени, источникам перехода по ссылке и географическому положению.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-4108927767963157278?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/4108927767963157278/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_30.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/4108927767963157278?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/4108927767963157278?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_30.html" title="Сбор статистики посещений для страниц социальных сетей" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0UEQXczeip7ImA9Wx5bE0w.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-5812126004882094586</id><published>2010-10-29T09:20:00.000+08:00</published><updated>2010-10-29T09:20:00.982+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-29T09:20:00.982+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><category scheme="http://www.blogger.com/atom/ns#" term="notepad++" /><title>Спрашивали? Отвечаем!</title><content type="html">&lt;p&gt;Посмотрел, по каким запросам находят мой блог, и решил скомпоновать пост с ответами — ну не зря ж люди ищут. ;)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;как разрешить запуск нескольких копий firefox&lt;/b&gt;&lt;br/&gt;
Как следует из &lt;a href='http://izhurnal.blogspot.com/2010/10/command-line-options-firefox-mozilla.html#-no-remote'&gt;описания опций запуска Firefox&lt;/a&gt;, для этого нужно использовать ключ &lt;code&gt;-no-remote&lt;/code&gt;. Также лучше бы создать два или более отдельных профиля и запускать разные копии фокса с разными профилями при помощи опции -P. Чтоб красномордые лисы не передрались.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;отключить внутренний кэш в firefox&lt;/b&gt;&lt;br/&gt;
За использование кэша отвечает параметр network.http.use-cache в about:config. &lt;a href='http://izhurnal.blogspot.com/2010/10/firefox-cache.html'&gt;Подробности.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;вставка виджета в тело формы&lt;/b&gt;&lt;br/&gt;
Прям даже и не знаю. Но если имеется ввиду форма добавления пользовательского виджета для блогспота, то всё просто:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;http://beta.blogger.com/add-widget&amp;quot;&amp;gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;widget.title&amp;quot; value=&amp;quot;тут название виджета&amp;quot;/&amp;gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;widget.content&amp;quot; value=&amp;quot;тут содержимое тела виджета&amp;quot;/&amp;gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;widget.template&amp;quot; value=&amp;quot;тут шаблон оформления виджета&amp;quot; /&amp;gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;infoUrl&amp;quot; value=&amp;quot;ссылка на ваш сайт&amp;quot;/&amp;gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;go&amp;quot; value=&amp;quot;Добавить виджет&amp;quot;/&amp;gt;
&amp;lt;/form&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;
А подробности &lt;a href='http://www.google.com/support/blogger/bin/answer.py?hl=ru&amp;answer=53219'&gt;в справке гугла&lt;/a&gt;.

&lt;p&gt;&lt;b&gt;объект не поддерживает это свойство или метод&lt;/b&gt;&lt;br/&gt;
&lt;a href='http://izhurnal.blogspot.com/2010/09/blog-post_8924.html'&gt;И не будет поддерживать&lt;/a&gt;. Но его &lt;a href='http://izhurnal.blogspot.com/2010/10/getelementsbyclassname-ie8.html'&gt;можно перехитрить&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;объект не поддерживает эт&lt;span style='color:red'&gt;а&lt;/span&gt; свойство или метод&lt;/b&gt;&lt;br/&gt;
Неграмотный IE8, неграмотные индусы. :'(
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;поис к кеше яндекс&lt;/b&gt;&lt;br/&gt;
Совсем печально.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&amp;lt;b:include data='blog' name='all-head-content'/&amp;gt; это код&lt;/b&gt;&lt;br/&gt;
Даже Кэп ищет мой блог.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;ищч-ырфвщц ghjgflftn&lt;/b&gt;&lt;br/&gt;
Lf b x`hn c ytqю
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;как попасть в кеш в фирефоксе&lt;/b&gt;&lt;br/&gt;
Адрес &lt;code&gt;about:cache&lt;/code&gt;. А там будут 3 ссылки на 3 разных типа хранилища: в памяти, на диске и оффлайновое хранилище для данных.
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;+notepad++ +убрать +переносы +строк&lt;/b&gt;&lt;br/&gt;
Правка -&gt; Объединить строки (Ctrl+J)
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;поисковая яндекса&lt;/b&gt;&lt;br/&gt;
Поисковая яндекса, найди еда для чукча. Чукча кушать хочет.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-5812126004882094586?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/5812126004882094586/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_5998.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5812126004882094586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5812126004882094586?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_5998.html" title="Спрашивали? Отвечаем!" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DkIER3s4fip7ImA9Wx5bEkg.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-7941502931485312627</id><published>2010-10-28T15:12:00.001+08:00</published><updated>2010-10-28T16:28:26.536+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T16:28:26.536+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>Экономическая независимость</title><content type="html">Увидел &lt;a href="http://mega-obzor.ru/nezavisimy"&gt;очень странный пост&lt;/a&gt;, в чём-то даже немного истеричный. Вообще, это типа конкурсная работа на очередной &lt;a href="http://blog-studenta.ru/my-notes/contest-my-way-to-independence.html"&gt;конкурс сеошников&lt;/a&gt;, посвященный экономической независимости. Я хоть и не собираюсь принимать в нём участие, но тоже выскажусь.&lt;br /&gt;
Ну так вот. Автор горячо убеждает нас, что независимости не существует. Кто ж спорит — конечно, не существует. Товарищ, вы не нервничайте, всё так и есть. Тут можно даже вспомнить кибернетическое определение понятия информации как меры влияния состояния одного объекта на состояние другого. Понятно, что обмен информацией и веществом/энергией в мире идет постоянно и везде, и добиться реальной независимости от чего угодно, хоть от правительства, хоть от магии вуду, можно только сбежав в отдельную вселенную. Однако, это всё лирика. Ну то есть, разумеется, не лирика, а самая настоящая суровая физика и информатика, но не суть — тема-то конкурса, собственно, вообще не про то.&lt;br /&gt;
&lt;br /&gt;
Речь в конкурсе идёт о экономической независимости, о независимости от работы «на дядю». Что это вообще за зверь, экономическая независимость? Организаторы определения не дают, предоставив авторам простор для творчества.&lt;br /&gt;
Моё определение таково: &lt;i&gt;экономическая независимость — это положение вещей, при котором человек самостоятельно создаёт, контроллирует и развивает основные источники своего дохода; а полученной прибыли при этом хватает как на нужны потребления, так и на дальнейшее развитие данных источников&lt;/i&gt;.&lt;br /&gt;
Собственно, всё. Тему вопроса можно считать раскрытой. Остальные мысли, которые можно высказать по данному поводу — вполне очевидные следствия данного определения. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-7941502931485312627?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/7941502931485312627/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_28.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7941502931485312627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7941502931485312627?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_28.html" title="Экономическая независимость" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CkMER384eip7ImA9Wx5bE0s.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-2629126390961513180</id><published>2010-10-28T13:28:00.009+08:00</published><updated>2010-10-29T21:53:26.132+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-29T21:53:26.132+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><title>Виджет для Blogger: календарь с возможностью просмотра архива блога.</title><content type="html">&lt;p&gt;Итак, свершилось. То, о чём все блогеры на blogspot так долго мечтали, глядя на ЖЖ, доступно прямо здесь и сейчас, достаточно лишь нажать одну кнопку в конце этого поста. Идея виджета принадлежит &lt;a href='http://amateurblogger.ru/'&gt;amateurblogger&lt;/a&gt;, а её воплощением в коде занимался &lt;a href='http://izhurnal.blogspot.com/'&gt;ваш покорный слуга&lt;/a&gt;. Пока другие перепечатывают друг у друга одни и те же скрипты, гаджеты и уловки, мы таки просто сделаем что-нибудь полезное. Это было лирическое вступление, а теперь к делу.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Виджет «Календарь»&lt;/b&gt; показывает в вашем блоге календарь на текущий месяц, в котором по дням проставлены ссылки на ваши посты. Вам и вашим посетителям будет наглядно видно, когда и что вы писали. Календарь можно листать по месяцам и по годам, просматривая весь архив. (Ну или же просто можно воспользоваться им как обычным календарём — посмотреть, на какой день недели какое число приходится. :) ) &lt;/p&gt;
&lt;p&gt;Ссылка с даты календаря ведёт на соответствующий пост, если вы в этот день написали только одно сообщение, или же на страницу с кратким содержанием постов, если в тот день было больше одного сообщения. (Если вы не пользуетесь разделением на краткое и полное содержание сообщений, то, разумеется, сообщения будут там показаны целиком.) Кстати, при просмотре страниц сообщений и страниц навигации по блогу, календарь будет показывать не текущий месяц, а тот месяц к которому относятся отображаемые на данной странице сообщения.&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;p&gt;Чтобы &lt;b&gt;установить календарь в свой блог&lt;/b&gt;, достаточно нажать кнопку в конце данной заметки, и у вас откроется страница выбора блога, в который следует добавить виджет. Перед этим можно задать настройки календаря, хотя это совсем не обязательно — календарь отлично работает и так. В настройках вы можете выбрать внешний вид «шапки» календаря, цвет фона ячеек и язык (русский или английский). Если вам хочется видеть календарь на каком-нибудь другом языке, выберите в выпадающим списке пункт «Другой» и в появившихся полях ввода введите названия месяцев и дней недели — после этого виджет «научится» новому языку.&lt;/p&gt;

&lt;p&gt;Даты в будущем отображаются серым цветом. Вы также можете настроить календарь, чтобы даты, которые лежат в прошлом за датой первого сообщения блога, также отображались серым. Для этого в настройках календаря введите дату первого сообщения.&lt;/p&gt;

&lt;p&gt;По умолчанию календарь показывает ссылки на сообщения вашего блога (т.е. того блога, на котором он установлен), но если вам по какой-либо причине захочется, чтобы он отображал ссылки из другого блога, вы можете в настройках указать нужный адрес блога. Также, если вам не нужны ссылки на сообщения вообще, снимите в настройках флажок «Отображать ссылки» — календарь-архив превратится в обычный календарик, без функции архива.&lt;/p&gt;

&lt;p&gt;Также можете почитать &lt;a href='http://amateurblogger.ru/2010/10/kalendar-dlja-bloga.html'&gt;статью на amateurblogger.ru&lt;/a&gt;, посвященную этому виджету, там всё подробно расписано (гораздо более человеческим языком, чем у меня :) ), и даже поэтапно на скришотах показан процесс установки.&lt;/p&gt;


&lt;div style='border: 1px solid gray; font-size: small; padding: 5px;'&gt;
&lt;p&gt;И еще кое-что. Если вы разбираетесь в CSS, и хотите изменить внешний вид календаря, то вот перечисление стилей, которые вы можете настраивать для этого:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;.iacalendar&lt;/b&gt; — весь календарь целиком&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar table&lt;/b&gt; — таблица с ячейками календаря (включая «шапку»)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .month_year_cell&lt;/b&gt; — «шапка»&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .wday_cell&lt;/b&gt; — ячейки с названиями дней недели&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .empty_cell&lt;/b&gt; — пустые ячейки (которые соответствуют дням недели предыдущего или следующего месяца)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .cell&lt;/b&gt; — ячейки с датами&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .cell_X&lt;/b&gt;, где X цифра от 0 до 6 — ячейки, приходящиеся на соответствующий день недели (.cell_0 — воскресенье, .cell_1 — понедельник и т.д.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .cell_future&lt;/b&gt; — ячейки, относящиеся к датам в будущем&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.iacalendar .cell_long_ago&lt;/b&gt; — ячейки, относящиеся к датам ранее даты первого сообщения в блоге.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Эти стили лучше вписывать в таблицу стилей в head-области &lt;a href='http://izhurnal.blogspot.com/2010/09/blogspot.html'&gt;шаблона блога&lt;/a&gt;, а не в таблицу стилей внутри виджета, поскольку если вы обновите календарь, настройки в таблице стилей виджета заменятся на стандартные. Чтобы ваши настройки стилей имели больший приоритет, чем стандартные стили виджета, указывайте их с ключевым словом &lt;code&gt;!important&lt;/code&gt;. &lt;!--Несколько примеров переопределения стилей:--&gt;&lt;/p&gt;
&lt;!--
&lt;p&gt;Задание ширины виджета и выравнивание по правому краю (указание ширины необходимо для автовыравнивания, ширина таблицы с ячейками при этом не меняется) :&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;.iacalendar { margin-left: auto; width: 300px; } &lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Выравнивание по центру:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;.iacalendar { margin-left: auto; margin-right: auto; width: 300px; } &lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Указание фиксированного размера виджета и таблицы в нём:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;.iacalendar table { width: 100%; }
.iacalendar { width: 320px; }&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Серый текст в названиях дней недели:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;.iacalendar .wday_cell { background-color: #888 !important; }&lt;/pre&gt;&lt;/blockquote&gt;--&gt;

&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Update 29.10.2010.&lt;/b&gt; 1. Исправлена проблема с отображением апострофа во всплывающих подсказках. 2. Заголовки сообщений во всплывающих подсказках теперь также показываются и для дней, в которые было более одного сообщения. 3. Добавлена возможность задавать общий цвет фона в дополнение к цвету фона ячеек. 4. Добавлена возможность задавать ширину и выравнивание. &lt;/p&gt;

&lt;hr&gt;

&lt;style type='text/css'&gt;
.iacalendar .copyright { display: none; }
//.iacalendar { margin-left: auto; margin-right: auto; width: 320px; } 
&lt;/style&gt;

&lt;p&gt;&lt;b&gt;Предпросмотр календаря:&lt;/b&gt;&lt;br/&gt;
&lt;small&gt;(Примечание: когда адрес блога в настройках не указан, ссылки в предпросмотре ведут на данный блог. Но при установке виджета на ваш блог, ссылки будут браться из вашего архива.)&lt;/small&gt;&lt;/p&gt;


&lt;!--[widget]--&gt;


&lt;style type='text/css'&gt;



.iacalendar .cell {

 background-color: transparent;

 text-align: right;
 color: black;

}


.iacalendar .wday_cell {

 text-align: right;
}




.iacalendar .empty_cell {

 background-color: transparent;

}



.iacalendar .cell_0 {

 color: red;

}



.iacalendar .cell a {

 color: inherit;
 text-decoration:underline;

}


.iacalendar .month_year_cell a {
 color: inherit;
 text-decoration:none;
}

.iacalendar .cell_future {
 color: gray;

}

.iacalendar .cell_future.cell_0 {
 color: #f88;

}


.iacalendar .cell_long_ago {
 color: gray;

}

.iacalendar .cell_long_ago.cell_0 {
 color: #f88;

}


.iacalendar .copyright:hover div { display: block; border: 1px solid gray; padding: 4px; background-color: white;} 
.iacalendar .copyright { padding-left: 5px; }
.iacalendar .copyright .copyright2 { display: none; position: absolute; } 
/*
.iacalendar table {
 width: 100%;
}
.iacalendar {
 margin-left: auto;
 margin-right: auto;
 width: 320px;
}

*/


&lt;/style&gt;


&lt;div class='iacalendar'&gt;

 &lt;noscript&gt;

  Для отображения содержимого виджета необходима поддержка JavaScript.

 &lt;/noscript&gt;

&lt;script type='text/javascript'&gt;


function iaBloggerArchiveCalendar() {

/* --- */



var siteUrl;
var noSite;

var lang;

var weekstart_monday;

var wday_names;

var month_names;

var s_messages;
var header_type;
var long_ago_year;
var long_ago_month;
var long_ago_day;
var cellbgcolor;
var tablebgcolor;
var widgetwidth;
var widgetalign;

/* --- */

function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
    
    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }
    
    var str = '';
    for (var i = 0; i &lt; length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var myid = randomString(10);
var mydivid = 'iaBACalData' + myid;
document.write('&lt;div id="'+mydivid+'"&gt;&lt;/div&gt;');


var long_ago;

var l = location.href;
var thisSite = /^http:\/\/([a-zA-Z0-9.:-]+\/?)/.exec(l)
if (thisSite)
 thisSite = 'http://' + thisSite[1];
if (thisSite &amp;&amp; thisSite[thisSite.length-1] != '/')
 thisSite = thisSite + '/';

function is_in(item, array) {

 for (k in array) {

  if (typeof array[k] == "function") continue;

  if (array[k] == item) return true;

 }

 return false;

}


function setParams(params, noUpdate) {

 if (params) for (var key in params) {
  if (typeof params[key] == "function") continue;
  if (key == 'siteUrl' &amp;&amp; params[key] != siteUrl) {
   itemsCache = [];
  }
  eval(key + '=params[key]');
 }

 if (typeof long_ago_year == 'string')
  long_ago_year = parseInt(long_ago_year, 10);
 if (long_ago_year) {
  if (!long_ago_month)
   long_ago_month = 1;
  if (!long_ago_day)
   long_ago_day = 1;
  if (typeof long_ago_month == 'string')
   long_ago_month = parseInt(long_ago_month, 10);
  if (typeof long_ago_day == 'string')
   long_ago_day = parseInt(long_ago_day, 10);
  long_ago = new Date(long_ago_year, long_ago_month - 1, long_ago_day);
 }




 var default_localization_all = {
  'wday_names': ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
  'month_names': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  's_messages': 'Posts: ',
  'weekstart_monday': 0
 }
 var default_localization_lang = default_localization_all;

 if (!lang &amp;&amp; document.getElementsByClassName) {
  var e = document.getElementsByClassName('post');
  if (e.length &amp;&amp; /оммент|ссылк|оиск|рлык/.test(e[0].innerHTML)) {
   lang = 'ru';
  }
 }

 if (!lang &amp;&amp; navigator) {
  if (navigator.userLanguage) {
   lang = navigator.userLanguage;
  } else if (navigator.systemLanguage) {
   lang = navigator.userLanguage;
  } else if (navigator.browserLanguage) {
   lang = navigator.browserLanguage;
  } else if (navigator.language) {
   lang = navigator.language;
  }
 }
 if (!lang) {
  lang = 'en';
 }

 if (lang.split('-')[0] == 'ru') {
  default_localization_lang = {
   'wday_names': 'Вс Пн Вт Ср Чт Пт Сб',
   'month_names': 'Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь',
   's_messages': 'Сообщений: ',
   'weekstart_monday': 1
  }
 }

 if (lang != 'custom') for (var key in default_localization_all) {
  if (typeof default_localization_all[key] == "function") continue;
  eval(key + '=default_localization_lang[key] || default_localization_all[key]');
 }
 if (typeof weekstart_monday == 'string') {
  weekstart_monday = parseInt(weekstart_monday, 10);
 }

 if (typeof wday_names == 'string') {
  wday_names = wday_names.split(/[\s,;]+/);
 }

 if (typeof month_names == 'string') {
  month_names = month_names.split(/[\s,;]+/);
 }

 if (!siteUrl)
  siteUrl = thisSite;

 if (siteUrl &amp;&amp; siteUrl[siteUrl.length-1] != '/')
  siteUrl = siteUrl + '/';

 if (!noUpdate &amp;&amp; first_date) {
  updateCalendar(first_date);
 }
}

if (window.iaBACal_Options) {
 setParams(window.iaBACal_Options, true);
} else {
 setParams([], true);
}

this.setParams = setParams;

var time_zone;


function sunday_based_wday(wday) {

 if (weekstart_monday) {

  wday = wday + 1

 }

 return wday % 7

}

function get_wday_name(wday) {

 return wday_names[sunday_based_wday(wday)]  || '';

}


function isInFuture(year, month, date) {
 var now = new Date;
 var d = year.getTime ? year : new Date(year, month, date);
 return now.getTime() &lt; d.getTime();
}

function isLongAgo(year, month, date) {
 var d = year.getTime ? year : new Date(year, month, date);
 return long_ago &amp;&amp; d.getTime() &lt; long_ago.getTime();
}



function futureAndPastClassName(year, month, date) {
 return (isInFuture(year, month, date)) ? " cell_future" : (isLongAgo(year, month, date)) ? " cell_long_ago" : "";
}

function cellStyle() {
 if (cellbgcolor) {
  return ' style="background-color:'+cellbgcolor+'" '
 }
 return "";
}

function tableStyle() {
 var s = '';
 if (widgetwidth &amp;&amp; widgetwidth != 'auto')
  s += 'width:100%;';
 if (tablebgcolor)
  s += 'background-color:' + tablebgcolor + ';'
 if (s)
  return ' style="' + s + '" '
 return "";
}

function makeCalendarTable(first_date, last_date, links) {



 var first_wday = first_date.getDay();

 if (weekstart_monday) {

  first_wday = (first_wday + 6) % 7

 }


 var year = first_date.getFullYear();
 var month = first_date.getMonth();


 var output = ''


 var month_name = month_names[month] || '';


 output += "&lt;table class='calendar_table' "+tableStyle()+"&gt;"



 output += "&lt;tr&gt;&lt;td colspan='7' style='text-align:center' class='month_year_cell' &gt;";
 if (header_type == 1) {
  output += "&lt;a onclick='iaBACal_changeYear"+myid+"(-1)' href='javascript:void(0)' title='"+(year-1)+"'&gt;&amp;lt;&amp;lt;&lt;/a&gt;";
  output += " ";
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(-1)' href='javascript:void(0)' title='"+month_names[(month + 11)%12]+"'&gt;&amp;lt;&lt;/a&gt;";
  output += month_name;
  output += " ";
  output += year;
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(1)' href='javascript:void(0)' title='"+month_names[(month + 1)%12]+"'&gt;&amp;gt;&lt;/a&gt;";
  output += " ";
  output += "&lt;a onclick='iaBACal_changeYear"+myid+"(1)' href='javascript:void(0)' title='"+(year+1)+"'&gt;&amp;gt;&amp;gt;&lt;/a&gt;";
 } else if (header_type == 2) {
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(-1)' href='javascript:void(0)' title='"+month_names[(month + 11)%12]+"'&gt;&amp;lt;&lt;/a&gt;";
  output += month_name;
  output += " ";
  output += year;
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(1)' href='javascript:void(0)' title='"+month_names[(month + 1)%12]+"'&gt;&amp;gt;&lt;/a&gt;";
 } else {
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(-1)' href='javascript:void(0)' title='"+month_names[(month + 11)%12]+"'&gt;&amp;lt;&lt;/a&gt;"
  output += month_name;
  output += "&lt;a onclick='iaBACal_changeMonth"+myid+"(1)' href='javascript:void(0)' title='"+month_names[(month + 1)%12]+"'&gt;&amp;gt;&lt;/a&gt;"
  output += " ";
  output += "&lt;a onclick='iaBACal_changeYear"+myid+"(-1)' href='javascript:void(0)' title='"+(year-1)+"'&gt;&amp;lt;&lt;/a&gt;"
  output += year;
  output += "&lt;a onclick='iaBACal_changeYear"+myid+"(1)' href='javascript:void(0)' title='"+(year+1)+"'&gt;&amp;gt;&lt;/a&gt;"

 }
 output += "&lt;/td&gt;&lt;/tr&gt;"



 output += "&lt;tr&gt;"

 for (var i = 0; i &lt; 7; i++) {

  output += "&lt;td class='wday_cell cell_" + sunday_based_wday(i) + "'&gt;" + get_wday_name(i)  + "&lt;/td&gt;";

 }

 output += "&lt;/tr&gt;&lt;tr&gt;"

 for (var i = 0; i &lt; first_wday; i++) {

  output += "&lt;td class='empty_cell cell_" + sunday_based_wday(i) + futureAndPastClassName(year, month, -first_wday+i) + "'&gt;&lt;/td&gt;";

 }

 for (var day = 1, wday = first_wday; day &lt;= last_date.getDate(); day++) {

  wday = wday % 7;

  if (wday == 0 &amp;&amp; day &gt; 1) {

   output += "&lt;tr&gt;"

  }

  var a_href = undefined;

  var a_title = undefined;

  if (links &amp;&amp; links[day] &amp;&amp; links[day].length) {

   if (links[day].length == 1) {

    a_href = links[day][0].href;

    a_title = links[day][0].title;

   } else {
    var title_parts = [];

    var date_date = day;

    if (date_date &lt; 10) date_date = '0' + date_date.toString();

    var date_month = first_date.getMonth() + 1;

    if (date_month &lt; 10) date_month = '0' + date_month.toString();

    a_href = siteUrl + 'search' +

     //'?published-min='+first_date.getFullYear()+'-'+date_month+'-'+date_date+'T00:00:00+00:00' +

     '?updated-max='+first_date.getFullYear()+'-'+date_month+'-'+date_date+'T23%3A59%3A59%2B' + time_zone +

     '&amp;max-results='+links[day].length ;
    a_title = '';
    a_title += s_messages + links[day].length// + '. ';
    /*for (var i = 0; i &lt; links[day].length; i++) {
     if (i != 0)
      a_title += ", ";
     a_title += "«" + links[day][i].title + "»";
    }*/
    title_parts.push(a_title);
    for (var i = 0; i &lt; links[day].length; i++) {
     title_parts.push(links[day][i].title || 'untitled');
    }
    a_title = title_parts.join(' | ');

   }

  }

  output += "&lt;td class='cell cell_" + sunday_based_wday(wday) + futureAndPastClassName(year, month, day) + "'"+cellStyle()+"&gt;"

  if (a_href)

   output += "&lt;a href='"+a_href+"' title='"+a_title.replace(new RegExp("'", 'g'), '&amp;#39;')+"'&gt;"

  output += day;

  if (a_href)

   output += "&lt;/a&gt;"

  output += "&lt;/td&gt;";

  if (wday == 6) {

   output += "&lt;/tr&gt;"

  }

  wday = wday + 1;

 }

 for (var i = wday; i &lt; 7; i++, day++) {

  output += "&lt;td class='empty_cell cell_" + sunday_based_wday(i) + futureAndPastClassName(year, month, day) + "'&gt;&lt;/td&gt;";

 }

 output += '&lt;/table&gt;'

 return output;

}




var first_date;



function showCalendar(items, base_date) {
 var dates = getFirstAndLastDates(base_date);
 first_date = dates[0];

 var last_date  = dates[1];
 var mydiv = document.getElementById(mydivid);

 mydiv.innerHTML = makeCalendarTable(first_date, last_date, items);

 mydiv.style.width = widgetwidth || 'auto';

 var c;
 if (mydiv.parentNode &amp;&amp; mydiv.parentNode.getElementsByClassName) {
  c = mydiv.parentNode.getElementsByClassName('copyright');
  c = c.length ? c[0] :  undefined;
 }

 if (widgetalign == 'right') {
  mydiv.style.marginLeft = 'auto';
  mydiv.style.marginRight = '0px';
  if (c) {
   c.style.marginLeft = 'auto';
   c.style.marginRight = '0px';
  }
 } else if (widgetalign == 'center') {
  mydiv.style.marginLeft = 'auto';
  mydiv.style.marginRight = 'auto';
  if (c) {
   c.style.marginLeft = 'auto';
   c.style.marginRight = 'auto';
  }
 } else {
  mydiv.style.marginLeft = '0px';
  mydiv.style.marginRight = 'auto';
  if (c) {
   c.style.marginLeft = '0px';
   c.style.marginRight = 'auto';
  }
 }

 if (c) {
  c.style.width = widgetwidth || 'auto';
 }
}


var itemsCache = [];


function receiveReply(json) {

 var base_date;

 for (var k in json.feed.link)
 {
  if (typeof json.feed.link[k] == "function") continue;

  if (json.feed.link[k].rel == "self") {

   var s = json.feed.link[k].href;
   var s = /published-max=([0-9]+)-([0-9]+)-([0-9]+)T/.exec(s);
   if (s) {
    base_date = new Date(parseInt(s[1], 10), parseInt(s[2], 10) - 1, 1)
   }

   break;

  }

 }

 var receivedItems = [];


 for (var k in json.feed.entry) {

  var entry = json.feed.entry[k];

  if (typeof entry == "function") continue;

  var href = "";

  for (var kl in entry.link) {

   if (typeof entry.link[kl] == "function") continue;

   if (entry.link[kl].rel == "alternate") {

    href = entry.link[kl].href;

    break;

   }

  }



  var day = parseInt((entry.published.$t).split('T')[0].split('-')[2], 10);

  time_zone = entry.published.$t.split('+')[1];



  if (typeof receivedItems[day] != "object")

   receivedItems[day] = [];



  if (href != "") {

   var item = { "href" : href, "title" : entry.title.$t};

   receivedItems[day].push(item);

  }

 }


 if (base_date) {
  if (!itemsCache[base_date.getFullYear()])
   itemsCache[base_date.getFullYear()] = [];
  itemsCache[base_date.getFullYear()][base_date.getMonth()] = {
   updated: (new Date()).getTime(),
   items: receivedItems
  }

  showCalendar(receivedItems, base_date);
 }

}


window['iaBACal_receiveReply' + myid] = function (json) {receiveReply(json);}


function sendQueryForDates(query, first_date, last_date) {

 var first_date_date = first_date.getDate();

 if (first_date_date &lt; 10) first_date_date = '0' + first_date_date.toString();

 var first_date_month = first_date.getMonth() + 1;

 if (first_date_month &lt; 10) first_date_month = '0' + first_date_month.toString();



 var last_date_date = last_date.getDate();

 if (last_date_date &lt; 10) last_date_date = '0' + last_date_date.toString();

 var last_date_month = last_date.getMonth() + 1;

 if (last_date_month &lt; 10) last_date_month = '0' + last_date_month.toString();



 var q = query + 'feeds/posts/default/' +

  '?alt=json-in-script&amp;callback=iaBACal_receiveReply' + myid +

  '&amp;published-min='+first_date.getFullYear()+'-'+first_date_month+'-'+first_date_date+'T00:00:00' +

  '&amp;published-max='+last_date.getFullYear()+'-'+last_date_month+'-'+last_date_date+'T23:59:59' +

  '&amp;max-results=500';
 var script = document.createElement('script');

 script.setAttribute('src', q);

 script.setAttribute('type', 'text/javascript');

 document.documentElement.firstChild.appendChild(script);

}


function getFirstAndLastDates(base_date) {
 var first_date;

 var last_date;

 first_date = new Date(base_date.getFullYear(), base_date.getMonth(), 1);

 last_date  = new Date(base_date.getFullYear(), base_date.getMonth(), 1);

 last_date.setDate(last_date.getDate() + 31);

 last_date.setDate(1);

 last_date.setDate(0);
 return [first_date, last_date];
}


function updateCalendar(base_date) {
 var dates = getFirstAndLastDates(base_date);
 first_date = dates[0];

 last_date  = dates[1];

 if (siteUrl &amp;&amp; !noSite &amp;&amp; !isInFuture(first_date) &amp;&amp; !isLongAgo(last_date)) {
  var c;
  if ((c = itemsCache[base_date.getFullYear()]) &amp;&amp; (c = c[base_date.getMonth()]) &amp;&amp; (c.updated + 90000 &gt; (new Date).getTime())) {
   showCalendar(c.items, base_date);
  } else {
   sendQueryForDates(siteUrl, first_date, last_date);
  }
 } else {
  showCalendar([], base_date);
 }
}


var year, month;

if (!noSite) {
 if (siteUrl &amp;&amp; siteUrl == thisSite) {
  var l = location.href;
  var s;
  if ((s = l.split('/search?')) &amp;&amp; (s.length == 2) &amp;&amp; (s = /updated-max=([0-9]+)-([0-9]+)/.exec(s[1]))) {
   year = s[1];
   month = s[2];
  } else if ((s = /\/([0-9]+)\/([0-9]+)\/.*\.html/.exec(l))) {
   year = s[1];
   month = s[2];
  } else if ((s = /\/([0-9]+)_([0-9]+)_([0-9]+)_archive\.html/.exec(l))) {
   year = s[1];
   month = s[2];
  }
 }
}

var base_date1 = new Date;

if (year) {
 if (typeof year == 'string')
  year = parseInt(year, 10);
 if (typeof month == 'string')
  month = parseInt(month, 10);
 base_date1 = new Date(year, month-1, 1);
}


updateCalendar(base_date1);


window['iaBACal_changeMonth' + myid] = function (n) {
 first_date.setMonth(first_date.getMonth() + n);
 updateCalendar(first_date)
}

window['iaBACal_changeYear' + myid] = function (n) {
 first_date.setFullYear(first_date.getFullYear() + n);
 updateCalendar(first_date)
}

}

window.iaBACal_LastCreated = new iaBloggerArchiveCalendar();


&lt;/script&gt;


 &lt;div class='copyright'&gt;
  &lt;small&gt;&lt;a href='http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html'&gt;Calendar Widget&lt;/a&gt;&lt;/small&gt;
  &lt;div class='copyright2'&gt;&lt;small&gt;
   Идея: &lt;a href='http://amateurblogger.ru' title='Блог SEO-дилетанта'&gt;amateurblogger&lt;/a&gt;&lt;br/&gt;
   Реализация: &lt;a href='http://izhurnal.blogspot.com/' title='Интернет-журнал. Всё для блогера.'&gt;izhurnal&lt;/a&gt;&lt;br/&gt;
  &lt;/small&gt;&lt;/div&gt;
 &lt;/div&gt;


&lt;/div&gt;

&lt;!--/[widget]--&gt;



&lt;script type='text/javascript'&gt;
 calendarPreview = window.iaBACal_LastCreated;
&lt;/script&gt;


&lt;style type='text/css'&gt;

.calendar_installer .ctrl_hint {
 font-size: small;
}

&lt;/style&gt;

&lt;p&gt;&lt;b&gt;Настройки:&lt;/b&gt;&lt;/p&gt;


&lt;form&gt;

&lt;table class='calendar_installer'&gt;

&lt;tr&gt;
 &lt;td&gt;Вариант заголовка:&lt;/td&gt;
 &lt;td&gt;
  &lt;select id='ctrl_header_type' onchange='calendarOptionChanged()'&gt;
   &lt;option value='0'&gt;&amp;lt;Месяц&amp;gt; &amp;lt;Год&amp;gt;&lt;/option&gt;
   &lt;option value='1'&gt;&amp;lt;&amp;lt; &amp;lt; Месяц Год &amp;gt; &amp;gt;&amp;gt;&lt;/option&gt;
   &lt;option value='2'&gt;&amp;lt;Месяц Год&amp;gt;&lt;/option&gt;
  &lt;/select&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Выберите оформление заголовка календаря.
 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td&gt;Отображать ссылки:&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_showSite' onchange='calendarOptionChanged()' type='checkbox' checked='1'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Если этот флаг установлен, даты в календаре служат ссылками на сообщения блога, опубликованные в соответствующие дни.
 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td&gt;Адрес блога:&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_siteUrl' onchange='calendarOptionChanged()' type='text' maxlength='50'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Адрес блога, сообщения с которого будут отслеживаться календарём. Если оставить это поле пустым, календарь будет автоматически обращаться к тому блогу, на страницах которого он размещен.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Дата первого сообщения:&lt;/td&gt;
 &lt;td&gt;
  &lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;Год:&lt;/td&gt;
   &lt;td&gt;&lt;input id='ctrl_long_ago_year' onchange='calendarOptionChanged()' type='text' maxlength='4' size='4'&gt;&lt;/td&gt;
  &lt;/tr&gt;&lt;tr&gt;
   &lt;td&gt;Месяц:&lt;/td&gt;
   &lt;td&gt;&lt;input id='ctrl_long_ago_month' onchange='calendarOptionChanged()' type='text' maxlength='2' size='2'&gt;&lt;/td&gt;
  &lt;/tr&gt;&lt;tr&gt;
   &lt;td&gt;Число:&lt;/td&gt;
   &lt;td&gt;&lt;input id='ctrl_long_ago_day' onchange='calendarOptionChanged()' type='text' maxlength='2' size='2'&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;/table&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Укажите дату первого сообщения в вашем блоге. Все более ранние даты в календаре будут написаны серым цветом.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Язык:&lt;/td&gt;
 &lt;td&gt;
  &lt;select id='ctrl_lang' onchange='calendarOptionChanged()'&gt;
   &lt;!--option value=''&gt;Определять автоматически&lt;/option--&gt;
   &lt;option value='ru'&gt;Русский&lt;/option&gt;
   &lt;option value='en'&gt;Английский&lt;/option&gt;
   &lt;option value='custom'&gt;Другой&lt;/option&gt;
  &lt;/select&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Выберите язык календаря. &lt;!--Пункт «Определять автоматически» означает, что календарь будет пытаться автоматически выбрать между русским и английским языком на основании текста в вашем блоге и/или параметров браузера.--&gt; Если вам нужно отобразить календарь на языке отличном от русского или английского, выберите пункт «Другой» и введите названия месяцев и дней недели в появившиеся поля ввода.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_month_names'&gt;
 &lt;td&gt;Названия месяцев:&lt;/td&gt;
 &lt;td&gt;
  &lt;textarea id='ctrl_month_names' onchange='calendarOptionChanged()'&gt;&lt;/textarea&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Введите названия месяцев, начиная с января, разделяя их пробелами или запятыми.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_wday_names'&gt;
 &lt;td&gt;Названия дней:&lt;/td&gt;
 &lt;td&gt;
  &lt;textarea id='ctrl_wday_names' onchange='calendarOptionChanged()'&gt;&lt;/textarea&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Введите названия дней недели с воскресенья по субботу, разделяя их пробелами или запятыми.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_weekstart_monday'&gt;
 &lt;td&gt;Неделя с понедельника:&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_weekstart_monday' onchange='calendarOptionChanged()' type='checkbox' checked='1'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Если флаг отмечен, неделя в календаре начинается с понедельника, если не отмечен, то с воскресенья (как это принято в англоязычных странах).
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_s_messages'&gt;
 &lt;td&gt;Текст для всплывающей подсказки:&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_s_messages' onchange='calendarOptionChanged()' type='text' maxlength='50'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Введите текст, который будет отображаться во всплывающей посказке, показывающей количество сообщений.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Цвет фона ячеек:&lt;/td&gt;
 &lt;td&gt;
  &lt;select id='ctrl_cellbgcolor' onchange='calendarOptionChanged()'&gt;
   &lt;option value=''&gt;Прозрачный (по умолчанию)&lt;/option&gt;
   &lt;option value='#eec'&gt;Песочный&lt;/option&gt;
   &lt;option value='#A6C4F2'&gt;Светло-синий&lt;/option&gt;
   &lt;option value='#C0EEC0'&gt;Салатный&lt;/option&gt;
   &lt;option value='#EEC3C3'&gt;Розовый&lt;/option&gt;
   &lt;option value='#DDD'&gt;Серый&lt;/option&gt;
   &lt;option value='#FFF'&gt;Белый&lt;/option&gt;
   &lt;option value='custom'&gt;Ввести своё значение:&lt;/option&gt;
  &lt;/select&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Цвет фона ячеек календаря. Если ни один из стандартных вариантов вам не подходит, выберите пункт «Своё значение» и введите в появившеся поле ввода другое значение цвета.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_s_cellbgcolor2'&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_cellbgcolor2' onchange='calendarOptionChanged()' type='text' maxlength='10'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Значение цвета должно быть в формате, пригодном для вставки в CSS.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Цвет фона за ячейками:&lt;/td&gt;
 &lt;td&gt;
  &lt;select id='ctrl_tablebgcolor' onchange='calendarOptionChanged()'&gt;
   &lt;option value=''&gt;Прозрачный (по умолчанию)&lt;/option&gt;
   &lt;option value='#eec'&gt;Песочный&lt;/option&gt;
   &lt;option value='#A6C4F2'&gt;Светло-синий&lt;/option&gt;
   &lt;option value='#C0EEC0'&gt;Салатный&lt;/option&gt;
   &lt;option value='#EEC3C3'&gt;Розовый&lt;/option&gt;
   &lt;option value='#DDD'&gt;Серый&lt;/option&gt;
   &lt;option value='#FFF'&gt;Белый&lt;/option&gt;
   &lt;option value='custom'&gt;Ввести своё значение:&lt;/option&gt;
  &lt;/select&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Цвет фона под ячейками календаря.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr id='tr_s_tablebgcolor2'&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_tablebgcolor2' onchange='calendarOptionChanged()' type='text' maxlength='10'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Значение цвета должно быть в формате, пригодном для вставки в CSS.
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Ширина&lt;/td&gt;
 &lt;td&gt;
  &lt;input id='ctrl_widgetwidth' onchange='calendarOptionChanged()' type='text' maxlength='10' value='auto'&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Ширина виджета. Значение в пикселях (например, 300px) или процентах от ширины доступной области (например 50%), либо auto (ширина определяется браузером автоматически).
 &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
 &lt;td&gt;Выравнивание&lt;/td&gt;
 &lt;td&gt;
  &lt;select id='ctrl_widgetalign' onchange='calendarOptionChanged()'&gt;
   &lt;option value=''&gt;Слева (по умолчанию)&lt;/option&gt;
   &lt;option value='right'&gt;Справа&lt;/option&gt;
   &lt;option value='center'&gt;По центру&lt;/option&gt;
  &lt;/select&gt;
 &lt;/td&gt;
 &lt;td class='ctrl_hint'&gt;
  Расположение виджета относительно краёв отведённой для него области. Чтобы использовать выравнивание справа или по центру, необходимо также указать значение ширины виджета, отличное от auto.
 &lt;/td&gt;
&lt;/tr&gt;


&lt;script type='text/javascript'&gt;

var calendar_options = {};
function calendarOptionChanged() {

 calendar_options = {};

 var t;

 t = document.getElementById('ctrl_header_type');
 calendar_options['header_type'] = t.options[t.selectedIndex].value;

 t = document.getElementById('ctrl_showSite');
 calendar_options['noSite'] = !t.checked;

 t = document.getElementById('ctrl_siteUrl');
 calendar_options['siteUrl'] = t.value;
 t.disabled = calendar_options['noSite'];

 t = document.getElementById('ctrl_long_ago_year');
 calendar_options['long_ago_year'] = t.value;

 t = document.getElementById('ctrl_long_ago_month');
 calendar_options['long_ago_month'] = t.value;

 t = document.getElementById('ctrl_long_ago_day');
 calendar_options['long_ago_day'] = t.value;

 t = document.getElementById('ctrl_lang');
 calendar_options['lang'] = t.options[t.selectedIndex].value;

 document.getElementById('tr_month_names').style.visibility =
 document.getElementById('tr_wday_names').style.visibility =
 document.getElementById('tr_s_messages').style.visibility =
 document.getElementById('tr_weekstart_monday').style.visibility = (calendar_options['lang'] == 'custom') ? 'visible' : 'collapse';

 if (calendar_options['lang'] == 'custom') {

  t = document.getElementById('ctrl_month_names');
  calendar_options['month_names'] = t.value;

  t = document.getElementById('ctrl_wday_names');
  calendar_options['wday_names'] = t.value;

  t = document.getElementById('ctrl_s_messages');
  calendar_options['s_messages'] = t.value;

  t = document.getElementById('ctrl_weekstart_monday');
  calendar_options['weekstart_monday'] = t.checked;
  
 }

 t = document.getElementById('ctrl_cellbgcolor');
 calendar_options['cellbgcolor'] = t.options[t.selectedIndex].value;
 document.getElementById('tr_s_cellbgcolor2').style.visibility = (calendar_options['cellbgcolor'] == 'custom') ? 'visible' : 'collapse';
 if (calendar_options['cellbgcolor'] == 'custom') {
  t = document.getElementById('ctrl_cellbgcolor2');
  calendar_options['cellbgcolor'] = t.value;
 }

 t = document.getElementById('ctrl_tablebgcolor');
 calendar_options['tablebgcolor'] = t.options[t.selectedIndex].value;
 document.getElementById('tr_s_tablebgcolor2').style.visibility = (calendar_options['tablebgcolor'] == 'custom') ? 'visible' : 'collapse';
 if (calendar_options['tablebgcolor'] == 'custom') {
  t = document.getElementById('ctrl_tablebgcolor2');
  calendar_options['tablebgcolor'] = t.value;
 }

 t = document.getElementById('ctrl_widgetwidth');
 calendar_options['widgetwidth'] = t.value;

 t = document.getElementById('ctrl_widgetalign');
 calendar_options['widgetalign'] = t.options[t.selectedIndex].value;

 calendarPreview.setParams(calendar_options);

 document.getElementById('postCalendar').style.display = 'block';

 document.getElementById('widget.title').value = 'Календарь';

 var content = '';
 content += '&lt;script type="text/javascript"&gt;' + "\n"
 content += 'window.iaBACal_Options = {'
 var first = true;
 for (var k in calendar_options) {
  if (typeof calendar_options[k] == "function") continue;
  if (!first)
   content += ",\n";
  var v = calendar_options[k];
  if (typeof v == 'boolean') {
   v = v ? 'true' : 'false';
  } else {
   v = '"' + v + '"';
  }
  content += '"' + k + '":' + v;
  first = false;
 }
 content += '};' + "\n"
 content += '&lt;/scr'+'ipt&gt;'
 content += calendarTemplate;
 document.getElementById('widget.content').value = content;

 return true;
}

&lt;/script&gt;

&lt;/table&gt;

 &lt;input type="hidden" id="orig.widget.content" value="&amp;lt;!--[widget]--&amp;gt;


&amp;lt;style type=&amp;#39;text/css&amp;#39;&amp;gt;



.iacalendar .cell {

 background-color: transparent;

 text-align: right;
 color: black;

}


.iacalendar .wday_cell {

 text-align: right;
}




.iacalendar .empty_cell {

 background-color: transparent;

}



.iacalendar .cell_0 {

 color: red;

}



.iacalendar .cell a {

 color: inherit;
 text-decoration:underline;

}


.iacalendar .month_year_cell a {
 color: inherit;
 text-decoration:none;
}

.iacalendar .cell_future {
 color: gray;

}

.iacalendar .cell_future.cell_0 {
 color: #f88;

}


.iacalendar .cell_long_ago {
 color: gray;

}

.iacalendar .cell_long_ago.cell_0 {
 color: #f88;

}


.iacalendar .copyright:hover div { display: block; border: 1px solid gray; padding: 4px; background-color: white;} 
.iacalendar .copyright { padding-left: 5px; }
.iacalendar .copyright .copyright2 { display: none; position: absolute; } 
/*
.iacalendar table {
 width: 100%;
}
.iacalendar {
 margin-left: auto;
 margin-right: auto;
 width: 320px;
}

*/


&amp;lt;/style&amp;gt;


&amp;lt;div class=&amp;#39;iacalendar&amp;#39;&amp;gt;

 &amp;lt;noscript&amp;gt;

  Для отображения содержимого виджета необходима поддержка JavaScript.

 &amp;lt;/noscript&amp;gt;

&amp;lt;script type=&amp;#39;text/javascript&amp;#39;&amp;gt;


function iaBloggerArchiveCalendar() {

/* --- */



var siteUrl;
var noSite;

var lang;

var weekstart_monday;

var wday_names;

var month_names;

var s_messages;
var header_type;
var long_ago_year;
var long_ago_month;
var long_ago_day;
var cellbgcolor;
var tablebgcolor;
var widgetwidth;
var widgetalign;

/* --- */

function randomString(length) {
    var chars = &amp;#39;0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz&amp;#39;.split(&amp;#39;&amp;#39;);
    
    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }
    
    var str = &amp;#39;&amp;#39;;
    for (var i = 0; i &amp;lt; length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var myid = randomString(10);
var mydivid = &amp;#39;iaBACalData&amp;#39; + myid;
document.write(&amp;#39;&amp;lt;div id=&amp;quot;&amp;#39;+mydivid+&amp;#39;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;);


var long_ago;

var l = location.href;
var thisSite = /^http:\/\/([a-zA-Z0-9.:-]+\/?)/.exec(l)
if (thisSite)
 thisSite = &amp;#39;http://&amp;#39; + thisSite[1];
if (thisSite &amp;amp;&amp;amp; thisSite[thisSite.length-1] != &amp;#39;/&amp;#39;)
 thisSite = thisSite + &amp;#39;/&amp;#39;;

function is_in(item, array) {

 for (k in array) {

  if (typeof array[k] == &amp;quot;function&amp;quot;) continue;

  if (array[k] == item) return true;

 }

 return false;

}


function setParams(params, noUpdate) {

 if (params) for (var key in params) {
  if (typeof params[key] == &amp;quot;function&amp;quot;) continue;
  if (key == &amp;#39;siteUrl&amp;#39; &amp;amp;&amp;amp; params[key] != siteUrl) {
   itemsCache = [];
  }
  eval(key + &amp;#39;=params[key]&amp;#39;);
 }

 if (typeof long_ago_year == &amp;#39;string&amp;#39;)
  long_ago_year = parseInt(long_ago_year, 10);
 if (long_ago_year) {
  if (!long_ago_month)
   long_ago_month = 1;
  if (!long_ago_day)
   long_ago_day = 1;
  if (typeof long_ago_month == &amp;#39;string&amp;#39;)
   long_ago_month = parseInt(long_ago_month, 10);
  if (typeof long_ago_day == &amp;#39;string&amp;#39;)
   long_ago_day = parseInt(long_ago_day, 10);
  long_ago = new Date(long_ago_year, long_ago_month - 1, long_ago_day);
 }




 var default_localization_all = {
  &amp;#39;wday_names&amp;#39;: [&amp;#39;Su&amp;#39;, &amp;#39;Mo&amp;#39;, &amp;#39;Tu&amp;#39;, &amp;#39;We&amp;#39;, &amp;#39;Th&amp;#39;, &amp;#39;Fr&amp;#39;, &amp;#39;Sa&amp;#39;],
  &amp;#39;month_names&amp;#39;: [&amp;#39;January&amp;#39;, &amp;#39;February&amp;#39;, &amp;#39;March&amp;#39;, &amp;#39;April&amp;#39;, &amp;#39;May&amp;#39;, &amp;#39;June&amp;#39;, &amp;#39;July&amp;#39;, &amp;#39;August&amp;#39;, &amp;#39;September&amp;#39;, &amp;#39;October&amp;#39;, &amp;#39;November&amp;#39;, &amp;#39;December&amp;#39;],
  &amp;#39;s_messages&amp;#39;: &amp;#39;Posts: &amp;#39;,
  &amp;#39;weekstart_monday&amp;#39;: 0
 }
 var default_localization_lang = default_localization_all;

 if (!lang &amp;amp;&amp;amp; document.getElementsByClassName) {
  var e = document.getElementsByClassName(&amp;#39;post&amp;#39;);
  if (e.length &amp;amp;&amp;amp; /оммент|ссылк|оиск|рлык/.test(e[0].innerHTML)) {
   lang = &amp;#39;ru&amp;#39;;
  }
 }

 if (!lang &amp;amp;&amp;amp; navigator) {
  if (navigator.userLanguage) {
   lang = navigator.userLanguage;
  } else if (navigator.systemLanguage) {
   lang = navigator.userLanguage;
  } else if (navigator.browserLanguage) {
   lang = navigator.browserLanguage;
  } else if (navigator.language) {
   lang = navigator.language;
  }
 }
 if (!lang) {
  lang = &amp;#39;en&amp;#39;;
 }

 if (lang.split(&amp;#39;-&amp;#39;)[0] == &amp;#39;ru&amp;#39;) {
  default_localization_lang = {
   &amp;#39;wday_names&amp;#39;: &amp;#39;Вс Пн Вт Ср Чт Пт Сб&amp;#39;,
   &amp;#39;month_names&amp;#39;: &amp;#39;Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь&amp;#39;,
   &amp;#39;s_messages&amp;#39;: &amp;#39;Сообщений: &amp;#39;,
   &amp;#39;weekstart_monday&amp;#39;: 1
  }
 }

 if (lang != &amp;#39;custom&amp;#39;) for (var key in default_localization_all) {
  if (typeof default_localization_all[key] == &amp;quot;function&amp;quot;) continue;
  eval(key + &amp;#39;=default_localization_lang[key] || default_localization_all[key]&amp;#39;);
 }
 if (typeof weekstart_monday == &amp;#39;string&amp;#39;) {
  weekstart_monday = parseInt(weekstart_monday, 10);
 }

 if (typeof wday_names == &amp;#39;string&amp;#39;) {
  wday_names = wday_names.split(/[\s,;]+/);
 }

 if (typeof month_names == &amp;#39;string&amp;#39;) {
  month_names = month_names.split(/[\s,;]+/);
 }

 if (!siteUrl)
  siteUrl = thisSite;

 if (siteUrl &amp;amp;&amp;amp; siteUrl[siteUrl.length-1] != &amp;#39;/&amp;#39;)
  siteUrl = siteUrl + &amp;#39;/&amp;#39;;

 if (!noUpdate &amp;amp;&amp;amp; first_date) {
  updateCalendar(first_date);
 }
}

if (window.iaBACal_Options) {
 setParams(window.iaBACal_Options, true);
} else {
 setParams([], true);
}

this.setParams = setParams;

var time_zone;


function sunday_based_wday(wday) {

 if (weekstart_monday) {

  wday = wday + 1

 }

 return wday % 7

}

function get_wday_name(wday) {

 return wday_names[sunday_based_wday(wday)]  || &amp;#39;&amp;#39;;

}


function isInFuture(year, month, date) {
 var now = new Date;
 var d = year.getTime ? year : new Date(year, month, date);
 return now.getTime() &amp;lt; d.getTime();
}

function isLongAgo(year, month, date) {
 var d = year.getTime ? year : new Date(year, month, date);
 return long_ago &amp;amp;&amp;amp; d.getTime() &amp;lt; long_ago.getTime();
}



function futureAndPastClassName(year, month, date) {
 return (isInFuture(year, month, date)) ? &amp;quot; cell_future&amp;quot; : (isLongAgo(year, month, date)) ? &amp;quot; cell_long_ago&amp;quot; : &amp;quot;&amp;quot;;
}

function cellStyle() {
 if (cellbgcolor) {
  return &amp;#39; style=&amp;quot;background-color:&amp;#39;+cellbgcolor+&amp;#39;&amp;quot; &amp;#39;
 }
 return &amp;quot;&amp;quot;;
}

function tableStyle() {
 var s = &amp;#39;&amp;#39;;
 if (widgetwidth &amp;amp;&amp;amp; widgetwidth != &amp;#39;auto&amp;#39;)
  s += &amp;#39;width:100%;&amp;#39;;
 if (tablebgcolor)
  s += &amp;#39;background-color:&amp;#39; + tablebgcolor + &amp;#39;;&amp;#39;
 if (s)
  return &amp;#39; style=&amp;quot;&amp;#39; + s + &amp;#39;&amp;quot; &amp;#39;
 return &amp;quot;&amp;quot;;
}

function makeCalendarTable(first_date, last_date, links) {



 var first_wday = first_date.getDay();

 if (weekstart_monday) {

  first_wday = (first_wday + 6) % 7

 }


 var year = first_date.getFullYear();
 var month = first_date.getMonth();


 var output = &amp;#39;&amp;#39;


 var month_name = month_names[month] || &amp;#39;&amp;#39;;


 output += &amp;quot;&amp;lt;table class=&amp;#39;calendar_table&amp;#39; &amp;quot;+tableStyle()+&amp;quot;&amp;gt;&amp;quot;



 output += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;#39;7&amp;#39; style=&amp;#39;text-align:center&amp;#39; class=&amp;#39;month_year_cell&amp;#39; &amp;gt;&amp;quot;;
 if (header_type == 1) {
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeYear&amp;quot;+myid+&amp;quot;(-1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+(year-1)+&amp;quot;&amp;#39;&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;quot;;
  output += &amp;quot; &amp;quot;;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(-1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 11)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;quot;;
  output += month_name;
  output += &amp;quot; &amp;quot;;
  output += year;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 1)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;quot;;
  output += &amp;quot; &amp;quot;;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeYear&amp;quot;+myid+&amp;quot;(1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+(year+1)+&amp;quot;&amp;#39;&amp;gt;&amp;amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;quot;;
 } else if (header_type == 2) {
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(-1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 11)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;quot;;
  output += month_name;
  output += &amp;quot; &amp;quot;;
  output += year;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 1)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;quot;;
 } else {
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(-1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 11)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;quot;
  output += month_name;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeMonth&amp;quot;+myid+&amp;quot;(1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+month_names[(month + 1)%12]+&amp;quot;&amp;#39;&amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;quot;
  output += &amp;quot; &amp;quot;;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeYear&amp;quot;+myid+&amp;quot;(-1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+(year-1)+&amp;quot;&amp;#39;&amp;gt;&amp;amp;lt;&amp;lt;/a&amp;gt;&amp;quot;
  output += year;
  output += &amp;quot;&amp;lt;a onclick=&amp;#39;iaBACal_changeYear&amp;quot;+myid+&amp;quot;(1)&amp;#39; href=&amp;#39;javascript:void(0)&amp;#39; title=&amp;#39;&amp;quot;+(year+1)+&amp;quot;&amp;#39;&amp;gt;&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;quot;

 }
 output += &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;



 output += &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;

 for (var i = 0; i &amp;lt; 7; i++) {

  output += &amp;quot;&amp;lt;td class=&amp;#39;wday_cell cell_&amp;quot; + sunday_based_wday(i) + &amp;quot;&amp;#39;&amp;gt;&amp;quot; + get_wday_name(i)  + &amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;

 }

 output += &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;

 for (var i = 0; i &amp;lt; first_wday; i++) {

  output += &amp;quot;&amp;lt;td class=&amp;#39;empty_cell cell_&amp;quot; + sunday_based_wday(i) + futureAndPastClassName(year, month, -first_wday+i) + &amp;quot;&amp;#39;&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;

 }

 for (var day = 1, wday = first_wday; day &amp;lt;= last_date.getDate(); day++) {

  wday = wday % 7;

  if (wday == 0 &amp;amp;&amp;amp; day &amp;gt; 1) {

   output += &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;

  }

  var a_href = undefined;

  var a_title = undefined;

  if (links &amp;amp;&amp;amp; links[day] &amp;amp;&amp;amp; links[day].length) {

   if (links[day].length == 1) {

    a_href = links[day][0].href;

    a_title = links[day][0].title;

   } else {
    var title_parts = [];

    var date_date = day;

    if (date_date &amp;lt; 10) date_date = &amp;#39;0&amp;#39; + date_date.toString();

    var date_month = first_date.getMonth() + 1;

    if (date_month &amp;lt; 10) date_month = &amp;#39;0&amp;#39; + date_month.toString();

    a_href = siteUrl + &amp;#39;search&amp;#39; +

     //&amp;#39;?published-min=&amp;#39;+first_date.getFullYear()+&amp;#39;-&amp;#39;+date_month+&amp;#39;-&amp;#39;+date_date+&amp;#39;T00:00:00+00:00&amp;#39; +

     &amp;#39;?updated-max=&amp;#39;+first_date.getFullYear()+&amp;#39;-&amp;#39;+date_month+&amp;#39;-&amp;#39;+date_date+&amp;#39;T23%3A59%3A59%2B&amp;#39; + time_zone +

     &amp;#39;&amp;amp;max-results=&amp;#39;+links[day].length ;
    a_title = &amp;#39;&amp;#39;;
    a_title += s_messages + links[day].length// + &amp;#39;. &amp;#39;;
    /*for (var i = 0; i &amp;lt; links[day].length; i++) {
     if (i != 0)
      a_title += &amp;quot;, &amp;quot;;
     a_title += &amp;quot;«&amp;quot; + links[day][i].title + &amp;quot;»&amp;quot;;
    }*/
    title_parts.push(a_title);
    for (var i = 0; i &amp;lt; links[day].length; i++) {
     title_parts.push(links[day][i].title || &amp;#39;untitled&amp;#39;);
    }
    a_title = title_parts.join(&amp;#39; | &amp;#39;);

   }

  }

  output += &amp;quot;&amp;lt;td class=&amp;#39;cell cell_&amp;quot; + sunday_based_wday(wday) + futureAndPastClassName(year, month, day) + &amp;quot;&amp;#39;&amp;quot;+cellStyle()+&amp;quot;&amp;gt;&amp;quot;

  if (a_href)

   output += &amp;quot;&amp;lt;a href=&amp;#39;&amp;quot;+a_href+&amp;quot;&amp;#39; title=&amp;#39;&amp;quot;+a_title.replace(new RegExp(&amp;quot;&amp;#39;&amp;quot;, &amp;#39;g&amp;#39;), &amp;#39;&amp;amp;#39;&amp;#39;)+&amp;quot;&amp;#39;&amp;gt;&amp;quot;

  output += day;

  if (a_href)

   output += &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;

  output += &amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;

  if (wday == 6) {

   output += &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;

  }

  wday = wday + 1;

 }

 for (var i = wday; i &amp;lt; 7; i++, day++) {

  output += &amp;quot;&amp;lt;td class=&amp;#39;empty_cell cell_&amp;quot; + sunday_based_wday(i) + futureAndPastClassName(year, month, day) + &amp;quot;&amp;#39;&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;

 }

 output += &amp;#39;&amp;lt;/table&amp;gt;&amp;#39;

 return output;

}




var first_date;



function showCalendar(items, base_date) {
 var dates = getFirstAndLastDates(base_date);
 first_date = dates[0];

 var last_date  = dates[1];
 var mydiv = document.getElementById(mydivid);

 mydiv.innerHTML = makeCalendarTable(first_date, last_date, items);

 mydiv.style.width = widgetwidth || &amp;#39;auto&amp;#39;;

 var c;
 if (mydiv.parentNode &amp;amp;&amp;amp; mydiv.parentNode.getElementsByClassName) {
  c = mydiv.parentNode.getElementsByClassName(&amp;#39;copyright&amp;#39;);
  c = c.length ? c[0] :  undefined;
 }

 if (widgetalign == &amp;#39;right&amp;#39;) {
  mydiv.style.marginLeft = &amp;#39;auto&amp;#39;;
  mydiv.style.marginRight = &amp;#39;0px&amp;#39;;
  if (c) {
   c.style.marginLeft = &amp;#39;auto&amp;#39;;
   c.style.marginRight = &amp;#39;0px&amp;#39;;
  }
 } else if (widgetalign == &amp;#39;center&amp;#39;) {
  mydiv.style.marginLeft = &amp;#39;auto&amp;#39;;
  mydiv.style.marginRight = &amp;#39;auto&amp;#39;;
  if (c) {
   c.style.marginLeft = &amp;#39;auto&amp;#39;;
   c.style.marginRight = &amp;#39;auto&amp;#39;;
  }
 } else {
  mydiv.style.marginLeft = &amp;#39;0px&amp;#39;;
  mydiv.style.marginRight = &amp;#39;auto&amp;#39;;
  if (c) {
   c.style.marginLeft = &amp;#39;0px&amp;#39;;
   c.style.marginRight = &amp;#39;auto&amp;#39;;
  }
 }

 if (c) {
  c.style.width = widgetwidth || &amp;#39;auto&amp;#39;;
 }
}


var itemsCache = [];


function receiveReply(json) {

 var base_date;

 for (var k in json.feed.link)
 {
  if (typeof json.feed.link[k] == &amp;quot;function&amp;quot;) continue;

  if (json.feed.link[k].rel == &amp;quot;self&amp;quot;) {

   var s = json.feed.link[k].href;
   var s = /published-max=([0-9]+)-([0-9]+)-([0-9]+)T/.exec(s);
   if (s) {
    base_date = new Date(parseInt(s[1], 10), parseInt(s[2], 10) - 1, 1)
   }

   break;

  }

 }

 var receivedItems = [];


 for (var k in json.feed.entry) {

  var entry = json.feed.entry[k];

  if (typeof entry == &amp;quot;function&amp;quot;) continue;

  var href = &amp;quot;&amp;quot;;

  for (var kl in entry.link) {

   if (typeof entry.link[kl] == &amp;quot;function&amp;quot;) continue;

   if (entry.link[kl].rel == &amp;quot;alternate&amp;quot;) {

    href = entry.link[kl].href;

    break;

   }

  }



  var day = parseInt((entry.published.$t).split(&amp;#39;T&amp;#39;)[0].split(&amp;#39;-&amp;#39;)[2], 10);

  time_zone = entry.published.$t.split(&amp;#39;+&amp;#39;)[1];



  if (typeof receivedItems[day] != &amp;quot;object&amp;quot;)

   receivedItems[day] = [];



  if (href != &amp;quot;&amp;quot;) {

   var item = { &amp;quot;href&amp;quot; : href, &amp;quot;title&amp;quot; : entry.title.$t};

   receivedItems[day].push(item);

  }

 }


 if (base_date) {
  if (!itemsCache[base_date.getFullYear()])
   itemsCache[base_date.getFullYear()] = [];
  itemsCache[base_date.getFullYear()][base_date.getMonth()] = {
   updated: (new Date()).getTime(),
   items: receivedItems
  }

  showCalendar(receivedItems, base_date);
 }

}


window[&amp;#39;iaBACal_receiveReply&amp;#39; + myid] = function (json) {receiveReply(json);}


function sendQueryForDates(query, first_date, last_date) {

 var first_date_date = first_date.getDate();

 if (first_date_date &amp;lt; 10) first_date_date = &amp;#39;0&amp;#39; + first_date_date.toString();

 var first_date_month = first_date.getMonth() + 1;

 if (first_date_month &amp;lt; 10) first_date_month = &amp;#39;0&amp;#39; + first_date_month.toString();



 var last_date_date = last_date.getDate();

 if (last_date_date &amp;lt; 10) last_date_date = &amp;#39;0&amp;#39; + last_date_date.toString();

 var last_date_month = last_date.getMonth() + 1;

 if (last_date_month &amp;lt; 10) last_date_month = &amp;#39;0&amp;#39; + last_date_month.toString();



 var q = query + &amp;#39;feeds/posts/default/&amp;#39; +

  &amp;#39;?alt=json-in-script&amp;amp;callback=iaBACal_receiveReply&amp;#39; + myid +

  &amp;#39;&amp;amp;published-min=&amp;#39;+first_date.getFullYear()+&amp;#39;-&amp;#39;+first_date_month+&amp;#39;-&amp;#39;+first_date_date+&amp;#39;T00:00:00&amp;#39; +

  &amp;#39;&amp;amp;published-max=&amp;#39;+last_date.getFullYear()+&amp;#39;-&amp;#39;+last_date_month+&amp;#39;-&amp;#39;+last_date_date+&amp;#39;T23:59:59&amp;#39; +

  &amp;#39;&amp;amp;max-results=500&amp;#39;;
 var script = document.createElement(&amp;#39;script&amp;#39;);

 script.setAttribute(&amp;#39;src&amp;#39;, q);

 script.setAttribute(&amp;#39;type&amp;#39;, &amp;#39;text/javascript&amp;#39;);

 document.documentElement.firstChild.appendChild(script);

}


function getFirstAndLastDates(base_date) {
 var first_date;

 var last_date;

 first_date = new Date(base_date.getFullYear(), base_date.getMonth(), 1);

 last_date  = new Date(base_date.getFullYear(), base_date.getMonth(), 1);

 last_date.setDate(last_date.getDate() + 31);

 last_date.setDate(1);

 last_date.setDate(0);
 return [first_date, last_date];
}


function updateCalendar(base_date) {
 var dates = getFirstAndLastDates(base_date);
 first_date = dates[0];

 last_date  = dates[1];

 if (siteUrl &amp;amp;&amp;amp; !noSite &amp;amp;&amp;amp; !isInFuture(first_date) &amp;amp;&amp;amp; !isLongAgo(last_date)) {
  var c;
  if ((c = itemsCache[base_date.getFullYear()]) &amp;amp;&amp;amp; (c = c[base_date.getMonth()]) &amp;amp;&amp;amp; (c.updated + 90000 &amp;gt; (new Date).getTime())) {
   showCalendar(c.items, base_date);
  } else {
   sendQueryForDates(siteUrl, first_date, last_date);
  }
 } else {
  showCalendar([], base_date);
 }
}


var year, month;

if (!noSite) {
 if (siteUrl &amp;amp;&amp;amp; siteUrl == thisSite) {
  var l = location.href;
  var s;
  if ((s = l.split(&amp;#39;/search?&amp;#39;)) &amp;amp;&amp;amp; (s.length == 2) &amp;amp;&amp;amp; (s = /updated-max=([0-9]+)-([0-9]+)/.exec(s[1]))) {
   year = s[1];
   month = s[2];
  } else if ((s = /\/([0-9]+)\/([0-9]+)\/.*\.html/.exec(l))) {
   year = s[1];
   month = s[2];
  } else if ((s = /\/([0-9]+)_([0-9]+)_([0-9]+)_archive\.html/.exec(l))) {
   year = s[1];
   month = s[2];
  }
 }
}

var base_date1 = new Date;

if (year) {
 if (typeof year == &amp;#39;string&amp;#39;)
  year = parseInt(year, 10);
 if (typeof month == &amp;#39;string&amp;#39;)
  month = parseInt(month, 10);
 base_date1 = new Date(year, month-1, 1);
}


updateCalendar(base_date1);


window[&amp;#39;iaBACal_changeMonth&amp;#39; + myid] = function (n) {
 first_date.setMonth(first_date.getMonth() + n);
 updateCalendar(first_date)
}

window[&amp;#39;iaBACal_changeYear&amp;#39; + myid] = function (n) {
 first_date.setFullYear(first_date.getFullYear() + n);
 updateCalendar(first_date)
}

}

window.iaBACal_LastCreated = new iaBloggerArchiveCalendar();


&amp;lt;/script&amp;gt;


 &amp;lt;div class=&amp;#39;copyright&amp;#39;&amp;gt;
  &amp;lt;small&amp;gt;&amp;lt;a href=&amp;#39;http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html&amp;#39;&amp;gt;Calendar Widget&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;
  &amp;lt;div class=&amp;#39;copyright2&amp;#39;&amp;gt;&amp;lt;small&amp;gt;
   Идея: &amp;lt;a href=&amp;#39;http://amateurblogger.ru&amp;#39; title=&amp;#39;Блог SEO-дилетанта&amp;#39;&amp;gt;amateurblogger&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
   Реализация: &amp;lt;a href=&amp;#39;http://izhurnal.blogspot.com/&amp;#39; title=&amp;#39;Интернет-журнал. Всё для блогера.&amp;#39;&amp;gt;izhurnal&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
  &amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;


&amp;lt;/div&amp;gt;

&amp;lt;!--/[widget]--&amp;gt;"&gt;

&lt;/form&gt;

&lt;div id='postCalendar' style='display: none'&gt;
&lt;form method="POST" action="http://beta.blogger.com/add-widget"&gt;

 &lt;input type="hidden" name="widget.title" id="widget.title" value=""/&gt;

 &lt;input type="hidden" name="widget.content" id="widget.content" value=""&gt;

 &lt;textarea name="widget.template" id="widget.template" style="display:none;"&gt;
 &amp;lt;data:content/&amp;gt;
 &lt;/textarea&gt;

 &lt;input type="hidden" name="infoUrl" value="http://izhurnal.blogspot.com/"/&gt;

 &lt;input type="submit" name="go" value="Добавить виджет в блог" onclick='calendarOptionChanged()'/&gt;

&lt;/form&gt;
&lt;/div&gt;

&lt;script type='text/javascript'&gt;
var calendarTemplate = document.getElementById('orig.widget.content').value;
calendarOptionChanged();
&lt;/script&gt;

&lt;p&gt;&lt;span style='color:red'&gt;Внимание.&lt;/span&gt; Если у вас после добавление виджета, в панели управления блога перестала работать вкладка «Элементы страницы» (невозможно передвинуть виджеты и т.п.), для исправления ситуации достаточно зайти на вкладку «Изменить HTML» и поставить флажок «Расширить шаблоны виджета». Ничего править или сохранять на этой вкладке не нужно — просто возвращаемся на предыдущую вкладку, и там всё работает. Причина проблемы пока не ясна, возможно, это внутренняя ошибка блогспота.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-2629126390961513180?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/2629126390961513180/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html#comment-form" title="Комментарии: 20" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/2629126390961513180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/2629126390961513180?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/calendar-archive-widget-blogger.html" title="Виджет для Blogger: календарь с возможностью просмотра архива блога." /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>20</thr:total></entry><entry gd:etag="W/&quot;DE8NQ3o-cSp7ImA9Wx5bEk4.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-278362342764168217</id><published>2010-10-28T11:31:00.003+08:00</published><updated>2010-10-28T11:34:52.459+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T11:34:52.459+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="утилиты онлайн" /><title>RegExp.escape: Экранирование строки при формировании регулярных выражений в javascript (функция и рабочий пример)</title><content type="html">&lt;p&gt;В javascript стандартный класс RegExp обычно прекрасно удовлетворяет потребности по обработке регулярных выражений, но для полноты поддержки регэкспов ему не хватает метода для экранирования произвольной строки, когда необходимо динамически формировать регулярки. К счастью, проблема легко решается объявлением следующей функции:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&amp;");
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Если вам нужно просто экранировать уже имеющуюся строку для вставки в скрипт, можете воспользоваться следующей нехитрой утилитой:&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;p&gt;Текст, требующий экранирования:&lt;br/&gt;
&lt;textarea id="source_text" onchange='optionChanged()' cols='80' rows='15'&gt;
&lt;/textarea&gt;

&lt;script type='text/javascript'&gt;

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&amp;");
}

function optionChanged() {
 var content = document.getElementById('source_text').value;
 content = RegExp.escape(content);
 document.getElementById('result_text').value = content;
}

&lt;/script&gt;
&lt;br/&gt;
Результат:&lt;br/&gt;
&lt;textarea id="result_text" cols='80' rows='15'&gt;
&lt;/textarea&gt;

&lt;script type='text/javascript'&gt;
optionChanged();
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-278362342764168217?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/278362342764168217/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/regexpescape-javascript.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/278362342764168217?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/278362342764168217?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/regexpescape-javascript.html" title="RegExp.escape: Экранирование строки при формировании регулярных выражений в javascript (функция и рабочий пример)" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DEIFR3c7fCp7ImA9Wx5bEk4.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-7753697920179799308</id><published>2010-10-28T11:15:00.002+08:00</published><updated>2010-10-28T11:28:36.904+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T11:28:36.904+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="утилиты онлайн" /><title>Экранирование спецсимволов html в html entities и обратно</title><content type="html">&lt;p&gt;Простая утилита, позволяющая заменять специсимволы html на соответствующие entities и обратно. Заменяет символы больше и меньше, амперсанд, кавычки и апострофы, а также символ новой строки (на тег br). Работает без перезагрузки страницы: просто вставьте текст в верхнюю область ввода и переместите курсор в нижнюю.&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
Введите текст, требующий экранирования спецсимволов html:&lt;br/&gt;
&lt;textarea id="source_text" onchange='optionChanged()' cols='80' rows='15'&gt;
&lt;/textarea&gt;

&lt;p&gt;Параметры:&lt;br/&gt;
&lt;script type='text/javascript'&gt;

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&amp;");
}

var replaceData = [
 {'&lt;' : '&amp;lt;', '&gt;' : '&amp;gt;'},
 {'"' : '&amp;quot;', '\'' : '&amp;#39;'},
 {'&amp;' : '&amp;amp;'},
 {"\n" : '&lt;br/&gt;'},
];

var s = '';
for (var k in replaceData) {
 if (typeof replaceData[k] == 'function') continue;
 s += "&lt;input id='ctrl_"+k+"' onchange='optionChanged()' type='checkbox' checked='1'&gt;"
 s += "&lt;label for='ctrl_"+k+"'&gt;Экранировать "
 var s1 = [];
 for (var l in replaceData[k]) {
  if (typeof replaceData[k][l] == 'function') continue;
  //s1.push('«' + replaceData[k][l] + '»&amp;nbsp;-&amp;gt;&amp;nbsp;«' + replaceData[k][l].replace('&amp;', '&amp;amp;')+ '»');
  var s2 = replaceData[k][l];
  if (s2 == '&lt;br/&gt;')
   s2 = 'перевод строки'
  s1.push(s2);
 }
 s += s1.join(',&amp;nbsp;');
 s += "&lt;/label&gt;"
 s += "&lt;br/&gt;"
}

document.write(s);

function optionChanged() {

 var replaces = {}

 var c_unescape = document.getElementById('ctrl_unescape').checked;

 for (var k in replaceData) {
  if (typeof replaceData[k] == 'function') continue;
  var t = document.getElementById('ctrl_'+k);
  if (!t.checked) continue;

  for (var l in replaceData[k]) {
   if (typeof replaceData[k][l] == 'function') continue;
   if (c_unescape) {
    replaces[replaceData[k][l]] = l;
   } else {
    replaces[l] = replaceData[k][l];
   }
  }
 }

 var content = document.getElementById('source_text').value;

 for (var i = 0; i &lt; 2; i++) {
  for (var k in replaces) {
   if (typeof replaces[k] == 'function') continue;
   if ((i == 0) == (k == '&amp;')) {
    content = content.replace(new RegExp(RegExp.escape(k), 'g'), replaces[k]);
   }
  }
 }

 document.getElementById('result_text').value = content;
}

&lt;/script&gt;
&lt;input id='ctrl_unescape' onchange='optionChanged()' type='checkbox'&gt;&lt;label for='ctrl_unescape'&gt;Обратно
&lt;/p&gt;

Результат:&lt;br/&gt;
&lt;textarea id="result_text" cols='80' rows='15'&gt;
&lt;/textarea&gt;

&lt;script type='text/javascript'&gt;
optionChanged();
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-7753697920179799308?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/7753697920179799308/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/html-html-entities.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7753697920179799308?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/7753697920179799308?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/html-html-entities.html" title="Экранирование спецсимволов html в html entities и обратно" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0IMRnYyeSp7ImA9Wx5bFUQ.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-3843901403311907407</id><published>2010-10-26T23:16:00.002+08:00</published><updated>2010-11-01T14:13:07.891+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-01T14:13:07.891+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger.com" /><title>Скрипт для отображение списка похожих статей</title><content type="html">&lt;p&gt;Для блогспота существует множество реализаций виджета похожих постов, начиная от простого списка ссылок и заканчивая навороченными и стильно оформленными виджетами. Для своего блога я перебрал несколько таких скриптов, но ни один из них меня не устроил по тем или иным причинам. Поэтому, взяв за основу код с hoctro.blogspot.com, я написал свой собственный. Собственно, сам скрипт был написал и опубликован еще полгода назад, но изначальная публикация исчезла вместе с удалённым аккаунтом в ЖЖ.&lt;/p&gt;

&lt;p&gt;Что же такого может мой скрипт и чего я не нашел в уже готовых виджетах?&lt;br/&gt;
Во-первых, это возможность настраивать заголовок скрипта, чтобы он гармонировал с содержимым вашего блога. Согласитесь, если, например, у вас блог посвящен кулинарии и рецептам, то надпись «Еще похожие статьи на тему "Салаты":» будет выглядеть крайне странно. Гораздо лучше написать что-то вроде «Еще рецепты из рубрики "Cалаты":».&lt;/p&gt;

&lt;p&gt;Во-вторых, было бы не плохо, если бы компьютер умел различать случаи, когда похожие материалы найдены только по одному ярлыку и когда они найдены по нескольким ярлыкам, и выводить для этих случаев разный текст. Кроме того, я полагаю, обычно, если похожих статей не найдено, то лучше вообще ничего не выводить, но если вам захочется, чтобы в этом случае писалось что-то вроде «Других материалов на эту тему еще не опубликовано», то данный скрипт позволяет сделать и это. Для каждого из этих трёх случаев можно задать в настройках свой вариант текста.&lt;/p&gt;

&lt;p&gt;В-третьих, я добавил возможность исключать из поиска отдельные ярлыки. На примере кулинарного блога: если, скажем, вы используете ярлык «нет фото», чтобы отметить рецепты, для которых вы еще не добавили фотографию готового блюда, то скорее всего, вам захочется, чтобы такой ярлык игнорировался при показе посетителям списка похожих рецептов.&lt;/p&gt;

&lt;p&gt;И в-четвертых, возможность изменять имена ярлыков и объединять несколько ярлыков в один.&lt;/p&gt;

&lt;p&gt;Данный скрипт не оформлен в виде отдельного виджета, а предназначен для встраивания внутрь основного виджета блога — того, который отображает содержимое сообщений. Сделано это, чтобы список похожих материалов располагался непосредственно после содержимого поста, т.е. был сразу виден посетителю при прочтении поста.&lt;/p&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;p&gt;Как добавить скрипт похожих постов в ваш блог:&lt;br/&gt;
В шаблоне блога находим строку &lt;code&gt;&amp;lt;data:post.body/&amp;gt;&lt;/code&gt; — это то место, где выводится содержимое поста. После неё вставляем мой скрипт:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&amp;lt;!-- &amp;#x0421;&amp;#x043a;&amp;#x0440;&amp;#x0438;&amp;#x043f;&amp;#x0442; &amp;quot;&amp;#x0421;&amp;#x0432;&amp;#x044f;&amp;#x0437;&amp;#x0430;&amp;#x043d;&amp;#x043d;&amp;#x044b;&amp;#x0435; &amp;#x0441;&amp;#x0442;&amp;#x0430;&amp;#x0442;&amp;#x044c;&amp;#x0438; &amp;#x0438;&amp;#x0437; &amp;#x044d;&amp;#x0442;&amp;#x043e;&amp;#x0439; &amp;#x043a;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x043e;&amp;#x0440;&amp;#x0438;&amp;#x0438;.&amp;quot; --&amp;gt;
&amp;lt;!-- (c) http://izhurnal.blogspot.com/ --&amp;gt;

        &amp;lt;b:if cond='data:blog.pageType == &amp;amp;quot;item&amp;amp;quot;'&amp;gt;
        &amp;lt;b:if cond='data:post.labels'&amp;gt;
            &amp;lt;div class='simposts'&amp;gt;

                &amp;lt;div class='widget-content'&amp;gt;
                &amp;lt;br/&amp;gt;
                  &amp;lt;div id='simpostsdata350471'&amp;gt;&amp;lt;/div&amp;gt;
                  &amp;lt;div id='simpostsdata350470'&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;
                    &amp;lt;script type='text/javascript'&amp;gt;

                    /* &amp;#x041d;&amp;#x0430;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x043e;&amp;#x0439;&amp;#x043a;&amp;#x0438; &amp;#x0441;&amp;#x043a;&amp;#x0440;&amp;#x0438;&amp;#x043f;&amp;#x0442;&amp;#x0430;. */

                    var headerN = &amp;amp;quot;&amp;#x041f;&amp;#x043e;&amp;#x0445;&amp;#x043e;&amp;#x0436;&amp;#x0438;&amp;#x0435; &amp;#x0441;&amp;#x0442;&amp;#x0430;&amp;#x0442;&amp;#x044c;&amp;#x0438;:&amp;amp;quot;; /* &amp;#x0417;&amp;#x0430;&amp;#x0433;&amp;#x043e;&amp;#x043b;&amp;#x043e;&amp;#x0432;&amp;#x043e;&amp;#x043a; &amp;#x0432;&amp;#x0438;&amp;#x0434;&amp;#x0436;&amp;#x0435;&amp;#x0442;&amp;#x0430;, &amp;#x043a;&amp;#x043e;&amp;#x0433;&amp;#x0434;&amp;#x0430; &amp;#x0432; &amp;#x043d;&amp;#x0451;&amp;#x043c; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x0442;&amp;#x0441;&amp;#x044f; &amp;#x0431;&amp;#x043e;&amp;#x043b;&amp;#x0435;&amp;#x0435; &amp;#x0447;&amp;#x0435;&amp;#x043c; &amp;#x043e;&amp;#x0434;&amp;#x043d;&amp;#x0430; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0430;. */
                    var header1 = &amp;amp;quot;&amp;#x0415;&amp;#x0449;&amp;#x0435; &amp;#x0441;&amp;#x0442;&amp;#x0430;&amp;#x0442;&amp;#x044c;&amp;#x0438; &amp;#x0438;&amp;#x0437; &amp;#x043a;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x043e;&amp;#x0440;&amp;#x0438;&amp;#x0438; \&amp;amp;quot;__LABEL__\&amp;amp;quot;:&amp;amp;quot;;  /* &amp;#x0417;&amp;#x0430;&amp;#x0433;&amp;#x043e;&amp;#x043b;&amp;#x043e;&amp;#x0432;&amp;#x043e;&amp;#x043a; &amp;#x0432;&amp;#x0438;&amp;#x0434;&amp;#x0436;&amp;#x0435;&amp;#x0442;&amp;#x0430;, &amp;#x043a;&amp;#x043e;&amp;#x0433;&amp;#x0434;&amp;#x0430; &amp;#x0432; &amp;#x043d;&amp;#x0451;&amp;#x043c; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x0442;&amp;#x0441;&amp;#x044f; &amp;#x043e;&amp;#x0434;&amp;#x043d;&amp;#x0430; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0430;. &amp;#x0415;&amp;#x0441;&amp;#x043b;&amp;#x0438; &amp;#x0432; &amp;#x0437;&amp;#x0430;&amp;#x0433;&amp;#x043e;&amp;#x043b;&amp;#x043e;&amp;#x0432;&amp;#x043a;&amp;#x0435; &amp;#x0435;&amp;#x0441;&amp;#x0442;&amp;#x044c; &amp;#x0441;&amp;#x043b;&amp;#x043e;&amp;#x0432;&amp;#x043e; __LABEL__, &amp;#x0442;&amp;#x043e; &amp;#x0432;&amp;#x043c;&amp;#x0435;&amp;#x0441;&amp;#x0442;&amp;#x043e; &amp;#x043d;&amp;#x0435;&amp;#x0433;&amp;#x043e; &amp;#x0431;&amp;#x0443;&amp;#x0434;&amp;#x0435;&amp;#x0442; &amp;#x043f;&amp;#x043e;&amp;#x0434;&amp;#x0441;&amp;#x0442;&amp;#x0430;&amp;#x0432;&amp;#x043b;&amp;#x0435;&amp;#x043d;&amp;#x043e; &amp;#x0438;&amp;#x043c;&amp;#x044f; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438;. */
                    var header0 = &amp;amp;quot;&amp;amp;quot;; /* &amp;#x0422;&amp;#x0435;&amp;#x043a;&amp;#x0441;&amp;#x0442;, &amp;#x0432;&amp;#x044b;&amp;#x0432;&amp;#x043e;&amp;#x0434;&amp;#x0438;&amp;#x043c;&amp;#x044b;&amp;#x0439; &amp;#x0435;&amp;#x0441;&amp;#x043b;&amp;#x0438; &amp;#x043d;&amp;#x0435;&amp;#x0442; &amp;#x043d;&amp;#x0438; &amp;#x043e;&amp;#x0434;&amp;#x043d;&amp;#x043e;&amp;#x0439; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438; &amp;#x0438; &amp;#x0441;&amp;#x0441;&amp;#x044b;&amp;#x043b;&amp;#x043a;&amp;#x0438;. */

                    var maxNumberOfPostsPerLabel = 5; /* &amp;#x041c;&amp;#x0430;&amp;#x043a;&amp;#x0441;&amp;#x0438;&amp;#x043c;&amp;#x0430;&amp;#x043b;&amp;#x044c;&amp;#x043d;&amp;#x043e;&amp;#x0435; &amp;#x0447;&amp;#x0438;&amp;#x0441;&amp;#x043b;&amp;#x043e; &amp;#x043f;&amp;#x043e;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x0432;, &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x043c;&amp;#x044b;&amp;#x0445; &amp;#x0434;&amp;#x043b;&amp;#x044f; &amp;#x043a;&amp;#x0430;&amp;#x0436;&amp;#x0434;&amp;#x043e;&amp;#x0439; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438;. */
                    var maxNumberOfLabels = 4;      /* &amp;#x041c;&amp;#x0430;&amp;#x043a;&amp;#x0441;&amp;#x0438;&amp;#x043c;&amp;#x0430;&amp;#x043b;&amp;#x044c;&amp;#x043d;&amp;#x043e;&amp;#x0435; &amp;#x0447;&amp;#x0438;&amp;#x0441;&amp;#x043b;&amp;#x043e; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x043c;&amp;#x044b;&amp;#x0445; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043e;&amp;#x043a;. */
                    var excludeEmptyLabels = true;  /* &amp;#x0421;&amp;#x043a;&amp;#x0440;&amp;#x044b;&amp;#x0432;&amp;#x0430;&amp;#x0442;&amp;#x044c; &amp;#x043b;&amp;#x0438; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438;, &amp;#x0434;&amp;#x043b;&amp;#x044f; &amp;#x043a;&amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0440;&amp;#x044b;&amp;#x0445; &amp;#x043d;&amp;#x0435;&amp;#x0442; &amp;#x043f;&amp;#x043e;&amp;#x0434;&amp;#x0445;&amp;#x043e;&amp;#x0434;&amp;#x044f;&amp;#x0449;&amp;#x0438;&amp;#x0445; &amp;#x043f;&amp;#x043e;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x0432;. true - &amp;#x0441;&amp;#x043a;&amp;#x0440;&amp;#x044b;&amp;#x0432;&amp;#x0430;&amp;#x0442;&amp;#x044c;, false - &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0442;&amp;#x044c;. */
                    var excludeLabels = []; /* &amp;#x041c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438;, &amp;#x043a;&amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0440;&amp;#x044b;&amp;#x0435; &amp;#x043d;&amp;#x0435; &amp;#x0441;&amp;#x043b;&amp;#x0435;&amp;#x0434;&amp;#x0443;&amp;#x0435;&amp;#x0442; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0442;&amp;#x044c;. */

                    /* &amp;#x0421;&amp;#x043c;&amp;#x0435;&amp;#x043d;&amp;#x0430; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x043c;&amp;#x044b;&amp;#x0445; &amp;#x0438;&amp;#x043c;&amp;#x0451;&amp;#x043d;.
                       &amp;#x0417;&amp;#x0434;&amp;#x0435;&amp;#x0441;&amp;#x044c; &amp;#x043f;&amp;#x0435;&amp;#x0440;&amp;#x0435;&amp;#x0447;&amp;#x0438;&amp;#x0441;&amp;#x043b;&amp;#x044f;&amp;#x0435;&amp;#x043c; &amp;#x0441;&amp;#x043e;&amp;#x043e;&amp;#x0442;&amp;#x0432;&amp;#x0435;&amp;#x0442;&amp;#x0441;&amp;#x0442;&amp;#x0432;&amp;#x0438;&amp;#x044f; &amp;#x0440;&amp;#x0435;&amp;#x0430;&amp;#x043b;&amp;#x044c;&amp;#x043d;&amp;#x043e;&amp;#x0433;&amp;#x043e; &amp;#x0438;&amp;#x043c;&amp;#x0435;&amp;#x043d;&amp;#x0438; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0438; &amp;#x0438; &amp;#x043d;&amp;#x0430;&amp;#x0437;&amp;#x0432;&amp;#x0430;&amp;#x043d;&amp;#x0438;&amp;#x044f;, &amp;#x043a;&amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0440;&amp;#x043e;&amp;#x0435; &amp;#x0431;&amp;#x0443;&amp;#x0434;&amp;#x0435;&amp;#x0442; &amp;#x043f;&amp;#x043e;&amp;#x043a;&amp;#x0430;&amp;#x0437;&amp;#x0430;&amp;#x043d;&amp;#x043e; &amp;#x043d;&amp;#x0430; &amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x0430;&amp;#x043d;&amp;#x0438;&amp;#x0446;&amp;#x0435;.
                       &amp;#x0415;&amp;#x0441;&amp;#x043b;&amp;#x0438; &amp;#x0434;&amp;#x043b;&amp;#x044f; &amp;#x0434;&amp;#x0432;&amp;#x0443;&amp;#x0445; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043e;&amp;#x043a; &amp;#x0443;&amp;#x043a;&amp;#x0430;&amp;#x0437;&amp;#x0430;&amp;#x0442;&amp;#x044c; &amp;#x043e;&amp;#x0434;&amp;#x043d;&amp;#x043e; &amp;#x043d;&amp;#x0430;&amp;#x0437;&amp;#x0432;&amp;#x0430;&amp;#x043d;&amp;#x0438;&amp;#x0435;, &amp;#x043e;&amp;#x043d;&amp;#x0438; &amp;#x043f;&amp;#x0440;&amp;#x0438; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0435;&amp;#x043d;&amp;#x0438;&amp;#x0438; &amp;#x0441;&amp;#x043a;&amp;#x043b;&amp;#x0435;&amp;#x044f;&amp;#x0442;&amp;#x0441;&amp;#x044f; &amp;#x0432; &amp;#x043e;&amp;#x0434;&amp;#x043d;&amp;#x0443; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0443;.
                       &amp;#x0415;&amp;#x0441;&amp;#x043b;&amp;#x0438; &amp;#x043c;&amp;#x0435;&amp;#x0442;&amp;#x043a;&amp;#x0430; &amp;#x0437;&amp;#x0434;&amp;#x0435;&amp;#x0441;&amp;#x044c; &amp;#x043d;&amp;#x0435; &amp;#x043f;&amp;#x0435;&amp;#x0440;&amp;#x0435;&amp;#x0447;&amp;#x0438;&amp;#x0441;&amp;#x043b;&amp;#x044f;&amp;#x0435;&amp;#x0442;&amp;#x0441;&amp;#x044f;, &amp;#x0442;&amp;#x043e; &amp;#x043e;&amp;#x0442;&amp;#x043e;&amp;#x0431;&amp;#x0440;&amp;#x0430;&amp;#x0436;&amp;#x0430;&amp;#x0435;&amp;#x0442;&amp;#x0441;&amp;#x044f; &amp;#x043f;&amp;#x043e;&amp;#x0434; &amp;#x0441;&amp;#x0432;&amp;#x043e;&amp;#x0438;&amp;#x043c; &amp;#x043d;&amp;#x0430;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x044f;&amp;#x0449;&amp;#x0438;&amp;#x043c; &amp;#x043d;&amp;#x0430;&amp;#x0437;&amp;#x0432;&amp;#x0430;&amp;#x043d;&amp;#x0438;&amp;#x0435;&amp;#x043c;.
                    */
                    var renameLabels = {
                    };

                    /* &amp;#x041a;&amp;#x043e;&amp;#x043d;&amp;#x0435;&amp;#x0446; &amp;#x043d;&amp;#x0430;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x043e;&amp;#x0435;&amp;#x043a; &amp;#x0441;&amp;#x043a;&amp;#x0440;&amp;#x0438;&amp;#x043f;&amp;#x0442;&amp;#x0430;. */

                    var homeUrl3 = &amp;amp;quot;&amp;lt;data:blog.homepageUrl/&amp;gt;&amp;amp;quot;; /* &amp;#x0410;&amp;#x0434;&amp;#x0440;&amp;#x0435;&amp;#x0441; &amp;#x0431;&amp;#x043b;&amp;#x043e;&amp;#x0433;&amp;#x0430;, &amp;#x043e;&amp;#x0442;&amp;#x043a;&amp;#x0443;&amp;#x0434;&amp;#x0430; &amp;#x0431;&amp;#x0435;&amp;#x0440;&amp;#x0451;&amp;#x043c; &amp;#x0441;&amp;#x043f;&amp;#x0438;&amp;#x0441;&amp;#x043e;&amp;#x043a; &amp;#x043f;&amp;#x043e;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x0432;. */

                    function is_in(item, array) {
                      for (k in array) {
                        if (typeof array[k] == &amp;amp;quot;function&amp;amp;quot;) continue;
                        if (array[k] == item) return true;
                      }
                      return false;
                    }

                    function label_title(label) {
                      if (renameLabels[label])
                        return renameLabels[label];
                      return label;
                    }

                    totalLabels = 0;
                    receivedReplies = 0;
                    var receivedItems = [];

                    var k_label;

                    function labelReceived() {
                      receivedReplies++;

                      if (receivedReplies != totalLabels)
                        return;

                      var labelCount = 0;
                      for (k_label in receivedItems) {
                        if (typeof receivedItems[k_label] == &amp;amp;quot;function&amp;amp;quot;) continue;
                        var items = receivedItems[k_label];
                        if (items.length == 0 &amp;amp;amp;&amp;amp;amp; excludeEmptyLabels)
                          continue;
                        labelCount++;
                      }

                      var labelCount1 = 0;
                      for (k_label in receivedItems) {
                        if (typeof receivedItems[k_label] == &amp;amp;quot;function&amp;amp;quot;) continue;
                        var items = receivedItems[k_label];

                        if (items.length == 0 &amp;amp;amp;&amp;amp;amp; excludeEmptyLabels)
                          continue;

                        var ul = document.createElement(&amp;amp;#39;ul&amp;amp;#39;);
                        var itemsCount = 0;
                        for (var k_item in items) {
                          if (typeof items[k_item] == &amp;amp;quot;function&amp;amp;quot;) continue;
                          var item = items[k_item];
                          var li = document.createElement(&amp;amp;#39;li&amp;amp;#39;);
                          var a = document.createElement(&amp;amp;#39;a&amp;amp;#39;);
                          a.href = item.href;
                          var txt = document.createTextNode(item.title);
                          a.appendChild(txt);
                          li.appendChild(a);
                          ul.appendChild(li);
                          itemsCount++;
                          if (itemsCount == maxNumberOfPostsPerLabel)
                            break;
                        }
                        
                        var txt = document.createTextNode(k_label);
                        var h = document.createElement(&amp;amp;#39;b&amp;amp;#39;);
                        h.appendChild(txt);
                        var div1 = document.createElement(&amp;amp;#39;div&amp;amp;#39;);
                        if (!(labelCount == 1 &amp;amp;amp;&amp;amp;amp; header1.search &amp;amp;amp;&amp;amp;amp; header1.search(/(LABEL)/) != -1))
                          div1.appendChild(h);
                        div1.appendChild(ul);
                        document.getElementById(&amp;amp;#39;simpostsdata350470&amp;amp;#39;).appendChild(div1);

                        labelCount1++;
                        if (labelCount1 == maxNumberOfLabels)
                          break;
                      }

                      var txt;
                      if (labelCount == 1 &amp;amp;amp;&amp;amp;amp; header1)
                        txt = document.createTextNode(header1.replace(&amp;amp;quot;__LABEL__&amp;amp;quot;, k_label));
                      else if (labelCount)
                        txt = document.createTextNode(headerN);
                      else if (header0)
                        txt = document.createTextNode(header0);
                      if (txt)
                      {
                        var h = document.createElement(&amp;amp;quot;h4&amp;amp;quot;);
                        h.appendChild(txt);
                        document.getElementById(&amp;amp;#39;simpostsdata350471&amp;amp;#39;).appendChild(h);
                      }
                    }

                    function receiveReply_123(json) {
                      var label = &amp;amp;quot;&amp;amp;quot;;
                      for (var l = 0; l &amp;amp;lt; json.feed.link.length; l++) {
                        if (typeof json.feed.link[l] == &amp;amp;quot;function&amp;amp;quot;) continue;
                        if (json.feed.link[l].rel == &amp;amp;#39;alternate&amp;amp;#39;) {
                          var raw = json.feed.link[l].href;
                          var label = raw.substr(homeUrl3.length+13);
                          var k;
                          for (k=0; k&amp;amp;lt;20; k++)
                            label = label.replace(&amp;amp;quot;%20&amp;amp;quot;, &amp;amp;quot; &amp;amp;quot;);
                          label = decodeURI(label);
                          break;
                        }
                      }
                      var labelTitle = label_title(label);
                      if (typeof receivedItems[labelTitle] != &amp;amp;quot;object&amp;amp;quot;)
                        receivedItems[labelTitle] = [];

                      for (var k in json.feed.entry) {
                        var entry = json.feed.entry[k];
                        if (typeof entry == &amp;amp;quot;function&amp;amp;quot;) continue;
                        var href = &amp;amp;quot;&amp;amp;quot;;
                        for (var kl in entry.link) {
                          if (typeof entry.link[kl] == &amp;amp;quot;function&amp;amp;quot;) continue;
                          if (entry.link[kl].rel == &amp;amp;quot;alternate&amp;amp;quot;) {
                            href = entry.link[kl].href;
                            break;
                          }
                        }

                        if(href != &amp;amp;quot;&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; href != location.href.split(new RegExp(&amp;quot;\\?|\\#&amp;quot;))[0]) {
                          var item = { &amp;amp;quot;href&amp;amp;quot; : href, &amp;amp;quot;title&amp;amp;quot; : entry.title.$t};
                          receivedItems[labelTitle].push(item);
                        }
                      }

                      labelReceived();

                    }
                    function sendQueryForLabel(query, label) {
                      var script = document.createElement(&amp;amp;#39;script&amp;amp;#39;);
                      script.setAttribute(&amp;amp;#39;src&amp;amp;#39;, query + &amp;amp;#39;feeds/posts/default/-/&amp;amp;#39;
                        + label +
                        &amp;amp;#39;?alt=json-in-script&amp;amp;amp;callback=receiveReply_123&amp;amp;amp;max-results=&amp;amp;#39;+maxNumberOfPostsPerLabel);
                      script.setAttribute(&amp;amp;#39;type&amp;amp;#39;, &amp;amp;#39;text/javascript&amp;amp;#39;);
                      document.documentElement.firstChild.appendChild(script);
                    }

                    var parsedlabels = [];
                    var labelsCount = 0;

                    function list_items(textLabel) {
                      if (labelsCount &amp;amp;gt;= maxNumberOfLabels ||
                          is_in(textLabel, excludeLabels) ||
                          is_in(textLabel, parsedlabels)) {
                        labelReceived();
                        return;
                      }
                      labelsCount++;
                      parsedlabels.push(textLabel);
                      sendQueryForLabel(homeUrl3, textLabel);
                    }
                    &amp;lt;b:loop values='data:posts' var='post'&amp;gt;
                      &amp;lt;b:loop values='data:post.labels' var='label'&amp;gt;
                        totalLabels++;
                      &amp;lt;/b:loop&amp;gt;
                    &amp;lt;/b:loop&amp;gt;
                    &amp;lt;b:loop values='data:posts' var='post'&amp;gt;
                      &amp;lt;b:loop values='data:post.labels' var='label'&amp;gt;
                        list_items(&amp;amp;quot;&amp;lt;data:label.name/&amp;gt;&amp;amp;quot;);
                      &amp;lt;/b:loop&amp;gt;
                    &amp;lt;/b:loop&amp;gt;
                    &amp;lt;/script&amp;gt;

                &amp;lt;/div&amp;gt;

            &amp;lt;/div&amp;gt;
        &amp;lt;/b:if&amp;gt;
        &amp;lt;/b:if&amp;gt;

&amp;lt;!-- &amp;#x041a;&amp;#x043e;&amp;#x043d;&amp;#x0435;&amp;#x0446; &amp;#x0441;&amp;#x043a;&amp;#x0440;&amp;#x0438;&amp;#x043f;&amp;#x0442;&amp;#x0430; &amp;quot;&amp;#x0421;&amp;#x0432;&amp;#x044f;&amp;#x0437;&amp;#x0430;&amp;#x043d;&amp;#x043d;&amp;#x044b;&amp;#x0435; &amp;#x0441;&amp;#x0442;&amp;#x0430;&amp;#x0442;&amp;#x044c;&amp;#x0438; &amp;#x0438;&amp;#x0437; &amp;#x044d;&amp;#x0442;&amp;#x043e;&amp;#x0439; &amp;#x043a;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x043e;&amp;#x0440;&amp;#x0438;&amp;#x0438;.&amp;quot; --&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;В начале скрипта находим место, помеченное текстом «&lt;code&gt;/* Настройки скрипта. */&lt;/code&gt;». Сюда вписываются настройки:&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;headerN&lt;/b&gt; — текст заголовка виджета, когда похожие статьи найдены более чем по одному ярлыку.&lt;br/&gt;
&lt;b&gt;header1&lt;/b&gt; — текст заголовка виджета, когда похожие статьи найдены только по одному ярлыку. Если в тексте есть фрагмент __LABEL__, то вместо него будет подставлено имя данного ярлыка.&lt;br/&gt;
&lt;b&gt;header0&lt;/b&gt; — текст, если похожих статей не найдено.&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;maxNumberOfPostsPerLabel&lt;/b&gt; — сколько максимально статей отображать для каждого ярлыка.&lt;br/&gt;
&lt;b&gt;maxNumberOfLabels&lt;/b&gt; — максимальное число отображаемых ярлыков.&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;excludeEmptyLabels&lt;/b&gt; — скрывать ли ярлыки, для которых нет подходящих статей. true - скрывать, false - отображать.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;excludeLabels&lt;/b&gt; — список ярлыков, которые следует игнорировать.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;renameLabels&lt;/b&gt; — Здесь перечисляются соответствия реального имени ярлыка и названия ярлыка, которое будет показано на странице. Если для двух ярлыков указать одно название, они при отображении склеятся в одну метку. Если ярлык здесь не указан, то отображается под своим настоящим названием.
&lt;/p&gt;

&lt;p&gt;Пример настроек скрипта для блога &lt;a href="http://iflashgamer.blogspot.com/"&gt;Флеш-обзор&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;var headerN = &amp;amp;quot;&amp;#x041f;&amp;#x043e;&amp;#x0445;&amp;#x043e;&amp;#x0436;&amp;#x0438;&amp;#x0435; &amp;#x0438;&amp;#x0433;&amp;#x0440;&amp;#x044b;:&amp;amp;quot;;
var header1 = &amp;amp;quot;&amp;#x0415;&amp;#x0449;&amp;#x0435; &amp;#x0438;&amp;#x0433;&amp;#x0440;&amp;#x044b; &amp;#x0438;&amp;#x0437; &amp;#x043a;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x043e;&amp;#x0440;&amp;#x0438;&amp;#x0438; &amp;#x00ab;__LABEL__&amp;#x00bb;:&amp;amp;quot;;
var header0 = &amp;amp;quot;&amp;amp;quot;;
var maxNumberOfPostsPerLabel = 5;
var maxNumberOfLabels = 4;
var excludeEmptyLabels = true;
var excludeLabels = [&amp;amp;quot;&amp;#x0444;&amp;#x043b;&amp;#x0435;&amp;#x0448;&amp;amp;quot;, &amp;amp;quot;&amp;#x0440;&amp;#x0430;&amp;#x0437;&amp;#x043d;&amp;#x043e;&amp;#x0435;&amp;amp;quot;];
var renameLabels = {
    &amp;amp;quot;&amp;#x043b;&amp;#x043e;&amp;#x0433;&amp;#x0438;&amp;#x0447;&amp;#x0435;&amp;#x0441;&amp;#x043a;&amp;#x0430;&amp;#x044f;&amp;amp;quot; : &amp;amp;quot;&amp;#x043b;&amp;#x043e;&amp;#x0433;&amp;#x0438;&amp;#x0447;&amp;#x0435;&amp;#x0441;&amp;#x043a;&amp;#x0438;&amp;#x0435;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x0435;&amp;#x043b;&amp;#x044f;&amp;#x043b;&amp;#x043a;&amp;#x0430;&amp;amp;quot;  : &amp;amp;quot;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x0435;&amp;#x043b;&amp;#x044f;&amp;#x043b;&amp;#x043a;&amp;#x0438;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x0438;&amp;#x044f;&amp;amp;quot;  : &amp;amp;quot;&amp;#x0441;&amp;#x0442;&amp;#x0440;&amp;#x0430;&amp;#x0442;&amp;#x0435;&amp;#x0433;&amp;#x0438;&amp;#x0438;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x043d;&amp;#x0435; &amp;#x0438;&amp;#x0433;&amp;#x0440;&amp;#x044b;&amp;amp;quot;    : &amp;amp;quot;&amp;#x0440;&amp;#x0430;&amp;#x0437;&amp;#x043d;&amp;#x043e;&amp;#x0435;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x0440;&amp;#x0430;&amp;#x0437;&amp;#x0432;&amp;#x043b;&amp;#x0435;&amp;#x0447;&amp;#x0435;&amp;#x043d;&amp;#x0438;&amp;#x044f;&amp;amp;quot;: &amp;amp;quot;&amp;#x0440;&amp;#x0430;&amp;#x0437;&amp;#x043d;&amp;#x043e;&amp;#x0435;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x043f;&amp;#x043b;&amp;#x0430;&amp;#x0442;&amp;#x0444;&amp;#x043e;&amp;#x0440;&amp;#x043c;&amp;#x0435;&amp;#x0440;&amp;amp;quot; : &amp;amp;quot;&amp;#x043f;&amp;#x043b;&amp;#x0430;&amp;#x0442;&amp;#x0444;&amp;#x043e;&amp;#x0440;&amp;#x043c;&amp;#x0435;&amp;#x0440;&amp;#x044b;&amp;amp;quot;,
    &amp;amp;quot;&amp;#x0442;&amp;#x0435;&amp;#x043a;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x0432;&amp;#x0430;&amp;#x044f;&amp;amp;quot;  : &amp;amp;quot;&amp;#x0442;&amp;#x0435;&amp;#x043a;&amp;#x0441;&amp;#x0442;&amp;#x043e;&amp;#x0432;&amp;#x044b;&amp;#x0435;&amp;amp;quot;
};&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-3843901403311907407?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/3843901403311907407/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_26.html#comment-form" title="Комментарии: 15" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3843901403311907407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3843901403311907407?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_26.html" title="Скрипт для отображение списка похожих статей" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>15</thr:total></entry><entry gd:etag="W/&quot;C0cEQXs8eCp7ImA9Wx5UFEw.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-5132301288557256516</id><published>2010-10-18T22:10:00.001+08:00</published><updated>2010-10-18T22:10:00.570+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-18T22:10:00.570+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="справочная информация" /><category scheme="http://www.blogger.com/atom/ns#" term="консоль" /><title>Список хоткеев bash</title><content type="html">Шпаргалка по стандартным биндингам хоткеев в bash.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;CTRL-команды:&lt;/center&gt;&lt;br /&gt;
Ctrl + a — переход к началу строки&lt;br /&gt;
Ctrl + b — аналог стрелки влево  &lt;br /&gt;
Ctrl + c — отменить редактирование команды или прекратить работу  &lt;br /&gt;
Ctrl + d — аналог Delete. Если строка пустая - выход из shell&lt;br /&gt;
Ctrl + e — переход к концу строки&lt;br /&gt;
Ctrl + f — аналог стрелки вправо&lt;br /&gt;
Ctrl + g — выход из режима дополнения&lt;br /&gt;
Ctrl + h — аналог BackSpace&lt;br /&gt;
Ctrl + i — аналог Tab&lt;br /&gt;
Ctrl + k — удалить всё до конца строки&lt;br /&gt;
Ctrl + l — очистить экран (набранная строка и даже позиция курсора остаётся)&lt;br /&gt;
Ctrl + r —  поиск по истории набранных команд&lt;br /&gt;
Ctrl + R — поиск по истории набранных команд назад (это когда есть несколько вариантов и проскочили нужный)&lt;br /&gt;
Ctrl + t — поменять местами текущий символ с предыдущим&lt;br /&gt;
Ctrl + u — удалить всё до начала строки&lt;br /&gt;
Ctrl + v — преобразует следующую клавишу в её символьное отображение (Enter - ^M, Esc - ^[ и т.д.)&lt;br /&gt;
Ctrl + w — удалить от курсора до начала слова&lt;br /&gt;
Ctrl + x дважды — скачок между началом строки и текущей позицией курсора&lt;br /&gt;
Ctrl + x @ — Показывает возможные варианты дополнения доменного имени  &lt;br /&gt;
Ctrl + y — вставить из буфера (все удаляемое по горячим клавишам удаляется не просто так, а в буфер)&lt;br /&gt;
Ctrl + z — притормозить/остановить выполнение команды в фон&lt;br /&gt;
Ctrl + _ — отмена последнего изменения&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;ALT-команды&lt;/center&gt;&lt;br /&gt;
Alt + &lt; — к первой команде в истории (вообще к самой первой в .bash_history)
Alt + &gt; — к последней команде в истории&lt;br /&gt;
Alt + ? — показать весь список вариантов дополнения (аналог 2Т - см. ниже)&lt;br /&gt;
Alt + * — вставить все возможные варианты дополнения&lt;br /&gt;
Alt + / — попытатся дополнить имя файла (из имеющихся в текущем каталоге)&lt;br /&gt;
Alt + . — вставить последний аргумент из предыдущей команды&lt;br /&gt;
Alt + b — влево на слово&lt;br /&gt;
Alt + c — сделать первую букву слова заглавной (и перейти к следующему слову)&lt;br /&gt;
Alt + d — удалить от текущей позиции до конца слова&lt;br /&gt;
Alt + f — вправо на слово&lt;br /&gt;
Alt + l — сделать первую букву слова строчной (и перейти к следующему слову)&lt;br /&gt;
Alt + n — искать по истории (но не сразу, а после полного ввода и нажатия Ентер)&lt;br /&gt;
Alt + p — искать по истории назад&lt;br /&gt;
Alt + r — очистить всю строку&lt;br /&gt;
Alt + t — поменять слова местами&lt;br /&gt;
Alt + u — сделать все буквы заглавными от текущей позиции до конца слова&lt;br /&gt;
Alt + BackSpace — Удалить от текущей позиции до начала слова&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;Tab-команды&lt;/center&gt;&lt;br /&gt;
2T обозначает дважды нажатый Tab&lt;br /&gt;
2T — все доступные команды (это тоже все знают)&lt;br /&gt;
(string)2T — все доступные команды начинающиеся на string&lt;br /&gt;
/2T — все каталоги, включая скрытые. Для текущего надо набрать ./2Т&lt;br /&gt;
*2T — каталоги, кроме скрытых&lt;br /&gt;
~2T — все пользователи, присутствющие в /etc/passwd&lt;br /&gt;
~f2T — все пользователи, присутствющие в /etc/passwd, начинающиеся на f&lt;br /&gt;
$2T — все системные переменные&lt;br /&gt;
@2T — все записи в /etc/hosts&lt;br /&gt;
=2T — вывод наподобии ls или dir&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;Просто команды&lt;/center&gt;&lt;br /&gt;
!! — выполнить последнюю команду в истории&lt;br /&gt;
!abc — выполнить последнюю команду в истории, начинающуюся на abc&lt;br /&gt;
!a:p — напечатать последнюю команду в истории, начинающуюся на a&lt;br /&gt;
!n — выполнить n-ную команду в истории&lt;br /&gt;
!$ — посдедний аргумент последней команды&lt;br /&gt;
!^ — первый аргумент последней команды&lt;br /&gt;
^abc^xyz — заменить abc на xyz в последней команде и выполнить результат&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-5132301288557256516?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/5132301288557256516/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/bash.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5132301288557256516?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/5132301288557256516?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/bash.html" title="Список хоткеев bash" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0AAQn44cCp7ImA9Wx5UEU8.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-8011689538777093394</id><published>2010-10-15T16:02:00.000+08:00</published><updated>2010-10-15T16:02:23.038+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-15T16:02:23.038+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="alsa" /><category scheme="http://www.blogger.com/atom/ns#" term="советы по настройке" /><title>Исправляем многоканальный звук в alsa на AC'97 чипсетах Intel ICH4/ICH5/ICH6</title><content type="html">Столкнулся с проблемой со встроенным звуком на AC'97 Realtek ALC850 (ICH5): выводы для боковых колонок и центра/саба перепутаны местами. При этом очевидное решение — переподключить колонки — не работает, поскольку миксер регулирует звук правильно, и в результате попытка настроить саб/центр приводит к регулированию баланса боковых и наоборот.&lt;br /&gt;
&lt;br /&gt;
Гугление форумов и различных FAQ на эту тему никаких результатов не дало. Решение нашлось в бактрекере alsa. Пользователь аж в 2005 году открыл &lt;a href="https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1369"&gt;тему с багом&lt;/a&gt;, и через год, не дождавшись никакой реакции от разработчиков, описал там в комментариях решение проблемы. На этом всё и закончилось, как и с большинством других тамошних багов. Патч за 5 лет в исходники никто так и не закоммитил.&lt;br /&gt;
&lt;br /&gt;
Итак, вот конфиг, который надо прописать в /usr/share/alsa/cards/ICH4.conf , чтобы звук через surround51 заработал как положено:&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;#
# Configuration for the Intel ICH4/ICH5/ICH6 chips
#
# Edited by Uday Bondhugula &amp;lt;bondhugula.1@osu.edu&amp;gt; to
# fix center/LFE swapping with rear channels on some
# ICH5 chips
#

&amp;lt;confdir:pcm/front.conf&amp;gt;

ICH4.pcm.front.0 {
 @args [ CARD ]
 @args.CARD {
  type string
 }
 type softvol
 slave.pcm {
  type hw
  card $CARD
  device 0
 }
 control {
  name &amp;quot;PCM Playback Volume&amp;quot;
  card $CARD
 }
} 

# default with dmix+softvol &amp;amp; dsnoop
ICH4.pcm.default {
 @args [ CARD ]
 @args.CARD {
  type string
 }
 type asym
 playback.pcm {
  type plug
  slave.pcm {
   type softvol
   slave.pcm {
    @func concat
    strings [ &amp;quot;dmix:&amp;quot; $CARD ]
   }
   control {
    name &amp;quot;PCM Playback Volume&amp;quot;
    card $CARD
   }
  }
 }
 capture.pcm {
  type plug
  slave.pcm {
   @func concat
   strings [ &amp;quot;dsnoop:&amp;quot; $CARD ]
  }
 }
}

&amp;lt;confdir:pcm/surround40.conf&amp;gt;

ICH4.pcm.surround40.0 {
 @args [ CARD ]
 @args.CARD {
  type string
 }
 type softvol
 slave.pcm {
  type hooks
  slave.pcm {
   type hw
   card $CARD
   device 0
  }
  hooks.0 {
   type ctl_elems
   hook_args [
   {
    name &amp;quot;Channel Mode&amp;quot;
    preserve true
    value &amp;quot;4ch&amp;quot;
    lock true
    optional true
   }
   # for old drivers
   {
    name &amp;quot;Line-In As Surround&amp;quot;
    preserve true
    value true
    optional true
   }
   {
    name &amp;quot;Surround Down Mix&amp;quot;
    preserve true
    value off
    lock true
    optional true
   }
   ]
  }
 }
 control {
  name &amp;quot;PCM Playback Volume&amp;quot;
  card $CARD
 }
}

&amp;lt;confdir:pcm/surround41.conf&amp;gt;
&amp;lt;confdir:pcm/surround50.conf&amp;gt;
&amp;lt;confdir:pcm/surround51.conf&amp;gt;

ICH4.pcm.surround51.0 {
 @args [ CARD ]
 @args.CARD {
  type string
 }
 type softvol
 slave.pcm {
  type route
  ttable.0.0 1
  ttable.1.1 1
  ttable.2.4 1
  ttable.3.5 1
  ttable.4.2 1
  ttable.5.3 1
  slave.pcm {
   type hooks
   slave.pcm {
    type hw
    card $CARD
    device 0
   }
   hooks.0 {
    type ctl_elems
    hook_args [
    {
     name &amp;quot;Channel Mode&amp;quot;
     preserve true
     value &amp;quot;6ch&amp;quot;
     lock true
     optional true
    }
    # for old drivers
    {
     name &amp;quot;Line-In As Surround&amp;quot;
     preserve true
     value true
     optional true
    }
    {
     name &amp;quot;Mic As Center/LFE&amp;quot;
     preserve true
     value true
     optional true
    }
    {
     name &amp;quot;Surround Down Mix&amp;quot;
     preserve true
     value off
     lock true
     optional true
    }
    {
     name &amp;quot;Center/LFE Down Mix&amp;quot;
     preserve true
     value off
     lock true
     optional true
    }
    ]
   }
  }
  slave.channels 6
 }
 control {
  name &amp;quot;PCM Playback Volume&amp;quot;
  card $CARD
 }
}

&amp;lt;confdir:pcm/iec958.conf&amp;gt;

ICH4.pcm.iec958.0 {
 @args [ CARD AES0 AES1 AES2 AES3 ]
 @args.CARD {
  type string
 }
 @args.AES0 {
  type integer
 }
 @args.AES1 {
  type integer
 }
 @args.AES2 {
  type integer
 }
 @args.AES3 {
  type integer
 }
 type hooks
 slave.pcm {
  type hw
  card $CARD
  device 4
 }
 hooks.0 {
  type ctl_elems
  hook_args [
   {
    name &amp;quot;IEC958 Playback AC97-SPSA&amp;quot;
    lock true
    preserve true
    value 3
    optional true
   }
   {
    name &amp;quot;IEC958 Playback Default&amp;quot;
    lock true
    preserve true
    value [ $AES0 $AES1 $AES2 $AES3 ]
   }
   {
    name &amp;quot;IEC958 Playback Switch&amp;quot;
    lock true
    preserve true
    value true
   }
  ]
 }
}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-8011689538777093394?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/8011689538777093394/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/alsa-ac97-intel-ich4ich5ich6.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/8011689538777093394?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/8011689538777093394?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/alsa-ac97-intel-ich4ich5ich6.html" title="Исправляем многоканальный звук в alsa на AC'97 чипсетах Intel ICH4/ICH5/ICH6" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0AGQXszfip7ImA9Wx5UEE4.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-3266074729429998099</id><published>2010-10-14T15:02:00.000+08:00</published><updated>2010-10-14T15:02:00.586+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-14T15:02:00.586+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="мысль вслух" /><title>Гугл — чёртов Скайнет</title><content type="html">К вопросу о понимании естественных языков поисковыми системами:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_9LzkYxYJB94/TLVZ7gRNcAI/AAAAAAAAAIo/vB2fA-sbBB8/s1600/greenshot_2010-10-13_15-01-13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_9LzkYxYJB94/TLVZ7gRNcAI/AAAAAAAAAIo/vB2fA-sbBB8/s1600/greenshot_2010-10-13_15-01-13.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-3266074729429998099?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/3266074729429998099/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_14.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3266074729429998099?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/3266074729429998099?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_14.html" title="Гугл — чёртов Скайнет" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_9LzkYxYJB94/TLVZ7gRNcAI/AAAAAAAAAIo/vB2fA-sbBB8/s72-c/greenshot_2010-10-13_15-01-13.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEUCQH47eSp7ImA9Wx5VGUU.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-850091218612366274</id><published>2010-10-14T00:11:00.006+08:00</published><updated>2010-10-14T00:11:01.001+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-14T00:11:01.001+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PR" /><title>АнтиSEO</title><content type="html">Вот такой вот блог &lt;a href="http://anti-seoblog.ru/"&gt;anti-seoblog.ru&lt;/a&gt;, в котором анонимус стебёт SEO вообще и отдельных SEOшников в частности. Местами забавно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-850091218612366274?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/850091218612366274/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/seo.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/850091218612366274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/850091218612366274?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/seo.html" title="АнтиSEO" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D04DRXo-cCp7ImA9Wx5bGEQ.&quot;"><id>tag:blogger.com,1999:blog-748777295029581223.post-6381908368490327955</id><published>2010-10-13T16:14:00.005+08:00</published><updated>2010-11-05T01:39:34.458+07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-05T01:39:34.458+07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="поле чудес; страна дураков" /><title>«Национальная ОС, которую мы потеряли»</title><content type="html">Попалась на глаза потрясающая по уровню бреда статья от патриота «Русских Компьютеров»™ : &lt;a href="http://slon.ru/blogs/revich/post/464142/"&gt;http://slon.ru/blogs/revich/post/464142/&lt;/a&gt;. Автор даже не в состоянии понять разницу между архитектурой компьютера, языком программирования и операционной системой, но, тем не менее, имеет смелость критиковать современные технологии.&lt;br /&gt;
&lt;br /&gt;
Давайте внимательно присмотримся к тому, что предлагается на роль национальной ЭВМ (или ОС... или ЯП... посыл автора остался не вполне ясным) — персональной вычислительной системе «МИР» 1965-го года издания. Итак, «тактико-технические характеристики»:&lt;br /&gt;
&lt;br /&gt;
Быстродействие 1-2 тысячи операций в секунду (200—300 операций в секунду для 5-разрядных чисел). Управление построено на &lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0"&gt;микропрограммном&lt;/a&gt; принципе. Микропрограммами выполнялось большинство арифметических действий. Микрокоманды 120-разрядные и записывались на сменных микропрограммных матрицах.&lt;br /&gt;
Система счисления &lt;a href="http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE-%D0%B4%D0%B5%D1%81%D1%8F%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4"&gt;двоично-десятичная&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Оперативная память: 4096 12-разрядных энергонезависимых ячеек на фееритовых сердечниках. Вот &lt;a href="http://dihalt.ru/operativka.html"&gt;тут&lt;/a&gt; можете посмотреть, как это выглядело. Винтажно, эпично, каждый бит на плате собран вручную.&lt;br /&gt;
&lt;br /&gt;
Ввод-вывод через перфоленту и принтер.&lt;br /&gt;
&lt;br /&gt;
Питание трёхфазное, 380 В. Потребляемая мощность 1,5 кВт. Масса 400 кг. Т.е. для неё отдельный цех и электроподстанция не требуется, достаточно запитать от сети для токарного станка — потому и «персональная» называлась, а вы как хотели.&lt;br /&gt;
&lt;br /&gt;
Общение с машиной производилось посредством языка программирования АЛМИР-65, который, судя по обрывочной информации в интернете, представляет собой... русифицированный диалект Алгола! Вот вам и «забытые советские технологии», бережно уворованные у загнивающего Запада...&lt;br /&gt;
Разумеется, вычислять на Русском Инженерном Алголе системы уравнений для простого пользователя гораздо интереснее, чем смотреть ролики на YouTube или по скайпу обсуждать футбольный матч с приятелем из Канады.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/748777295029581223-6381908368490327955?l=izhurnal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://izhurnal.blogspot.com/feeds/6381908368490327955/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_8307.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6381908368490327955?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/748777295029581223/posts/default/6381908368490327955?v=2" /><link rel="alternate" type="text/html" href="http://izhurnal.blogspot.com/2010/10/blog-post_8307.html" title="«Национальная ОС, которую мы потеряли»" /><author><name>geekless</name><uri>http://www.blogger.com/profile/06009713622902465243</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="25" height="32" src="http://2.bp.blogspot.com/-CdzHefJdI2I/TigQ4umBRhI/AAAAAAAAAWI/uofyt-6PYA0/s220/51830--919357393.png" /></author><thr:total>0</thr:total></entry></feed>

