Вывод похожих (схожих) тем (постов)

Сейчас займемся очень полезным делом – будем внедрять в наш блог систему вывода к конце каждого поста список схожих по тематике/ярлыкам/тегам постов. Зачем это? Во-первых, мало у кого в блог интегрировано многоуровневое меню, а обычным меню и облаком не всегда можно обойтись. Во-вторых, блог – это динамический и постоянно развивающийся ресурс, в котором в большинстве своем находится много статей и сориентироваться читателю, посетившему сайт впервые не всегда просто. А вывод похожих по тематике постов всегда упрощает жизнь посетителю и позволяет более детально изучить область вопросов, связанных по смыслу.
Я перепробовал несколько виджетов, но остановился именно на этом и предлагаю его вам по нескольким причинам – никаких ссылок на другие ресурсы в нем нет, он корректно работает с кириллицей и не выдает дубликатов. Скорость работы скрипта так же высока и вы не зависите от других ресурсов – скрипт исполняется используя ресурсы Blogger.
Итак, для установки сего виджета переходим в админку Bloggera – МакетИзменить HTML. Галочка “Расширить шаблоны виджета” должна быть установлена.
1. Находим код </head> и перед ним вставляем код:

<style> #related-posts { float : left; width : 540px; margin-top:20px; margin-left : 5px; margin-bottom:20px; font : 11px Verdana; margin-bottom:10px; } #related-posts .widget { list-style-type : none; margin : 5px 0 5px 0; padding : 0; } #related-posts .widget h2, #related-posts h2 { font-size : 20px; font-weight : normal; margin : 5px 7px 0; padding : 0 0 5px; } #related-posts a { text-decoration : none; } #related-posts a:hover { text-decoration : none; } #related-posts ul { border : medium none; margin : 10px; padding : 0; } #related-posts ul li { display : block; background : url("http://img153.imageshack.us/img153/2513/dotq.gif") no-repeat 0 0; margin : 0; padding-top : 0; padding-right : 0; padding-bottom : 1px; padding-left : 21px; margin-bottom : 5px; line-height : 2em; border-bottom:1px dotted #cccccc; } </style>
<script type='text/javascript'>
//<![CDATA[
var relatedTitles = new Array();
var relatedTitlesNum = 0;
var relatedUrls = new Array();
function related_results_labels(json)
{
for (var i = 0; i < json.feed.entry.length; i++)
{
var entry = json.feed.entry[i];
relatedTitles[relatedTitlesNum] = entry.title.$t;
for (var k = 0; k < entry.link.length; k++)
{
if (entry.link[k].rel == 'alternate')
{
relatedUrls[relatedTitlesNum] = entry.link[k].href;
relatedTitlesNum++;
break;
}
}
}
}
function removeRelatedDuplicates()
{
var tmp = new Array(0);
var tmp2 = new Array(0);
for(var i = 0; i < relatedUrls.length; i++)
{
if((document.location != relatedUrls[i]) && !contains(tmp, relatedUrls[i]))
{
tmp.length += 1;
tmp[tmp.length - 1] = relatedUrls[i];
tmp2.length += 1;
tmp2[tmp2.length - 1] = relatedTitles[i];
}
}
relatedTitles = tmp2;
relatedUrls = tmp;
}
function contains(a, e)
{
for(var j = 0; j < a.length; j++) if (a[j]==e) return true;
return false;
}
function printRelatedLabels()
{
var r = Math.floor((relatedTitles.length - 1) * Math.random());
var i = 0;
document.write('<ul>');
while (i < relatedTitles.length && i < 20)
{
document.write('<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a></li>');
if (r < relatedTitles.length - 1)
{
r++;
}
else
{
r = 0;
}
i++;
}
document.write('</ul>');
}
//]]>
</script>

Адрес, помеченный красным цветом отвечает за картинку перед текстом ссылки на посты (у меня она имеет следующий вид - dot ). Поменяйте на свое усмотрение.
2. Находим код <data:post.body/> (или <data:post.body/>), сразу после него вставьте следующий код:

<b:if cond='data:blog.pageType == "item"'>
<div id="related-posts">
<font face='Arial' size='3'><b>Еще по теме : </b></font><font color='#FFFFFF'><b:loop values='data:post.labels' var='label'><data:label.name/><b:if cond='data:label.isLast != &quot;true&quot;'>,</b:if><b:if cond='data:blog.pageType == &quot;item&quot;'>
<script expr:src='&quot;/feeds/posts/default/-/&quot; + data:label.name + &quot;?alt=json-in-script&amp;callback=related_results_labels&amp;max-results=5&quot;' type='text/javascript'/></b:if></b:loop> </font>
<script type='text/javascript'> removeRelatedDuplicates(); printRelatedLabels();
</script>
</div></b:if>


Отмеченный красным цветом код отвечает за количество постов, которое будет выводиться в конце каждой статьи.
Момент, который следует учитывать при написании статей – используйте “ярлыки” в пределах разумного и не пытайтесь присвоить максимальное количество ярлыков каждому посту.
Результат работы виджета можно увидеть в конце каждого поста.

____________________________________________________________________________________________________









____________________________________________________________________________________________________
Похожие по тематике статьи :
*

1 коммент.:

ukuwu комментирует...

у меня не выходит(((всё делаю правильно а Похожие по тематике статьи не появляются((((

Отправить комментарий

Комментировать...