Hexo

hexo脚本编写指南(二)

2019-01-12  本文已影响1人  这是我用来记录技术的一个博客

有用脚本大全


查询版本

  hexo.extend.helper.register('hexo_version', function() {
    return this.env.version;
  });

调用

<%- hexo_version() %>   ///3.8.0

添加多语言url

一般来说 涉及多语言,我们是利用url中是否有en,zh-cn等关键词来看这个页面是否是某种语言
一种方法是修改config属性

permalink: :lang/:title,
new_post_name: :lang/:title

但是这样的弊端就是只对post有效而已,index页面url由于本身不带有标识符号,不太好判断是否是中文还是英文

其实可以利用函数来实现相关功能而不更改config

hexo.extend.helper.register('canonical_url', function(lang) {
  var path = this.page.canonical_path;
  if (lang && lang !== 'en') path = lang + '/' + path;

  return this.config.url + '/' + path;
});

举例

  {% if page.layout == 'page' or page.layout == 'index' %}
    {% for lang in site.data.languages %}
      <link rel="alternative" hreflang="{{ loop.key }}" href="{{ canonical_url(loop.key) }}">
    {% endfor %}
  {% endif %}

如果page的layout是page或者是index,就开始循环


自动给文章添加锚点

原理:
一篇文章有h1 h2等等标题 我们希望
鼠标滑过时,为其添加动态锚点
即这样的状态


image.png image.png

初始代码为

(在markdown中,标题的写法)
### 安装前提

经过hexo render后,变成了下边的代码 这是初始代码

<h3 id="安装前提" >
    <a href="#安装前提" class="headerlink" title="安装前提"></a>
安装前提
</h3>

我们希望的是这样

<h3 id="安装前提" class="article-heading">
    <a href="#安装前提" class="headerlink" title="安装前提"></a>
安装前提
    <a class="article-anchor" href="#安装前提" aria-hidden="true"></a>
</h3>

先写css

.article-anchor
  margin-left: 10px
  display: none   //初始状态隐藏
  &:before
    content: "#"   //上层元素拼接 内容就是一个“#”
  @media print   //打印时不打印
    display: none !important
  .article-heading:hover &    //悬停时出现
    display: inline-block

希望的结构有了,css也有了,开始利用helper插入html

hexo.extend.helper.register('page_anchor', function(str) {
  var $ = cheerio.load(str, {decodeEntities: false});
  var headings = $('h1, h2, h3, h4, h5, h6');

  if (!headings.length) return str;

  headings.each(function() {
    var id = $(this).attr('id');

    $(this)
      .addClass('article-heading')
      .append('<a class="article-anchor" href="#' + id + '" aria-hidden="true"></a>');
  });

  return $.html();
});

利用cheerio操纵文章整体元素,用法跟jquery一样

用法:
在页面中调用即可(swig语法)

 {{ page_anchor(page.content) }}

总结:

以后再介绍更多的有用函数

上一篇下一篇

猜你喜欢

热点阅读