title: hexo next主题为博客添加分享功能

date: 2018-01-06 20:20:02

tags: [hexo博客, 博客配置]

categories: hexo next主题配置

今天心血来潮,决定给博客添加分享功能,百度上首先是找到了使用shareSDK的分享功能,最后在实践的过程中发现它添加时步骤比较多,添加完成后效果比较丑(就是一个长条的浅蓝色按钮),而且点击后想要退出分享比较麻烦(它的取消按钮实在太难找了,它在页面最下方的位置,呈现浅灰色,这个设计太反人类了,决定放弃它了)。在next主题的官方的文档中发现它自身集成了百度分享的功能,所以决定采用百度了。

解决思路

根据官方文档的说法,只需要添加/修改字段 baidushare,值为 true。即可

官方文档

但是我自己改了之后发现并没有出现分享功能,下面是我的主体配置文件的部分代码

# Baidu Share
# Available value:
# button | slide
# Warning: Baidu Share does not support https.
#baidushare:
#type: button
baidushare: true

网上也没找到什么靠谱的资料,没办法,自己来分析源代码,找找问题在哪吧

由于hexo本身是使用node.js将Markdown渲染成静态页面,所以百度分享的相关代码必然会出现在HTML页面中,我们通过查看生成的HTML发现并没有对应的分享的代码,也就是说配置并没有启用。现在初步估计问题应该是出现在Markdown转化为HTML的过程中。

hexo中文章使用的模板是主题目录中的layout/post.swig文件,文件中关于分享功能的代码大致出现在第16行

<div class="post-spread">
{% if theme.jiathis %}
{% include '_partials/share/jiathis.swig' %}
{% elseif theme.baidushare %}
{% include '_partials/share/baidushare.swig' %}
{% elseif theme.add_this_id %}
{% include '_partials/share/add-this.swig' %}
{% elseif theme.duoshuo_shortname and theme.duoshuo_share %}
{% include '_partials/share/duoshuo_share.swig' %}
<!--后面的两句是我为了使用sharesdk的分享功能而添加的,原版没有-->
{% elseif theme.sharesdk %}
{% include '_partials/share/sharesdk.swig' %}
{% endif %}
</div>

从代码上看,next主题支持许多中分享方式。它会先判断配置文件中对应的配置打开与否执行相应的代码,其中theme代表的是主题的配置文件。

** ps:当时我在配置sharesdk的时候发现只有注释掉其他的分享功能才能正常启用sharesdk,从代码上来看如果其他的打开了,根本就不会加载sharesdk的配置文件,要正常使用sharesdk的分享功能,要么修改判断的顺序,要么在配置文件中注释掉其他的分享功能 **

百度分享功能加载的是文件配置文件目录下的_partials/share/baidushare.swig,打开该文件:

{% if theme.baidushare.type === "button" %}
<div class="bdsharebuttonbox">
<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a>
<a href="#" class="bds_douban" data-cmd="douban" title="分享到豆瓣网"></a>
<a href="#" class="bds_sqq" data-cmd="sqq" title="分享到QQ好友"></a>
<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a>
<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a>
<a href="#" class="bds_tieba" data-cmd="tieba" title="分享到百度贴吧"></a>
<a href="#" class="bds_twi" data-cmd="twi" title="分享到Twitter"></a>
<a href="#" class="bds_fbook" data-cmd="fbook" title="分享到Facebook"></a>
<a href="#" class="bds_more" data-cmd="more"></a>
<a class="bds_count" data-cmd="count"></a>
</div>
....
{% endif %}

代码中先判断了theme.baidushare.type的值,如果为button则执行后面的代码,原始代码中判断了两种情况一种是theme.baidushare.type为button,另一种是为slide,只有为这两种值才会执行代码,再次检查配置文件看看它的类型值是否正确。最后发现baidushare以及它下面的type被注释掉了,由于它没有读取到这个值,所以这两中情况都不满足,也就不会生成对应的分享代码,所以打开这两行的代码,最终这块的配置如下:

baidushare:
type: button
baidushare: true

重新生成一下,发现百度分享的按钮出现了。

至此问题解决了。

总结

百度了很久没有解决,还是还是带着绝望的心情看源码看出了点头绪。最后我想说:RTFSC大法好(Linus大神说的:Read The Fucking Source Code....)

实际效果请移步到此

最后的最后

最后说点题外话,关于求助这件事,其实很多时候看源代码或者帮助文档能解决我们差不多很多问题,如果实在没有,一般你遇到的问题别人可能也遇到过,善用搜索引擎能解决所有问题,之前看到一个说法:普通程序员 + google = 超级程序员。所以在平时要养成一些习惯,仔细阅读帮助文档,阅读源码,善用搜索引擎,再实在没辙了再上论坛提问。

下面是经常见到的在一些问答网站回答的一些缩写,我觉得很有趣也很有用,在此将其列举出来:

  • RTFSC(Read the fucking source code)
  • RTFM(Read the fucking manual)
  • UTFH (“Use The Fucking Help”)
  • STFW (“Search The Fucking Web”)
  • STFG (“Search The Fucking Google” or “Search The Fantastic Google”)
  • GIYF (“Google Is Your Friend”)
  • JFGI (“Just Fucking Google It”)
  • UTSL (“Use The Source Luke”—alternately, RTFS)
  • RTFA (“Read The Fucking Article”—common on news forums such as Fark.com[3] and Slashdot)
  • RTFE (“Read The Fucking Email”)
  • RTFC (“Read The Fucking Code,” or “Reboot The Fucking Computer”)
  • RTFQ (“Read The Fucking Question”)
  • LMGTFY (“Let Me Google That For You”)
  • WIDGI (“When In Doubt Google It” - Also occasionally ‘WIDGIT’)
  • FIOTI (“Find It On The Internet”)

通常,给出这些答案的人已经通过这些办法找到了解决问题的关键,正在一边看一边敲键盘。这些回复意味着他认为:第一,你要的信息很容易找到。第二,自已找 要比别人喂到嘴里能学得更多。你不应该觉得这样就被冒犯了,按黑客的标准,他没有不理你就是在向你表示某种尊敬,你反而应该感谢他热切地想帮助你。

hexo next主题为博客添加分享功能的更多相关文章

  1. 为CSDN博客添加打赏功能

    随着移动支付在国内的兴起,越来越多的付费内容越多如雨后春笋般的冒了出来.其中以<逻辑思维>.罗振宇.李笑来为主要代表作品和人物. 现在很多博客或者个人网站里面都有打赏功能,这算是对博主的劳 ...

  2. 给 hugo 博客添加搜索功能

    起因 我的博客使用了 hugo 作为静态生成工具,自带的主题里也没有附带搜索功能.看来,还是得自己给博客添加一个搜索功能. 经过多方查找,从 Hugo Fast Search · GitHub 找到一 ...

  3. 给jekyll博客添加搜索功能

    使用SWIFTYPE为jekyll博客添加搜索引擎 步骤 1.首先去swiftype注册一个账号 2.接着添加自己想要配置的网站地址并为新设定的引擎添加一个名字(非会员只能设置一个引擎). 3.收到验 ...

  4. 【干货】2个小时教你hexo博客添加评论、打赏、RSS等功能 (转)

    备注:该教程基于Hexo 2.x版本,目前Hexo是3.x版本,照本教程实现有可能会出现404错误,笔者目前还未找时间去解决,待笔者找时间解决该问题后,再写一篇该问题的解决教程,给各位读者带来困扰,还 ...

  5. hexo博客添加gitalk评论系统

      经过了一天的折腾,我终于为自己的博客添加上了评论系统.坦率的讲,为什么网上那么多方案我还要自己写一篇博客,那就是因为他们说的都有bug,所以我要自己总结一下.   我选用的是gitalk评论系统, ...

  6. Hexo系列(一) 搭建博客网站

    写在前面的话:本系列文章主要参考 Hexo官方说明文档,同时结合自己在使用过程中的一些心得体会,撷取下来,和大家分享分享.好,下面闲话不多说,马上开始我们的 Hexo 之旅吧 温馨提醒:博主使用的操作 ...

  7. 使用hexo+GitHub搭建个人博客的心得(含教程)

    Author Email Yaoyao Liu yaoyaoliu@msn.com 前言 对于广大CS专业的学生和码农,找一个地方写博客,记录一些编程.配置环境.阅读论文的心得体会是一个很常见的习惯. ...

  8. 基于 Hexo 从零开始搭建个人博客(五)

    阅读本篇前,请先阅读前几篇文章: 基于 Hexo 从零开始搭建个人博客(一) 基于 Hexo 从零开始搭建个人博客(二) 基于 Hexo 从零开始搭建个人博客(三) 基于 Hexo 从零开始搭建个人博 ...

  9. 基于Hexo和Github搭建博客

    搭建自己的个人博客. 准备工作 确保电脑需要已下载安装node和npm.查看安装是否成功,windows只需在命令行输入以下两条命令即可. 1 2 $ node -v $ npm -v 安装hexo ...

随机推荐

  1. 海量服务实践──手 Q 游戏春节红包项目设计与总结(上篇)

    导语 大哥说.今年手Q游戏的春节红包你来做.那该怎么做?以及怎么做才干让大哥放心?本文从后台的角度出发讲述了这个过程和方法.对于关键的前台部分也有所涉及. 文件夹 1.需求背景 1.1.红包类别 1. ...

  2. Shuttle ESB(一)——入门实例

    下载Shuttle ESB 从GitHub项目公布页,下载最新的公布版本号. Shuttle-ESB源代码包列表:http://www.nuget.org/packages?q=shuttle-esb ...

  3. Eclipse的Servers视图中无法加入Tomcat6/Tomcat7

    引言: 在基于Eclipse的开发过程中,出现了无法在Eclipse中加入Tomcat的问题,经过从网上搜索之后.找到了答案. 问题的提出: 无法从下面方式,加入Tomcatserver.  当中Se ...

  4. MAC系统里JDK版本切换

    1.首先安装需要的JDK版本 JDK7,JDK8则需要自己到Oracle官网下载安装对应的版本.自己安装的JDK默认路径为:/Library/Java/JavaVirtualMachines/jdk1 ...

  5. [100个改变摄影的伟大观念].(英)玛瑞恩.高清扫描版.pdf

    下载地址  :https://u253469.ctfile.com/fs/253469-229765365

  6. JSON--stringify() 和 parse() 方法

    序列化:stringify()将JavaScript对象序列号为JSON字符串反序列化:parse()将JSON字符串解析为原生JavaScript值 序列化选项:JSON.stringify()除了 ...

  7. 给虚拟机添加新硬盘并分区,fdisk查看分区,分区,重新读取分区表信息partprobe,格式化,挂载,查看分区挂载信息,自动挂载文件/etc/fstab,/etc/fstab文件错误导致重启崩溃后的修复

    1.虚拟机关机断电 2.添加硬盘 2.开机 3.fdisk -l查看刚才新添加的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 2147483 ...

  8. 【java】抓取页面内容,提取链接(此方法可以http get无需账号密码的请求)

    package 网络编程; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutpu ...

  9. Layui常见问题

    为什么表单不显示?当你使用表单时,Layui会对select.checkbox.radio等原始元素隐藏,从而进行美化修饰处理.但这需要依赖于form组件,所以你必须加载 form,并且执行一个实例. ...

  10. MySQL datetime的更新,删除网上的一些老概念

    网上的老概念 第一点:是以前的MySQL的datetime的最小值是:'1000-01-01 00:00:00'(貌似),但是最新的MySQL测试datetime的最小值可以是:'0000-00-00 ...