Related posts, blogger hack, связанные ссылки, похожие сообщения, blogger widget
Related posts - довольно удобный плагин для Wordpress, который позволяет задержать читателя на блоге, предоставляя ссылки на другие похожие публикации. Подбор аналогичных публикаций осуществляется по разным критериям и далеко не всегда верный. Как известно, установка дополнительных модулей не предусмотрена на Blogspot.com. Поэтому предлагаемое решение использует другой принцип. В его основе заложена выборка по рубрикам или категориям (labels). Данный хак, реализованный в виде виджета на java script, добавляет в конец публикации ссылки на другие посты из тех же рубрик. Вы можете видеть как это работает на примере этого блога. Ссылки показываются только на странице публикации, вместе с комментариями и другой информацией, имеющей отношение непосредственно к определенной статье.
Установка
Зайдите в меню редактирования шаблона, в раздел "изменить 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> <!-- Конец кода: Связанные статьи из этой категории. Виджет. -->
Вместо текста "Предлагаю ознакомиться с аналогичными статьями" можете использовать свой вариант. Сохраните внесенные в шаблон изменения.
Примечание
В случае, если статья единственная в рубрике, будет отображаться текст виджета без ссылок. Если рубрик очень много, будут показаны не все.
Данный виджет найден на просторах зарубежного Интернета. Автор публикации любезно согласился модифицировать код для правильного отображения кодировки русскоязычных названий рубрик.