jekyll 语法

Posted by shefh on September 14, 2016

jekyll 是一个静态网站生成器.它通过标记语言 markdown 或 textile 和 模板引擎 liquid 转换生成网页.

文件结构

jekyll生成的文件结构如下

jekyllTree image

  • _config.yml jekyll的全局配置文件。比如站点的名字等。要读取配置文件里面的内容可以
 { { site.baseurl } }
 { { site.name } }
   
   { % include filename % }

  • _layouts:存放html布局文件。
在模板中, 引入儿子的内容.
{ { content } }
在儿子中,指定父节点模板
---
layout: post
---
  • _posts:存放你要发表的文章。格式YEAR-MONTH-DAY-title.MARKUP。文件名确定了发表的日期和标记语言。博客的日期格式通过_config.yml的permalink字段设置或者通过YAML FRONT Matter设置

  • _data:保存数据的。jekyll会自动加载这里的所有.jml或者.yaml结尾的文件。比如你有一个members.yml。那么你可以通过site.data.members访问该文件里的数据.Data Files

例如创建 _data/members.yml 文件

- name: Eric Mill
  github: konklone

- name: Parker Moore
  github: parkr

- name: Liu Fengyun
  github: liufengyun

数据读取方式

{ % for member in site.data.members %}    
    { { member.name } }     
{ % endfor %}

模板语法

头部定义

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

---
layout:     post #固定格式
title:      title
category: blog 	#文章分类
description: description
published: true # default true  是否发布文章
permalink: /aaa  #设置当前访问路由
custom: value
---
page.title
page.category
page.custom
page.description

page表示当前页

全局根结点site

site变量在_config.yml中配置。默认的一些变量如下

site.time #运行 jekyll 的时间
site.pages #所有页面
site.posts #所有文章
site.related_posts #类似的10篇文章,默认最新的10篇文章,指定lsi为相似的文章
site.static_files #没有被 jekyll 处理的文章,有属性 path, modified_time 和 extname.
site.html_pages #所有的 html 页面
site.data _data #目录下的数据
site.documents #所有 collections 里面的文档
site.categories #所有的 categorie
site.tags #所有的 tag
site.constum #自定义变量

page(当前页面的配置信息) 下的变量

page.content #页面的内容
page.title #标题
page.excerpt #摘要,正文的第一段
page.url #链接
page.date #时间
page.id #唯一标示
page.categories #分类
page.tags #标签
page.path #源代码位置
page.next #下一篇文章
page.previous #上一篇文章

paginator(分页信息) 下的变量

paginator.per_page #每一页的数量
paginator.posts #这一页的数量
paginator.total_posts #所有文章的数量
paginator.total_pages #总的页数
paginator.page #当前页数
paginator.previous_page #上一页的页数
paginator.previous_page_path #上一页的路径
paginator.next_page #下一页的页数
paginator.next_page_path #下一页的路径

其他语法

  • 循环

{ % for post in site.posts % }
     { { post.url } } { { post.title } }
      { { post.excerpt | remove: 'test' } }
{ % endfor % }

{ % for post in site.posts limit:20 offset:10 reversed % }
#code
{ % endfor % }
  • 判断
    • and 且
    • or 或
    • contains 包含
{ % if page.excerpt % }
    { { page.excerpt| strip_html } }
{ % elsif page.description % }
    
{ % else %}
    { { site.description } }
{ % endif %}
  • 赋值
{ % assign index = 1 % }
{ % assign nick = member.nick %}
  • 删除指定文本
    { { post.url | remove: 'http' } }
    
  • 删除 html 标签
    { { post.excerpt | strip_html } }
    
  • 代码高亮
{ % highlight swift % }
 # some swift code
{ % endhighlight % }