декабря 21, 2007

Связанные публикации на Blogspot

Related posts, blogger hack, связанные ссылки, похожие сообщения, blogger widget

Related posts - довольно удобный плагин для Wordpress, который позволяет задержать читателя на блоге, предоставляя ссылки на другие похожие публикации. Подбор аналогичных публикаций осуществляется по разным критериям и далеко не всегда верный. Как известно, установка дополнительных модулей не предусмотрена на Blogspot.com. Поэтому предлагаемое решение использует другой принцип. В его основе заложена выборка по рубрикам или категориям (labels). Данный хак, реализованный в виде виджета на java script, добавляет в конец публикации ссылки на другие посты из тех же рубрик. Вы можете видеть как это работает на примере этого блога. Ссылки показываются только на странице публикации, вместе с комментариями и другой информацией, имеющей отношение непосредственно к определенной статье.

Установка

Зайдите в меню редактирования шаблона, в раздел "изменить 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>                

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

Вместо текста "Предлагаю ознакомиться с аналогичными статьями" можете использовать свой вариант. Сохраните внесенные в шаблон изменения.

Примечание

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

Данный виджет найден на просторах зарубежного Интернета. Автор публикации любезно согласился модифицировать код для правильного отображения кодировки русскоязычных названий рубрик.

Technorati теги: ,,

15 комментариев:

  1. Здравствуйте!
    ------------------------------------------------
    Между:
    Предлагаю озна.....алогичными статьями:
    (большой разрыв)
    Блоги
    (большой разрыв)
    ------------------------------------------------
    Смотрится как то разорвано:список статей где-то внизу-связанность плохая.Я у себя(у меня такой же шаблон, только голова оранжевая)
    убрал br br в коде
    ----------------------------------------------
    Предлагаю ознакомиться с аналогичными статьями:
    div id='data2007'
    ----------------------------------------------
    но это не помогло,осталось всё по прежнему.
    Что не так?

    ОтветитьУдалить
  2. Данный отступ изменяется стилем заголовка h4. Измените HTML код шаблона, добавив к стилям «h4 {margin: 0;}» (само собой без кавычек). Для управления только верхним полем используйте свои значения, например «margin: 5px 0 0 0;»

    Лично мне эти изменения не понравились.

    ОтветитьУдалить
  3. Пример работоспособности расположен на этом блоге.
    Что-то не понятно, что именно не работает?

    ОтветитьУдалить
  4. Никакой ошибки не выдаётся - просто никаких ссылок на похожие сообщения под постами не появляется.

    ОтветитьУдалить
  5. Схема определяет связанность постов по одному критерию - метке (рубрике, label). Если нет постов из этой же рубрики (с такой же меткой), то ничего и не выводится. Это первая причина.

    ОтветитьУдалить
  6. В том-то и дело, что они есть.

    ОтветитьУдалить
  7. Пациента сложно лечить вслепую.
    На таинственный сайт с неработающим скриптом можно посмотреть?

    ОтветитьУдалить
  8. Извиняюсь, тупо тормознул:
    Я думал, что похожие сообщения появятся непосредственно под каждым сообщением, даже не заходя в само конкретное сообщение.
    Они появились, но, само собой, если заходить в каждое сообщение по отдельности.

    ОтветитьУдалить
  9. Можно сделать и по первому варианту, но только код надо вставлять в другое место и немного его подправить. Но это уже материал для отдельной статьи :-)

    Наш диспут подсказал мне новую идею использования форума для решения вопросов, обсуждающихся на этом блоге.

    Так что вам спасибо!

    ОтветитьУдалить
  10. выдаёт ошибку bX-btce2j... ничего не пойму... почему не получается??

    ОтветитьУдалить
  11. Похоже на глюк, который появляется при смене кода шаблона Блогспот. В определенное время суток сменить дизайн на Блоггере не представляется возможным по непонятным причинам. Предлагаю попробовать вносить изменения в разное время суток.

    ОтветитьУдалить
  12. Вот и у меня не работает...
    Может через время начнёт...
    Для всех шаблонов код подходит?
    сайт этот --->> http://www.kinodok.co.cc/

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

    ОтветитьУдалить

Комментирование запрещено.

Примечание. Отправлять комментарии могут только участники этого блога.