Вывод связных по тематике сообщений (related posts) в Blogspot

воскресенье, 9 августа 2009 г.
Постоянно использую связные посты в своих блогах на Wordpress - для этого там имеется плагин Simple Tags. Вообще он отвечает за работу с тегами, но, кроме того, реализует функциональность связных по тематике постов.

Зачем это нужно? – спросите вы. Все очень просто – во-первых, это отличный способ показать читателю еще интересные публикации в вашем блоге дабы он задержался подольше. Во-вторых, связные посты – дополнительная внутренняя перелинковка для блога, которая может привлечь определенное число низкочастотного трафика из поисковиков. То есть, грубо говоря, related posts – полезная опция для людей и машин (поисковых, разумеется:)

связные записи теги


Нашел в сети несколько вариантов для реализации связных сообщений, но остановился на этом. Привлекла простота установки и собственно работоспособность – некоторые коды работать почему-то не захотели. Итак, чтобы добавить связные посты, заходим в меню Макет, выбираем «Изменить HTML», а также ставим галочку в поле расширить шаблоны виджета. Далее находим в шаблоне строку

<data:post.body/>

Она отвечает за вывод сообщений блога. После нее добавляем такой код:

<b:if cond='data:blog.pageType == "item"'>
<div class='similiar'>
<!-- *****************http://hoctro.blogspot.com*****Jan,2007****************** -->
<!-- *****************Related Articles by Labels - Take Two****************** -->


<!--
Modified by JackBook.Com to make it easier to use.
1. Now, users don't need to change anything to use this widget. just copy and paste, and done!
2. The current article will also be listed, now it's no more.
-->


<div class='widget-content'>
<h3>Related Posts by Categories</h3>
<div id='data2007'/><br/><br/>
<div id='hoctro'>
Widget by <u><a href='http://hoctro.blogspot.com'>Hoctro</a></u> | <u><a href='http://www.jackbook.com/' title='Related Posts on Blogger Modified by JackBook.Com. Read More?'>Jack Book</a></u>
</div>
<script type='text/javascript'>


var homeUrl3 = &quot;<data:blog.homepageUrl/>&quot;;
var maxNumberOfPostsPerLabel = 4;
var maxNumberOfLabels = 10;


maxNumberOfPostsPerLabel = 100;
maxNumberOfLabels = 3;


function listEntries10(json) {
var ul = document.createElement(&#39;ul&#39;);
var maxPosts = (json.feed.entry.length &lt;= maxNumberOfPostsPerLabel) ?
json.feed.entry.length : maxNumberOfPostsPerLabel;
for (var i = 0; i &lt; maxPosts; i++) {
var entry = json.feed.entry[i];
var alturl;


for (var k = 0; k &lt; entry.link.length; k++) {
if (entry.link[k].rel == &#39;alternate&#39;) {
alturl = entry.link[k].href;
break;
}
}
var li = document.createElement(&#39;li&#39;);
var a = document.createElement(&#39;a&#39;);
a.href = alturl;


if(a.href!=location.href) {
var txt = document.createTextNode(entry.title.$t);
a.appendChild(txt);
li.appendChild(a);
ul.appendChild(li);
}
}
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;);
var txt = document.createTextNode(label);
var h = document.createElement(&#39;b&#39;);
h.appendChild(txt);
var div1 = document.createElement(&#39;div&#39;);
div1.appendChild(h);
div1.appendChild(ul);
document.getElementById(&#39;data2007&#39;).appendChild(div1);
}
}
}
function search10(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=listEntries10&#39;);
script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);
document.documentElement.firstChild.appendChild(script);
}


var labelArray = new Array();
var numLabel = 0;


<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
textLabel = &quot;<data:label.name/>&quot;;

var test = 0;
for (var i = 0; i &lt; labelArray.length; i++)
if (labelArray[i] == textLabel) test = 1;
if (test == 0) {
labelArray.push(textLabel);
var maxLabels = (labelArray.length &lt;= maxNumberOfLabels) ?
labelArray.length : maxNumberOfLabels;
if (numLabel &lt; maxLabels) {
search10(homeUrl3, textLabel);
numLabel++;
}
}
</b:loop>
</b:loop>
</script>
</div>


</div>
</b:if>

Если при вставке выдаются ошибки, вы можете посмотреть код в текстовом файле здесь.

Сохраняем шаблон и наслаждаемся похожими по тематике постами. Но радость продлится не долго, ибо для русскоязычных блогов могут возникнуть небольшие проблемы. Об этом и немного большем далее.

Первое замечание, которое хотелось бы сказать – если у вас нестандартный шаблон и после поста блога выводится множество различных блоков – голосование, adsense и т.п., то вы можете добавлять код для related posts после них, до, между блоками и как вообще угодно. Можно даже после комментариев разместить.

Момент номер 2. В коде имеются переменные

maxNumberOfPostsPerLabel = 100;
maxNumberOfLabels = 3;

Если я правильно понял их смысл, то первая задает количество связных постов для каждого тега (минут 1), а вторая количество тегов. Например, у меня установлено:

maxNumberOfPostsPerLabel = 3;
maxNumberOfLabels = 7;

Здесь для 7 тегов поста будут выбраны по 2 (3 минус 1) связные записи (собственно они зависят от тегов, как вы понимаете). Теоретически максимальное число связных постов может быть 2*7 = 14.

Замечание 3. В коде автора есть ссылки на него и некоторое другое оформление – все это можете убирать, исходя из своих моральных или этических соображений. То есть внимательно изучите приведенный выше код – увидите там то, о чем я говорю.

Ну и последнее, что хочется сказать – наверное самое главное для русскоязычных блогов. Дело в том, что в коде выводится название метки, для которой подбираются связные посты, причем выводится текст не очень хорошо для русских тегов:



Поэтому я убрал эту опцию вообще, закомментировав несколько строчек исходного кода:

 var txt = document.createTextNode(label);
// var h = document.createElement(&#39;b&#39;);
// h.appendChild(txt);
var div1 = document.createElement(&#39;div&#39;);
// div1.appendChild(h);
div1.appendChild(ul);
document.getElementById(&#39;data2007&#39;).appendChild(div1);


Вроде работает. Если посмотреть в код, там, конечно, есть еще лишние теги некоторые, но править код дальше я уже не рискнул – тем более, что все и так правильно выводится.

P.S. Постовой. Холодильники ведущих производителей в нашем интернет магазине.
Как построить свои форекс стратегии на основе опционов.
Блог для веб-мастера - про заработок в интернете на сайте.
Понравился пост? Подпишись на обновления блога по BlogoHelp RSSRSS, BlogoHelp по EmailEmail или twitter!
Как вам пост?   
Related Posts with Thumbnails