【问题标题】:Disqus comment count doesn't show up with TurbolinksTurbolinks 不显示 Disqus 评论计数
【发布时间】:2014-05-11 15:15:41
【问题描述】:

我创建了一个简单的 Rails 4 cms。在主页以及类别和存档页面上有一个带有 disqus 评论计数的文章列表。

负责显示评论计数的 disqus 代码就在结束正文标记之前。

当我启用 Turbolinks 时,评论计数仅在初始页面加载时显示。如果我访问一篇文章然后返回文章列表,则没有评论计数。如果我重新加载页面,评论计数就在那里。

我尝试添加 jquery.turbolinks gem。 我试图编辑 disqus 代码,使其在 page:change 或 page:load 上执行。 我试着把它放在脑袋里。 我尝试在代码中添加 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 也没有结果。

有人遇到过这个问题吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 disqus turbolinks


    【解决方案1】:

    我无法使用默认的 disqus 评论计数代码来完成这项工作,因此我使用了 disqus api,它的工作原理就像一个魅力:

        $(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);
    
                }
              }
            });
          });
    

    【讨论】:

      【解决方案2】:

      这是一个 Turbolinks 问题。使用 Turbolinks,页面将在无需完全重新加载的情况下发生变化,因此您不能依赖 DOMContentLoaded 或 jQuery.ready() 来触发您的代码。

      试试这个:添加jquery.turbolinks gem,更新application.js并重启服务器。

      【讨论】:

      • 感谢您的回答。我已经尝试添加 jquery turbolinks gem,但 disqus 评论计数仍然只在初始页面加载时可见。
      • 再次感谢您的回答,但问题仍然存在。我用 disqus 代码更新了我的答案。
      猜你喜欢
      • 2015-10-11
      • 1970-01-01
      • 2014-02-13
      • 2013-08-07
      • 2013-04-21
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多