使用Jekyll撰写博客(二)

草稿箱

在项目中建立_drafts文件夹(与_posts文件夹在同一个目录中),然后新建一个markdown文件即可,注意此时草稿与文章不同,命名时不需要填写日期,只需用标题,例如:my-draft-post.md

这时启动服务器使用--drafts选项,即:

jekyll serve --drafts

执行结果:

--drafts选项去掉后,文章列表中将不会显示_drafts文件夹中的文章。

引用

如果你需要在多个地方引用一小段代码片段,可以使用include标签。

{% include foot.html %}

jekyll要求所有被引用的文件放在根目录的_includes文件夹,下面以在每篇文章中添加之前的评论模块为例:

  1. 在根目录中创建文件夹_includes

  2. 在该文件夹下创建文件disque-footer.html,并把之前添加文章底部的评论的html代码复制进来。注意,disque-footer.html文件中不要包含html的模板标签

    文件名可以任意,不过如果命名为footer.html的话,就会覆盖minima主题自带的footer.html

  3. 修改post

    在每个post的尾部使用{% include disque-footer.html %},添加评论模块,并且在YAML头信息中添加comments: true开启评论功能

设置YAML Matter的默认值

在根目录下的_config.yml文件中,添加下面的内容:

default:
   -
      scope:
         path: "" # 如果为空则表示的是所有的文章
      values:
         layout: "default"
         author: "atyouyou"

上面的内容代表:设置site中的所有的文件的layout默认是defaultauthor默认是atyouyou

官方的建议是在_config.tml文件中使用空格代替Tab键,来避免解析错误

有些时候并不想设置所有文件的layout,比如你的css文件(这里可以知道,上面的所有文件不单单指的是_posts下的文件),如果只设置_posts文件夹下的文件:

scope:
    path: "" # 如果为空则表示的是所有的文章
    type: "posts" # 在Jekyll2.2之前是post

显示的效果:

除此之外,我们也可以设置多个scope/values:

defaults:
  -
    scope:
      path: ""
      type: "pages"
    values:
      layout: "default"
  -
    scope:
      path: "projects"
      type: "pages" # 在Jekyll2.2之前是post
    values:
      layout: "project" # 将会覆盖之前设置的layout
      author: "atyouyou"

其他设置信息参考链接,等使用到时再做补充。

JEKYLL_ENV=production

在默认情况下,JEKYLL_ENV使用的是development,当让你也可以在build时使用自己定义的JEKYLL_ENV

JEKYLL_ENV=production jekyll build

当使用上面的编译选项后,类地于下面语法中的内容将会被显示:

{% if jekyll.environment == "production" %}

例如:使用你喜欢的编辑器,在之前使用的草稿文件中填写下面的内容:

{% if jekyll.environment == "production"%}

test  --drafts

{% endif %}

在测试过程中,直接使用:

JEKYLL_ENV=production	jekyll serve

即可在production环境下运行,效果可自行实验。

今天修改了搭建Jekyll章节补充内容,原来minima为我们提供了评论部分的html页面,即_includes/disqus_comments.html,这样就可以使用自带的,在草稿文件的最后添加:

{% include disqus_comments.html %}

下面使用上面的运行命令在production环境下运行jekyll。

请确保一下两项设置正确:

  1. 在草稿文件的开头设置comments: true

  2. 在根目录的_config.yml文件中添加:

    disqus:
      shortname: atyouyou
    

之所以要在production环境下运行,我们打来disqus_comments.html可以看到,里面有判断语句:

{% if page.comments != false and jekyll.environment == "production" %}

其他内容与我们之前自己编写的disqus-footer.html 中的内容相同,后面就可以自行选择了。

链接到其他post

  • new way

    参考下面的语法格式:

    {{ site.baseurl }}{% link _collection/name-of-document.md %}
    {{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %}
    {{ site.baseurl }}{% link news/index.html %}
    {{ site.baseurl }}{% link /assets/files/doc.pdf %}
    

    也可以链接到markdown文件:

     [Link to a document]({{ site.baseurl }}{% link _collection/name-of-document.md %})
     [Link to a post]({{ site.baseurl }}{% link _posts/2016-07-26-name-of-post.md %})
     [Link to a page]({{ site.baseurl }}{% link news/index.html %})
     [Link to a file]({{ site.baseurl }}{% link /assets/files/doc.pdf %})
    

baseurl是可选的选项,link后面的路径是相对于site的根路径来说的(你的配置文件所在的路径)。

比如要在文件page_a.md(文件的路径为:pages/folder1/folder2)中创建一个链接到page_b.md(文件的路径为:pages/folder1)文件的链接,那么上面的link后面的path则为:/pages/folder1/page_b.md

如果你不知道某个文章的path,则可以在该文件内容中添加{{page.path}},启动jekyll,在访问该页面时就会在内容中显示出该文章的path。

  • old way

    上面的链接链接到了站点的其他post,这里记录一下。以上面的链接为例:

    [搭建Jekyll章节]({%post_url 2017-12-16-Jekyll安装%})
    

使用post_url即可以为我们自动生成相对于站点的url,不包含域名。使用post_url时,不需要指定文件的拓展名,指定拓展名反而在lekyll启动时会找不到文件

错误记录

  • 针对在jekyll本地查看rss中文章标题有超链接,提交到github后rss文章标题无超链接的情况?

    查看配置文件_config.yml中的url是否填写。