在CMS中,tag和categoly的实现方式虽大体相同,但功能和用途却不同。
而当前各种Pages服务仅支持有限的官方插件,自定义插件功能更是可望而不可及,要满足文章自动分类功能实在要用插件完成,之前一直通过本地生成jekyll的方式进行部署。
近日在开发awesom-weblog的时候发现一种不用插件的方法来生成不同的分类的页面。
在不使用自定义插件的情况下,让Jekyll支持文章分类
一、分类页渲染模版(Layout)
由插件版到无插件的迁移会比较简单,已经有存在了分类页文章渲染模版(Layout),无模块的可以参考首页模版进行修改。
示例(categoly.html
)如下:
<div id="content">
<div class="box archive-meta">
<h3 class="title-meta"></h3>
</div>
</div>
这里用到的是site全局中的categories属性,该属性以字典的形式存储了所有分类,以及该分类下的post。
比如:我们只需要通过调用site.categories['Linux']
便可以拿到该分类下的所有文章。
二、为分类创建分类页而
在layout已经创建好之后, 我们只需要通过该Layout对每个分类进行渲染,而渲染的方法,就是通过创建多个Layout的实现,使其传入不同的page.cat参数,便可生成不同的分类页面了。
一个Layout的实现如下:
添加categories目录,并在目录下创建一个名为Linux.html
的文件:
---
layout: category
cat: Linux
---
此实现只需传入分类名无需带任何content,其它分类同样创建不同分类名文件,并传入分类名。
此外,可通过添加permalink:
参数自定义目录生成的链接位置。
三、自动创建分类页面
由于分类页面实在简单,但如果分类较多的话,可能通过批量命令的方式,创建页面。
首先获取到博客的分类列表,形成txt文档,每行一个。
在categories目录下创建bash程序autogencat.sh
:
#!/bin/bash
while read catname
do
cp Linux.html $catname.html
sed -i "s/Linux/${catname}/g" ${catname}.html
done
添加执行权限并且执行:
chmod +x autogencat.sh
./autogencat.sh < catlist.txt
程序会将Linux.html做为生成模板,复制生成其它分类文件,以后新增分类只需要更新catlist.txt目录列表,运行脚本即可。
Comments