NEXT主题中使用畅言的坑

NEXT主题中使用畅言的坑

适用NEXT版本:从NEXT封装畅言的版本到5.1.2版本

踩坑环节

目前在使用中遇到如下几个坑:

  1. 添加了分类页、归档页、标签页后,当在浏览器打开控制台后进入上述页面,就会报错,而且是1秒报一次,无限报下去。当然,不影响使用,但是有丝毫强迫症的人,绝对受不了。老子曰(我爹说):“癞蛤蟆蹦脚面上,不咬人,膈应人。”

  2. 有评论的文章,在首页评论数永远是0,在文章里面计数正常。

  3. 这个坑与我上一篇文章有关联,如果你的代码是在GitHub上,并且域名映射也做到了GitHub,那么忽略此坑,因为GitHub内部已经给你的域名做了301重定向。如果你hexo代码在自己服务器上,那么你可以在带www的文章下评论完,然后去不带www的文章下看看,评论是否还在。

跳坑环节

针对上诉三个问题:

  1. 下方贴出NEXT部分源码:(文件坐标:next/layout/_third-party/comments/changyan.swig:1~4行)

    1
    2
    3
    4
    5
    {% if theme.changyan.enable and theme.changyan.appid and theme.changyan.appkey %}
    {% if is_home() %}
    <script id="cy_cmt_num" src="https://changyan.sohu.com/upload/plugins/plugins.list.count.js?clientId={{theme.changyan.appid}}"></script>
    {% else %}
    ...省略

    问题根本原因

    大家只需要看判断条件就好,源码中只判断了是否为首页。就是说默认只会出现两种情况,有评论框并且需要计数(文章页)与无评论框但需要计数(首页),其实还有第三种情况,就是标签页、分类页这种既不要评论框也不要计数。所以按照源码会在标签页、分类页中加入本不应该引入的畅言js代码,而我们还又在这些页面设置comments:false ,导致代码引入残缺,找不到idSOHUCSDIV,所以不停报错。

    解决办法

    只需要将判断条件

    1
    {% else %}

    改为

    1
    {% elseif page.comments %}
  2. 下方贴出NEXT部分源码:(文件坐标:next/layout/_mavro/post.swig:175~178行)

    1
    2
    3
    <a href="{{ url_for(post.path) }}#SOHUCS" itemprop="discussionUrl">
    <span id="url::{{ post.permalink }}" class="cy_cmt_count" data-xid="{{ post.path }}" itemprop="commentsCount" ></span>
    </a>

    问题根本原因

    如果你的文章标题中含有中文,那么可能就会出现这个问题。在畅言中对你文章的url中文做了encode,但是在NEXT主题中去查询时,并未处理,导致畅言查不到评论。

    解决办法

    只需要将post.permalink这个值包一层encodeURI方法,如下修改:

    1
    <span id="url::{{ encodeURI(post.permalink) }}" class="cy_cmt_count" data-xid="{{ post.path }}" itemprop="commentsCount" ></span>
  3. 第三个问题按照上一篇文章中,做301重定向即可解决。

解决方法有很多,我以上列出只是一种,并非绝对,大家知道问题所在就好。