安装Jekyll

下载

地址:https://github.com/pnpdjie/pnpdjie.github.io.git

windows64位的安装安装Ruby2.3.3(x64)

及DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe

生成config.yml文件

在Devkit的安装目录下右键GitBash 执行 ruby dk.rb init 生成config.yml文件

继续执行 ruby dk.rb install 安装

安装Jekyll

在Devkit的安装目录下右键GitBash 执行 gem install jekyll

若失败,可尝试执行 gem sources –add http://rubygems.org/

安装bundle

在Devtlt的安装目录下右键Git Bash 执行 gem install bundle

生成博客页面

执行 Jekyll new blog生成 初始化页面

执行 Jekyll serve 启动服务。 访问localhost:4000

文件结构

_include

存放一些组件,可以通过{% include file.xx %}引用。常用于header.html footer.html的引用。

_data

存放一些yml配置文件。

_layout

布局文件。如何引用?

_sass

存放主题样式文件,类似css文件

_config.yml

存储配置数据。全局配置的一些参数

_post

存放写的文章,文件名格式:YYYY-MM-DD-TITLE.md

_site

最终生成的静态页面。这部分不用上传github,可以通过 .gitignore来过滤掉 _site目录

参数配置

_config.yml总的配置

jekyll支持从位于_data的yaml,json,csv文件中加载数据,(csv必须包含一个header row) 通过site.data访问里面的数据

例子: 比如定义一个文件_data/members.yml

- name: Tom Preston-Werner
  github: mojombo
- name: Parker Moore
  github: parkr
- name: Liu Fengyun
  github: liufengyun

然后可以通过site.data.members访问该文件(文件名决定了字段名)

<ul>
{% for member in site.data.members %}
  <li>
    <a href="https://github.com/{{ member.github }}">
      {{ member.name }}
    </a>
  </li>
{% endfor %}
</ul>

定义组织(包含子文件) _data/orgs/jekyll.yml中:

username: jekyll
name: Jekyll
members:
  - name: Tom Preston-Werner
    github: mojombo
  - name: Parker Moore
    github: parkr

_data/orgs/doeorg.yml中:
username: doeorg
name: Doe Org
members:
  - name: John Doe
    github: jdoe

使用:

<ul>
{% for org_hash in site.data.orgs %}
{% assign org = org_hash[1] %}
  <li>
    <a href="https://github.com/{{ org.username }}">
      {{ org.name }}
    </a>
    ({{ org.members | size }} members)
  </li>
{% endfor %}
</ul>

Front Matter

通过这个可以设置一些页面变量(甚至可以自定义变量),比如title

---
layout: post
title: Blogging Like a Hacker
---

设置好变量以后, 你就可以在当前页面或者你的页面依赖的_layouts或者_includes 里的文件通过Liquid 标记,比如{page.title}访问了。

liquid语法

Advanced output: Filters

输出标记需要的过滤器。过滤器是简单的方法。第一个参数在过滤器的左侧就是过滤器的输入,即需要过滤的内容。过滤器的返回值将是过滤器运行时过滤后的左侧的参数。当没有更多的过滤器,模板会收到结果字符串。 代码示例:

Hello {{ 'tobi' | upcase }}
Hello tobi has {{ 'tobi' | size }} letters!
Hello {{ '*tobi*' | textilize | upcase }}
Hello {{ 'now' | date: "%Y %h" }}

Standard Filters标准过滤器:

date -时间格式化

capitalize-设置输入中的某个单词*

downcase-将输入的字符串转换为小写*

upcase-将输入的字符串转换为大写

first-获得传入的数组的第一个元素

last-获得传入的数组的最后一个元素

join-用数组的分隔符连接数组中的元素

sort-数组中的元素排序

map-通过指定的属性过滤数组中的元素

size-返回一个数组或字符串的大小

escape-转义一个字符串

escape_once-返回HTML的转义版本,而不会影响现有的实体转义

strip_html-从字符串去除HTML

strip_newlines -从字符串中去除所有换行符(\ n)的

newline_to_br-用HTML标记替换每个换行符(\ n)

replace-替换,例如:

{{ 'foofoo' | replace:'foo','bar' }} #=> 'barbar'


replace_first-替换第一个,例如: 

{{barbar' | replace_first:'bar','foo' }} #=> 'foobar'


remove-删除,例如:

{{'foobarfoobar' | remove:'foo' }} #=> 'barbar'


remove_first-删除第一个,例如:

{{ 'barbar' | remove_first:'bar' }} #=> 'bar'


truncate-截取字符串到第x个字符

truncatewords-截取字符串到第x个词

prepend-前置添加字符串,例如:

{{ 'bar' | prepend:'foo' }} #=> 'foobar'


append-后置追加字符串,例如:

{{'foo' | append:'bar' }} #=> 'foobar'


minus-减法,例如:

{{ 4 | minus:2 }} #=> 2


plus-加法,例如:

{{'1' | plus:'1' }} #=> '11', {{ 1 | plus:1 }} #=> 2


times-乘法,例如:

{{ 5 | times:4 }} #=> 20


divided_by-除法,例如:

{{ 10 | divided_by:2 }} #=> 5


split-通过正则表达式切分字符串为数组,例如:

{{"a~b" | split:"~" }} #=> ['a','b']


modulo-取模,例如:

{{ 3 | modulo:2 }} #=> 1

If/Else

{% if user %}
  Hello {{ user.name }}
{% endif %}
# Same as above
{% if user != null %}
  Hello {{ user.name }}
{% endif %}
{% if user.name == 'tobi' %}
  Hello tobi
{% elsif user.name == 'bob' %}
  Hello bob
{% endif %}
{% if user.name == 'tobi' or user.name == 'bob' %}
  Hello tobi or bob
{% endif %}
{% if user.name == 'bob' and user.age > 45 %}
  Hello old bob
{% endif %}
{% if user.name != 'tobi' %}
  Hello non-tobi
{% endif %}
# Same as above
{% unless user.name == 'tobi' %}
  Hello non-tobi
{% endunless %}
# Check for the size of an array
{% if user.payments == empty %}
   you never paid !
{% endif %}
{% if user.payments.size > 0  %}
   you paid !
{% endif %}
{% if user.age > 18 %}
   Login here
{% else %}
   Sorry, you are too young
{% endif %}
# array = 1,2,3
{% if array contains 2 %}
   array includes 2
{% endif %}
# string = 'hello world'
{% if string contains 'hello' %}
   string includes 'hello'
{% endif %}

Case Statement

{% case condition %}
{% when 1 %}
hit 1
{% when 2 or 3 %}
hit 2 or 3
{% else %}
... Else ...
{% endcase %}

{% case template %}
{% when 'label' %}
     // {{ label.title }}
{% when 'product' %}
     // {{ product.vendor | link_to_vendor }} / {{ product.title }}
{% else %}
     // {{page_title}}
{% endcase %}

For loops

Liquid for遍历循环

{% for item in array %}
  {{ item }}
{% endfor %}

当遍历一个键值对集合

item[0]是key的值,item[1]则是value的值。

{% for item in hash %}
  {{ item[0] }}: {{ item[1] }}
{% endfor %}

辅助变量

在每次for循环中,下面的辅助变量可用于额外的需求:

forloop.length      # => 整个for循环的长度

forloop.index       # => 当前迭代的索引

forloop.index0      # => 当前迭代的索引(从0开始)

forloop.rindex      # => 剩余的迭代次数

forloop.rindex0     # => 剩余的迭代次数(从0开始)

forloop.first       # => 是否是第一次迭代?

forloop.last        # => 是否是最后一次迭代?

limit offset

Limit限制循环次数

offset:int可以让你从第n项开始遍历。

# array = [1,2,3,4,5,6]
{% for item in array limit:2 offset:2 %}
 {{ item }}
{% endfor %}
# results in 3,4
### 倒叙循环
{% for item in collection reversed %} 
    {{item}} 
{% endfor %}

Variable Assinmengt

将数据存储在自定义的变量,输出或在其他标记中随意使用。用assign标签创建。

{% assign name = 'freestyle' %}

{% for t in collections.tags %}
    {% if t == name %}
        Freestyle!
    {% endif %}
{% endfor %}
{% assign freestyle = false %}


{% for t in collections.tags %}
    {% if t == 'freestyle' %}
          {% assign freestyle = true %}
    {% endif %}
{% endfor %}

{% if freestyle %}
   Freestyle!
{% endif %}

ONAP demo修改

右上导航

修改位置 _includes/header.html

表格测试

| Tables | Are | Cool | | ————- |:————-:| —–:| | col 3 is | right-aligned | $1600 | | col 2 is | centered | $12 | | zebra stripes | are neat | $1 |