老马识途

知识分享,简单就好


Tags Home

Jekyll 语法简单笔记

不过,现在我要记录一个比较完整的语法来建立一个功能比较健全记录型博客.

具体官方文档地址请参考 官方文档.
这里只介绍关于 jekyll 的语法,不介绍其他内容.

Jekyll 是什么?

jekyll 是一个静态网站生成器.
jekyll 通过 标记语言 markdowntextile 和 模板引擎 liquid 转换生成网页.
github 为我们提供了这个一个地方, 可以使用 jekyll 做一个我们自己的网站.

这里不介绍怎么在本地安装使用 jekyll, 如果你想在本地使用,请参考官方文档的 安装教程使用教程.
不过这里可以透漏一下, jekyll 依赖于 ruby .

注意,配置不用使用 tab . 否则可能会忽略那条命令.

_config.yml

jekyll 的全局配置在 _config.yml 文件中配置.
比如网站的名字, 网站的域名, 网站的链接格式等等.

_includes

对于网站的头部, 底部, 侧栏等公共部分, 为了维护方便, 我们可能想提取出来单独编写, 然后使用的时候包含进去即可.
这时我们可以把那些公共部分放在这个目录下.
使用时只需要引入即可.

  1. { % include filename % }

_layouts

对于网站的布局,我们一般会写成模板的形式,这样对于写实质性的内容时,比如文章,只需要专心写文章的内容, 然后加个标签指定用哪个模板即可.
对于内容,指定模板了模板后,我们可以称内容是模板的儿子.
为什么这样说呢? 因为这个模板时可以多层嵌套的, 内容实际上模板,只不过是叶子节点而已.

在模板中, 引入儿子的内容.

  1. { { content } }

在儿子中,指定父节点模板

注意,必须在子节点的顶部.

  1. ---
  2. layout: post
  3. ---

_posts

写的内容,比如博客,常放在这里面, 而且一般作为叶子节点.

_data

也用于配置一些全局变量,不过数据比较多,所以放在这里。

比如这个网站如果是多人开发, 我们通常会在这里面定义一个 members.yml 文件.

文件内容为

  1. - name: 袁小康
  2. github: tiankonguse
  3. oldnick : shen1000
  4. nick : skyyuan

然后在模板中我们就可以通过下面语法使用这些数据了.

  1. site.data.members

_site

jekyll 生成网站输出的地方, 一般需要在 .gitignore 中屏蔽掉这个目录.

index.html

主页文件, 后缀有时也用 index.md 等.
这个需要根据自己的需要来写, 因为不同的格式之间在某些情况下还是有一些细微的差别的.

静态资源

对于其他静态资源, 可以直接放在根目录或任何其他目录, 然后路径和平常的网站一样, 按路径来找链接中的文件.

虽然全局变量都有自己的默认配置, 但是我们往往会手动配置为自己心中最好的效果.

这个一般不配置, 默认即可.

  1. source: DIR

当然编译的时候也可以指定,但是使用 github 我们是不能指定参数的.

  1. -s, --source DIR

这个一般也默认.

  1. # 编译参数 -d, --destination DIR
  2. destination: DIR #配置语法

官方文档上就一句话.

  1. Disable custom plugins, and ignore symbolic links.

大概意思是禁用常用的插件,忽略符号链接.

  1. # 编译参数 --safe
  2. safe: BOOL

这个很有用, 有时候你写了一个文件, 里面的一个东西可能会被 jekyll 处理, 但是你不想让 jekyll 处理的话, 就使用这个语法忽略那些文件吧.

  1. exclude: [DIR, FILE, ...]

有时候我们的一些文件的名字由于不在 jekyll 处理的文件名字范围内,这时候就需要强制处理这些文件了.
比如 .htaccess 文件.

  1. include: [DIR, FILE, ...]

我们模板中经常会对时间进行转换,这个时候如果至指定时区的话,可能得到的时间会和我们想要的时间错几个小时.

  1. # timezone: Asia/Shanghai
  2. timezone: TIMEZONE

大家都是程序员,就不用多说了.

  1. # encoding : utf-8
  2. encoding: ENCODING

模板语法实际上分两部分, 一部分是头部定义,另一部分是语法.

头部定义主要用于指定模板(layout)和定义一些变量, 比如 标题(title), 描述(description), 分类(category/categories), tags, 是否发布(published), 自定义变量.

  1. ---
  2. layout: post
  3. title: title
  4. category: blog
  5. description: description
  6. published: true # default true
  7. ---

使用变量

所有的变量是都一个树节点, 比如模板中定义的头部变量,需要使用下面的语法获得

  1. page.title

page 是当前页面的根节点.

其中全局根结点有

有时候想输出 { 了,怎么办,使用 \ 转义即可.

  1. \{ => {

输出变量直接使用两个大括号括起来即可.

  1. { { page.title } }

和平常的解释性语言很想.

  1. { % for post in site.posts % }
  2. <a href="{ { post.url } }">{ { post.title } }</a>
  3. { % endfor % }
  1. { % for post in site.posts % }
  2. { { post.url } } { { post.title } }
  3. { { post.excerpt | remove: 'test' } }
  4. { % endfor % }

remove 可以删除变量中的指定内容

  1. { { post.url | remove: 'http' } }

这个在摘要中很有用.

  1. { { post.excerpt | strip_html } }
  1. { % highlight ruby linenos % }
  2. \# some ruby code
  3. { % endhighlight % }
  1. { { array | size } }
  1. { % assign index = 1 % }
  1. { { site.time | date_to_xmlschema } } 2008-11-07T13:07:54-08:00
  2. { { site.time | date_to_rfc822 } } Mon, 07 Nov 2008 13:07:54 -0800
  3. { { site.time | date_to_string } } 07 Nov 2008
  4. { { site.time | date_to_long_string } } 07 November 2008
  1. # Select all the objects in an array where the key has the given value.
  2. { { site.members | where:"graduation_year","2014" } }
  1. { { site.pages | sort: 'title', 'last' } }
  1. { { site.data.projects | jsonify } }

把一个对象变成一个字符串

  1. { { page.tags | array_to_sentence_string } }
  1. { { page.content | number_of_words } }

得到数组指定范围的结果集

  1. { % for post in site.posts limit:20 % }

对于博客,名字必须是 YEAR-MONTH-DAY-title.MARKUP 的格式.

比如

  1. 2014-11-06-memcached-code.md
  2. 2014-11-06-memcached-lib.md
  3. 2014-11-06-sphinx-config-and-use.md
  4. 2014-11-07-memcached-hash-table.md
  5. 2014-11-07-memcached-string-hash.md