16 апр. 2010 г.

Виджет Похожие статьи для Blogger


doctor_vuПо запросам "похожие статьи blogger", "похожие посты blogger", "похожие сообщения blogger" Яндекс не особо порадовал выдачей. Есть кое-какие скрипты, которыми пользуется большинство, но меня они не особо устроили. Потому, порыв блогосферу, наткнулся на замечательного товарища - Doctor VU, который у себя в жж выложил модифицированный скрипт "Ссылки на похожие сообщения для Blogger". Его и установил. Схожесть ссылки определяется только её принадлежностью к метке.

Плюсы скрипта:
1. Отсутствие ссылок на сторонние ресурсы;
2. Возможность исключать из выдачи метки, не имеющие ни одной ссылки;
3. Возможность переименовывать метки в выдаче и объединять разные метки под одним названием;
4. Возможность отдельно указать, какие метки следует всегда исключать из выдачи;
5. Возможность встроить название метки в заголовок;
6. Возможность указать заголовок, который отображается, когда нет ни единой релевантной ссылки;
7. Простота настройки.


Установка скрипта "Похожие статьи":
1. Заходим в панель управления блогом и переходим на вкладку "Изменить HTML". Ставим галочку напротив "Расширить шаблоны виджета".
2. Находим строчку <data:post.body/> и вставляем после неё следующий код:
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div class='similiar'>
<div class='widget-content'>
<br/>
<div id='data2007840981'/>
<div id='data2007840980'/><br/>
<script type='text/javascript'>
var headerN = "Похожие статьи:"; /* Заголовок виджета, когда в нём отображается более чем одна метка. */
var header1 = "Еще статьи из категории \"__LABEL__\":"; /* Заголовок виджета, когда в нём отображается одна метка. Если в заголовке есть слово __LABEL__, то вместо него будет подставлено имя метки. */
var header0 = ""; /* Текст, выводимый, если нет ни одной метки и ссылки. */
var homeUrl3 = &quot;<data:blog.homepageUrl/>&quot;; /* Адрес блога, откуда берём список постов. */
var maxNumberOfPostsPerLabel = 5; /* Максимальное число постов, отображаемых для каждой метки. */
var maxNumberOfLabels = 4; /* Максимальное число отображаемых меток. */
var excludeEmptyLabels = true; /* Скрывать ли метки, для которых нет подходящих постов. true - скрывать, false - отображать. */
var excludeLabels = []; /* Метки, которые не следует отображать. */

/* Смена отображаемых имён.
Здесь перечисляем соответствия реального имени метки и названия, которое будет показано на странице.
Если для двух меток указать одно название, они при отображении склеятся в одну метку.
Если метка здесь не перечисляется, то отображается под своим настоящим названием.
*/
var renameLabels = {};
function is_in(item, array) {
for (k in array)
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) {
var items = receivedItems[k_label];
if (items.length == 0 &amp;&amp; excludeEmptyLabels)
continue;
labelCount++;
}
var labelCount1 = 0;
for (k_label in receivedItems) {
var items = receivedItems[k_label];
if (items.length == 0 &amp;&amp; excludeEmptyLabels)
continue;
var ul = document.createElement(&#39;ul&#39;);
var itemsCount = 0;
for (var k_item in items) {
item = items[k_item];
var li = document.createElement(&#39;li&#39;);
var a = document.createElement(&#39;a&#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(&#39;b&#39;);
h.appendChild(txt);
var div1 = document.createElement(&#39;div&#39;);
if (!(labelCount == 1 &amp;&amp; header1.search &amp;&amp; header1.search(/(LABEL)/) != -1))
div1.appendChild(h);
div1.appendChild(ul);
document.getElementById(&#39;data2007840980&#39;).appendChild(div1);
labelCount1++;
if (labelCount1 == maxNumberOfLabels)
break;
}
var txt;
if (labelCount == 1 &amp;&amp; header1)
txt = document.createTextNode(header1.replace("__LABEL__", k_label));
else if (labelCount)
txt = document.createTextNode(headerN);
else if (header0)
txt = document.createTextNode(headerN);
if (txt)
{
var h = document.createElement("h4");
h.appendChild(txt);
document.getElementById(&#39;data2007840981&#39;).appendChild(h);
}
}
function receiveReply_123(json) {
var label = "";
for (var l = 0; l &lt; json.feed.link.length; l++) {
if (json.feed.link[l].rel == &#39;alternate&#39;) {
var raw = json.feed.link[l].href;
var label = raw.substr(homeUrl3.length+13);
var k;
for (k=0; k&lt;20; k++)
label = label.replace(&quot;%20&quot;, &quot; &quot;);
label = decodeURI(label);
break;
}
}
var labelTitle = label_title(label);
if (typeof receivedItems[labelTitle] != "object")
receivedItems[labelTitle] = [];
for (var k in json.feed.entry) {
var entry = json.feed.entry[k];
var href = "";
for (var kl in entry.link) {
if (entry.link[kl].rel == "alternate") {
href = entry.link[kl].href;
break;
}
}
if(href != "" &amp;&amp; href != location.href) {
var item = { "href" : href, "title" : entry.title.$t};
receivedItems[labelTitle].push(item);
}
}
labelReceived();
}
function sendQueryForLabel(query, label) {
var script = document.createElement(&#39;script&#39;);
script.setAttribute(&#39;src&#39;, query + &#39;feeds/posts/default/-/&#39;
+ label +
&#39;?alt=json-in-script&amp;callback=receiveReply_123&#39;);
script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);
document.documentElement.firstChild.appendChild(script);
}
var parsedlabels = [];
var labelsCount = 0;
function list_items(textLabel) {
if (labelsCount &gt;= maxNumberOfLabels ||
is_in(textLabel, excludeLabels) ||
is_in(textLabel, parsedlabels)) {
labelReceived();
return;
}
labelsCount++;
parsedlabels.push(textLabel);
sendQueryForLabel(homeUrl3, textLabel);
}
<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
totalLabels++;
</b:loop>
</b:loop>
<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
list_items(&quot;<data:label.name/>&quot;);
</b:loop>
</b:loop>
</script>
</div>
</div>
</b:if>
3. Изменяем настройки виджета на свой вкус.
4. Пользуемся!

Если вам необходимы какие-то особые возможности, которые данный код предоставить не в состоянии, вы можете обратиться за помощью, посетив ЖЖ автора скрипта.

Источник: Виджет Похожие статьи для Blogger.


blog comments powered by Disqus

Получать на E-mail


Статистика


Архивы манимейкера

 

Copyright © Идейный манимейкер пишет с 2009 года. Чёрно-белое SEO и SMO.