Ссылки на схожие сообщения в конце поста (related posts)
Итак, самый простой способ сделать так, чтобы в блоге, после каждого сообщения автоматически появлялось несколько ссылок на ваши же посты со схожей тематикой.
О минусах и плюсах этого способа я отчасти уже писал в предыдущем посте.
Если подробнее: этот способ работает с помощю тегов, которыми помечено сообщение. Он просто подбирает и даёт ссылки на сообщения, у которых стоят те же самые теги. Способ, как я уже говорил, несколько грубоватый.
Количество ссылок можно регулировать и прописывать самому.
Способ этот я взял без изменения тут, о чём открыто заявляю (он, впрочем, и сам его позаимствовал, о чём тоже открыто заявляет).
Он самый простой, и отличается тем, что ссылки на схожие сообщения будут появляться непосредственно под постом, до комментов.
Как его осуществить:
Как обычно, на всякий случай резервируем, т.е. сохраняем на жёсткий диск наш нынешний шаблон, чтобы, если что, можно было бы его восстановить.
Затем так же, в макет / изменить HTML видим сверху справа, над окном с содержанием кода шаблона, опцию "Расширить шаблоны виджета". Ставим туда галочку.
После этого находим в коде строку <data:post.body/> (если бы мы не поставили предварительно эту галочку - то этой строки мы не увидим).
И после неё вставляем следующий код:
<!-- Связанные статьи из этой категории. Виджет. Начало -->
<b:if cond='data:blog.pageType == "item"'>
<div class='similiar'>
<div class='widget-content'>
<h4>Предлагаю ознакомиться с аналогичными статьями:</h4>
<div id='data2007'/><br/><br/>
<script type='text/javascript'>
var homeUrl3 = "<data:blog.homepageUrl/>";
var maxNumberOfPostsPerLabel = 5;
var maxNumberOfLabels = 3;
maxNumberOfPostsPerLabel = 6;
maxNumberOfLabels = 3;
function listEntries10(json) {
var ul = document.createElement('ul');
var maxPosts = (json.feed.entry.length <= maxNumberOfPostsPerLabel) ?
json.feed.entry.length : maxNumberOfPostsPerLabel;
for (var i = 0; i < maxPosts; i++) {
var entry = json.feed.entry[i];
var alturl;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
alturl = entry.link[k].href;
break;
}
}
var li = document.createElement('li');
var a = document.createElement('a');
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 < json.feed.link.length; l++) {
if (json.feed.link[l].rel == 'alternate') {
var raw = json.feed.link[l].href;
var label = raw.substr(homeUrl3.length+13);
var k;
for (k=0; k<20; k++) label = label.replace("%20", " ");
var txt = document.createTextNode(decodeURI(label));
var h = document.createElement('b');
h.appendChild(txt);
var div1 = document.createElement('div');
div1.appendChild(h);
div1.appendChild(ul);
document.getElementById('data2007').appendChild(div1);
}
}
}
function search10(query, label) {
var script = document.createElement('script');
script.setAttribute('src', query + 'feeds/posts/default/-/'
+ label +
'?alt=json-in-script&callback=listEntries10');
script.setAttribute('type', 'text/javascript');
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 = "<data:label.name/>";
var test = 0;
for (var i = 0; i < labelArray.length; i++)
if (labelArray[i] == textLabel) test = 1;
if (test == 0) {
labelArray.push(textLabel);
var maxLabels = (labelArray.length <= maxNumberOfLabels) ?
labelArray.length : maxNumberOfLabels;
if (numLabel < maxLabels) {
search10(homeUrl3, textLabel);
numLabel++;
}
}
</b:loop>
</b:loop>
</script>
</div>
</div>
</b:if>
<!-- Конец кода: Связанные статьи из этой категории. Виджет. -->
Вместо фразы "Предлагаю ознакомиться с аналогичными статьями" можно написать что-нибудь другое.
Можно моделировать кол-во появляющихся после поста ссылок (число в конце строки maxNumberOfPostsPerLabel = 5;) и кол-во появляющихся тегов (число в конце строки maxNumberOfLabels = 3;).
Источник
О минусах и плюсах этого способа я отчасти уже писал в предыдущем посте.
Если подробнее: этот способ работает с помощю тегов, которыми помечено сообщение. Он просто подбирает и даёт ссылки на сообщения, у которых стоят те же самые теги. Способ, как я уже говорил, несколько грубоватый.
Количество ссылок можно регулировать и прописывать самому.
Способ этот я взял без изменения тут, о чём открыто заявляю (он, впрочем, и сам его позаимствовал, о чём тоже открыто заявляет).
Он самый простой, и отличается тем, что ссылки на схожие сообщения будут появляться непосредственно под постом, до комментов.
Как его осуществить:
Как обычно, на всякий случай резервируем, т.е. сохраняем на жёсткий диск наш нынешний шаблон, чтобы, если что, можно было бы его восстановить.
Затем так же, в макет / изменить HTML видим сверху справа, над окном с содержанием кода шаблона, опцию "Расширить шаблоны виджета". Ставим туда галочку.
После этого находим в коде строку <data:post.body/>
И после неё вставляем следующий код:
<!-- Связанные статьи из этой категории. Виджет. Начало -->
<b:if cond='data:blog.pageType == "item"'>
<div class='similiar'>
<div class='widget-content'>
<h4>Предлагаю ознакомиться с аналогичными статьями:</h4>
<div id='data2007'/><br/><br/>
<script type='text/javascript'>
var homeUrl3 = "<data:blog.homepageUrl/>";
var maxNumberOfPostsPerLabel = 5;
var maxNumberOfLabels = 3;
maxNumberOfPostsPerLabel = 6;
maxNumberOfLabels = 3;
function listEntries10(json) {
var ul = document.createElement('ul');
var maxPosts = (json.feed.entry.length <= maxNumberOfPostsPerLabel) ?
json.feed.entry.length : maxNumberOfPostsPerLabel;
for (var i = 0; i < maxPosts; i++) {
var entry = json.feed.entry[i];
var alturl;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
alturl = entry.link[k].href;
break;
}
}
var li = document.createElement('li');
var a = document.createElement('a');
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 < json.feed.link.length; l++) {
if (json.feed.link[l].rel == 'alternate') {
var raw = json.feed.link[l].href;
var label = raw.substr(homeUrl3.length+13);
var k;
for (k=0; k<20; k++) label = label.replace("%20", " ");
var txt = document.createTextNode(decodeURI(label));
var h = document.createElement('b');
h.appendChild(txt);
var div1 = document.createElement('div');
div1.appendChild(h);
div1.appendChild(ul);
document.getElementById('data2007').appendChild(div1);
}
}
}
function search10(query, label) {
var script = document.createElement('script');
script.setAttribute('src', query + 'feeds/posts/default/-/'
+ label +
'?alt=json-in-script&callback=listEntries10');
script.setAttribute('type', 'text/javascript');
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 = "<data:label.name/>";
var test = 0;
for (var i = 0; i < labelArray.length; i++)
if (labelArray[i] == textLabel) test = 1;
if (test == 0) {
labelArray.push(textLabel);
var maxLabels = (labelArray.length <= maxNumberOfLabels) ?
labelArray.length : maxNumberOfLabels;
if (numLabel < maxLabels) {
search10(homeUrl3, textLabel);
numLabel++;
}
}
</b:loop>
</b:loop>
</script>
</div>
</div>
</b:if>
<!-- Конец кода: Связанные статьи из этой категории. Виджет. -->
Вместо фразы "Предлагаю ознакомиться с аналогичными статьями" можно написать что-нибудь другое.
Можно моделировать кол-во появляющихся после поста ссылок (число в конце строки maxNumberOfPostsPerLabel = 5;) и кол-во появляющихся тегов (число в конце строки maxNumberOfLabels = 3;).
Источник
Комментариев нет:
Отправить комментарий