11 мар. 2011 г.

Ссылки на схожие сообщения в конце поста (related posts)

Ссылки на схожие сообщения в конце поста (related posts)

Итак,  самый простой способ сделать так, чтобы в блоге, после каждого сообщения автоматически появлялось несколько ссылок на ваши же посты со схожей тематикой.
О минусах и плюсах этого способа я отчасти уже писал в предыдущем посте.
Если подробнее: этот способ работает с помощю тегов, которыми помечено сообщение. Он просто подбирает и даёт ссылки на сообщения, у которых стоят те же самые теги. Способ, как я уже говорил, несколько грубоватый.
Количество ссылок можно регулировать и прописывать самому.
Способ этот я взял без изменения  тут, о чём открыто заявляю (он, впрочем, и сам его позаимствовал, о чём тоже открыто заявляет).
Он самый простой, и отличается тем, что ссылки на схожие сообщения будут появляться непосредственно под постом, до комментов.
Как его осуществить:

Как обычно, на всякий случай резервируем, т.е. сохраняем на жёсткий диск наш нынешний шаблон, чтобы, если что, можно было бы его восстановить.
Затем так же, в макет / изменить HTML видим сверху справа, над окном с содержанием кода шаблона, опцию "Расширить шаблоны виджета". Ставим туда галочку.
После этого находим в коде строку
<data:post.body/> (если бы мы не поставили предварительно эту галочку - то этой строки мы не увидим).
И после неё вставляем следующий код:

 <!-- Связанные статьи из этой категории. Виджет. Начало -->

<b:if cond='data:blog.pageType == &quot;item&quot;'>
<div class='similiar'>

<div class='widget-content'>
<h4>Предлагаю ознакомиться с аналогичными статьями:</h4>
<div id='data2007'/><br/><br/>

<script type='text/javascript'>

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

maxNumberOfPostsPerLabel = 6;
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(decodeURI(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>

<!-- Конец кода: Связанные статьи из этой категории. Виджет. -->



Вместо фразы "Предлагаю ознакомиться с аналогичными статьями" можно написать что-нибудь другое.
Можно моделировать кол-во появляющихся после поста ссылок (число в конце строки maxNumberOfPostsPerLabel = 5;) и кол-во появляющихся тегов (число в конце строки maxNumberOfLabels = 3;).
 

Источник 

Комментариев нет: