为Octopress添加Category

导航栏添加自定义category列表

前两天参考别人在侧边栏加category列表的方法给自己的博客添加了category导航。

基本步骤

首先在plugins/路径下添加category_list_tag.rb文件

其次jekyll的插件category_generator.rb默认在创建categories目录时是不存在index.html索引文件的, 因为她无法知道你每次创建category的路径地址, 所以我们只能手动在source/blog/categories/路径下创建index.html文件

index.html
1
2
3
4
5
6
7
8
9
10
11
12
13

---
layout: page
title: Categories
footer: false

---

<div>
<ul id="categories">
{% category_list %}<!--此处是中文输入,不要直接复制-->
</ul>
</div>

最后在source/_includes/custom/navigation.html中加如下代码:

1
<li><a href="/blog/categories">Categories</a></li>

现在就可以为博客归一下类了

1
2
3
4
5
6
7
8
9
10

---
layout: post
title: "为Octopress添加Category"
date: 2014-06-20 18:29:46 +0800
comments: true
categories: octopress

---


关于第一次rake generate 遇到的Liquid Exception: incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) in index.html问题,原因是正则字符串以ASCII-8BIT被编译,只需在category_list_tag.rb文件头部加上如下声明,当Ruby在语法分析时,你代码中每一个字符(包括正则,字符串等等)都会被设定为UTF-8编码:

1
#encoding: utf-8

参考:
链接1 , 链接2 , 链接3

关于中文category

上面的流程走完之后,于是顺手给一篇文章加了个中文名称的分类,WTF,文件路径都正确就是,索引文件也有,就是找不到。仔细观察url发现category的url没有被读取为字符串字符串而是直接以实际的形式(即中文编码后的格式)链接过去,但实际public/blog/categories/下各个子分类都是以字符串字符串的命名存储的,这也就是为什么找不到目录下的索引文件。知道原因,这样问题就好办了。首先我选择了最笨的办法就是找到那篇博文的主人直接问人家,然后就没有然后了……

好吧只能靠自己了,url读取问题应该是出在正则表达式上,打开category_list_tag.rb文件,也找到正则这句

1
category_url = File.join(category_dir, category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase)

好吧,大致没看懂,但它确实是把category的名字完全匹配到了,这里是不是有个汉字转拼音的插件就可以解决问题呢?Google一下你就知道了。还真有ruby-pinyin,看起来好复杂。再看看还有别的筏子吗,打开plugins/category_generator.rb文件,看看它到底是肿么把汉字转成字符串字符串格式的路径的,看到这句时眼前突现了日出东山的万丈光芒:

start:111
1
self.write_category_index(File.join(dir, category.to_url), category)

看样子category.to_url应该就是干这个活儿的,那么用它把category_list_tag.rb中的正则替换掉应该是能行,下面是修改后的样子:

category_list_tag.rb
1
2
#category_url = File.join(category_dir, category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase)  
category_url = File.join(category_dir, category.to_url)

新问题:codeblock没法使用start:# mark:#,#-#