Счетчик комментариев Disqus не отображается с Turbolinks

Я создал простой Rails 4 cms. На главной странице, а также на страницах категорий и архивов есть список статей с количеством комментариев disqus.

Код disqus, отвечающий за отображение количества комментариев, находится непосредственно перед закрывающим тегом body.

Когда я включаю Turbolinks, количество комментариев отображается только при начальной загрузке страницы. Если я просматриваю статью, то возвращаюсь к списку статей, количество комментариев не учитывается. Если я перезагружу страницу, количество комментариев будет там.

Я попытался добавить гем jquery.turbolinks. Я попытался отредактировать код disqus, чтобы он выполнялся на странице: изменение или страница: загрузка. Я пытался засунуть его в голову. Я попытался добавить идентификаторы disqus в код.

ОБНОВЛЕНИЕ: вот что я пытаюсь сделать прямо сейчас (отредактировал мое короткое имя):

var disqus_shortname = 'my_shortname'; // required: replace example with your forum shortname

        /* * * DON'T EDIT BELOW THIS LINE * * */
        ($(document).on('page:change',function () {
            var s = document.createElement('script'); s.async = true;
            s.type = 'text/javascript';
            s.src = '//' + disqus_shortname + '.disqus.com/count.js';
            (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
        })());

Таким образом, количество комментариев отображается при начальной загрузке страницы, а также при первом посещении страниц списка сообщений. Но когда я посещаю их во второй раз, количество комментариев не отображается. Пробовал это с page: load и page: update также безрезультатно.

Кто-нибудь сталкивался с этой проблемой?


person Mate Kaszas    schedule 11.05.2014    source источник


Ответы (2)


Я не мог заставить это работать с кодом подсчета комментариев disqus по умолчанию, поэтому вместо этого я использовал API-интерфейс disqus, который работает как шарм:

    $(document).on('page:change', function () {
        var disqusPublicKey = "MY_PUBLIC_KEY"; // Replace with your own public key
        var disqusShortname = "my_shortname"; // Replace with your own shortname

        var urlArray = [];

        $('.comment-link-marker').each(function () {
          var url = $(this).attr('data-disqus-url');
          urlArray.push('link:' + url);
        });

        $.ajax({
          type: 'GET',
          url: "https://disqus.com/api/3.0/threads/set.jsonp",
          data: { api_key: disqusPublicKey, forum : disqusShortname, thread : urlArray },
          cache: false,
          dataType: 'jsonp',
          success: function (result) {

            for (var i in result.response) {

              var countText = " comments";
              var count = result.response[i].posts;

              if (count == 1)
                countText = " comments";

              $('a[data-disqus-url="' + result.response[i].link + '"]').html(count + countText);

            }
          }
        });
      });
person Mate Kaszas    schedule 13.05.2014

Это проблема Turbolinks. С Turbolinks страницы будут изменяться без полной перезагрузки, поэтому вы не можете полагаться на DOMContentLoaded или jQuery.ready() для запуска вашего кода.

Попробуйте следующее: добавьте гем jquery.turbolinks, обновите application.js и перезапустите сервер.

person crispychicken    schedule 11.05.2014
comment
Спасибо за ответ. Я уже пытался добавить гем jquery turbolinks, но количество комментариев disqus по-прежнему отображается только при начальной загрузке страницы. - person Mate Kaszas; 12.05.2014
comment
Еще раз спасибо за Ваш ответ, но проблема все еще существует. Я обновил свой ответ кодом disqus. - person Mate Kaszas; 13.05.2014