博客越来越趋于CMS化 从Logecho开始您的静态博客
为什么要静态化
相比于各类社交网站的兴起,个人博客这个平台也开始进入更深刻的自我转变过程。由于我个人一直在参与这个过程,所以更能感受到它所带来的影响。
以 Wordpress 为首的系统将越来越趋于 CMS 化,并且不可避免地越来越臃肿。以 Ghost 为首的新平台,却把重心转向了撰写体验地打造上。
在这个过程中出现了一个异类,那就是静态博客系统。网页静态化似乎与现今越来越丰富地媒体展现背道而驰,但它的出现却把自由撰稿者从繁杂的不必要的系统维护中解放出来,让大家更专注于内容本身的精雕细琢,至于内容的分享与传播则可以交给更多的社交平台。
Logecho是什么
是的,你现在看到我的网站就是由 Logecho 生成的全静态网站,它可以运行于任何支持静态网站的服务器上(基本上是所有的)或者类似 github.io 之类提供静态托管的平台中。不需要任何服务器配置,写完了就可以直接发布。
这是我继 Typecho 之后开发的又一款博客软件,目前还处于测试阶段,如果你迫不及待想要去使用它,请看下面的文字。
如何开始
需要注意的是 Logecho 的本地运行环境需要 PHP 5.4+ 的支持,如果你运行的是最新的 Mac OSX 系统那么就不用关注这些。另外我们的命令行模式对 Windows 还不支持,这一点请注意。
因为目前还在测试中,所以你得先从 github 上克隆代码
git clone https://github.com/typecho/logecho.git
然后编译出一个可执行文件
cd logecho && php build.php
你现在可以在当前目录下看到 logecho 这样一个可执行文件,运行它可以看到一些基本用法
$ ./logecho
LOGECHO 1.0.0
Copyright (c) 2013-2014 Logecho (http://logecho.com)
usage: logecho (init|build|sync|serve|help|update|import) [your-working-directory]
实际上这个文件就是所有 logecho 的全部了,你可以把它拷贝到任意你想要的位置,或者将其加入到环境变量中,这样你可以直接在任何地方使用logecho这样一个命令。
初始化一个目录
mkdir blog
logecho init blog
这样 blog 目录就初始化完成了,它的结构是
blog/
├── _theme
│ ├── archives.twig
│ ├── footer.twig
│ ├── header.twig
│ ├── index.twig
│ ├── post.twig
│ └── style.css
├── config.yaml
└── posts
└── hello-world.md
可以从字面意思直观理解到
_theme目录放置的是模版文件,Logecho 采用了Twig模版引擎
posts目录放置的是文章文件,都是 markdown 格式的
config.yaml是一个配置文件,在后面我会来解释它
配置文件
# You can configure this file to customize your site
globals:
# Definition of global variable
title : My Blog Site
description : Yet another logecho site
url : http://logecho.com/
blocks:
# All blocks to compile
post:
source : /posts/
target : /posts/
category:
source :
default : Default
template : archives.twig
target : archives.html
tag:
template : archives.twig
target : archives.html
archive:
template : archives.twig
target : archives.html
index:
template : index.twig
target : index.html
limit : 10
feeds:
# Definition of feeds gererating
source : post
recent : 20
target : feeds.xml
author : Logecho
build:
# The commands running after compile
- cp -f @THEME/style.css @TARGET/style.css
sync:
# The commands running with sync operation
这是一个配置文件的样本,从上到下
globals
这里可以设定所有的全局变量,需要特别注意的是,在Logecho里没有任何预设的全局变量,你在这里设定的值只是为了方便你从模版里面调用对应的变量。
blocks
这里用来设定所有的内容源以及编译关系,它主要有四种类型,用来描述内容和归档之间的关系。内容就是诸如文章,页面之类的载体,归档就是诸如分类,标签之类的集合。我们通过对 block 不同的定义来实现这两者之间的组合
将 source 设置为一个目录:这种类型将被 logecho 自动识别为内容,并从你设置的这个目录下读取所有后缀为.md的文章。
将 source 设置为一个hash结构:这种类型将被视为归档,并且归档的范围就在你预设的这些hash结构中
不设置 source:这种类型将被视为归档,范围约定,只要在文章中出现就会被归档
特殊的 archive 归档:这是一个预设的归档类型,所有文章将按照月份被归档到这个类型下面
特殊的 index 归档:这同样是一个预设的归档类型,所有内容的最新条目将被归档到这个 block 下,你可以设定一个 limit 来指定它收录的条数限制,如果不设定将默认限制为 10 条。它也可以可以是一个 hash 结构,用来指定不同的内容收录不同的条数。
编译目标target
每个 block 都会设定一个 target,也就是生成的文件目标,它可以是一个文件也可以是一个目录,如果是一个目录 logecho 将自动按每个条目生成单个文件,如果是一个文件 logecho 将把所有条目生成到一个文件中。
注意:Logecho 会按照字符串结尾处有没有/来判断是否为一个目录。如果你不设定 target,logecho 将自动把 block 编译为一个以它的类型为文件名的 html 文件,比如 tag 将编译为 tag.html。
关联内容和归档
在某篇内容中,比如hello-world.md文件的最前方加上如下语法即可将这个内容与相应的归档关联起来
@category:default
@tag:php,redis
....
以上语法将这篇内容关联到名为default的category下面,以及名为php和redis的tag下面.其中category必须关联你在 source 中指定的名称,而tag因为没有指定source,则可以关联任意名称。
模版文件
Logecho 采用了Twig模版系统。
每个 block 都必须指定一个模版文件,主页的模版文件将自动识别为index.twig。如果你不指定相应 block 的模版文件,logecho 将自动指定一个以它的类型为文件名的 twig 文件作为模版,比如 tag 的模版将识别为 tag.twig。
在模版中你可以使用如下变量
所有在globals里定义的变量
当前 block 生成的变量
对于当前 block 生成的变量遵循如下原则
变量名就是block名称
比如在 post 对应的 post.twig 里,你可以直接使用{{ post.title }}语法来调用 post 变量的相关属性。
在归档页按target的类型来读取
在前面对 config 的解释中,target 可以设置为目录,也可以设置为单个文件,当它为目录的时候,当前 block 的变量取出的是一个标准的 hash 结构
比如在category.twig中,你可以直接使用{{ category.name }}来调用category的属性。
但如果它是一个目录,那么 block 的变量取出的就是一个数组,你需要用循环的语法取出每个元素
比如在category.twig中,你需要
{% for cat in category %}
{{ cat.name }}
{% endfor %}
其他命令
build
logecho build /your-blog-dir/
它将根据你的配置,生成所有的 target 文件
serve
logecho serve /your-blog-dir/
它将先生成所有 target 文件,然后启动一个 mini 的 http 服务器,以方便你直接预览你的网页。你可以直接访问http://localhost:7000/来浏览
sync
logecho sync /your-blog-dir/
将在执行完 build 之后,再执行你再config.yaml里设定的sync命令
import
logecho import http://your-blog-domain /your-blog-dir/
导入任何支持 xmlrpc 接口的博客到本地
update
logecho update
自动更新程序(未完成)
相比于各类社交网站的兴起,个人博客这个平台也开始进入更深刻的自我转变过程。由于我个人一直在参与这个过程,所以更能感受到它所带来的影响。
以 Wordpress 为首的系统将越来越趋于 CMS 化,并且不可避免地越来越臃肿。以 Ghost 为首的新平台,却把重心转向了撰写体验地打造上。
在这个过程中出现了一个异类,那就是静态博客系统。网页静态化似乎与现今越来越丰富地媒体展现背道而驰,但它的出现却把自由撰稿者从繁杂的不必要的系统维护中解放出来,让大家更专注于内容本身的精雕细琢,至于内容的分享与传播则可以交给更多的社交平台。
Logecho是什么
是的,你现在看到我的网站就是由 Logecho 生成的全静态网站,它可以运行于任何支持静态网站的服务器上(基本上是所有的)或者类似 github.io 之类提供静态托管的平台中。不需要任何服务器配置,写完了就可以直接发布。
这是我继 Typecho 之后开发的又一款博客软件,目前还处于测试阶段,如果你迫不及待想要去使用它,请看下面的文字。
如何开始
需要注意的是 Logecho 的本地运行环境需要 PHP 5.4+ 的支持,如果你运行的是最新的 Mac OSX 系统那么就不用关注这些。另外我们的命令行模式对 Windows 还不支持,这一点请注意。
因为目前还在测试中,所以你得先从 github 上克隆代码
git clone https://github.com/typecho/logecho.git
然后编译出一个可执行文件
cd logecho && php build.php
你现在可以在当前目录下看到 logecho 这样一个可执行文件,运行它可以看到一些基本用法
$ ./logecho
LOGECHO 1.0.0
Copyright (c) 2013-2014 Logecho (http://logecho.com)
usage: logecho (init|build|sync|serve|help|update|import) [your-working-directory]
实际上这个文件就是所有 logecho 的全部了,你可以把它拷贝到任意你想要的位置,或者将其加入到环境变量中,这样你可以直接在任何地方使用logecho这样一个命令。
初始化一个目录
mkdir blog
logecho init blog
这样 blog 目录就初始化完成了,它的结构是
blog/
├── _theme
│ ├── archives.twig
│ ├── footer.twig
│ ├── header.twig
│ ├── index.twig
│ ├── post.twig
│ └── style.css
├── config.yaml
└── posts
└── hello-world.md
可以从字面意思直观理解到
_theme目录放置的是模版文件,Logecho 采用了Twig模版引擎
posts目录放置的是文章文件,都是 markdown 格式的
config.yaml是一个配置文件,在后面我会来解释它
配置文件
# You can configure this file to customize your site
globals:
# Definition of global variable
title : My Blog Site
description : Yet another logecho site
url : http://logecho.com/
blocks:
# All blocks to compile
post:
source : /posts/
target : /posts/
category:
source :
default : Default
template : archives.twig
target : archives.html
tag:
template : archives.twig
target : archives.html
archive:
template : archives.twig
target : archives.html
index:
template : index.twig
target : index.html
limit : 10
feeds:
# Definition of feeds gererating
source : post
recent : 20
target : feeds.xml
author : Logecho
build:
# The commands running after compile
- cp -f @THEME/style.css @TARGET/style.css
sync:
# The commands running with sync operation
这是一个配置文件的样本,从上到下
globals
这里可以设定所有的全局变量,需要特别注意的是,在Logecho里没有任何预设的全局变量,你在这里设定的值只是为了方便你从模版里面调用对应的变量。
blocks
这里用来设定所有的内容源以及编译关系,它主要有四种类型,用来描述内容和归档之间的关系。内容就是诸如文章,页面之类的载体,归档就是诸如分类,标签之类的集合。我们通过对 block 不同的定义来实现这两者之间的组合
将 source 设置为一个目录:这种类型将被 logecho 自动识别为内容,并从你设置的这个目录下读取所有后缀为.md的文章。
将 source 设置为一个hash结构:这种类型将被视为归档,并且归档的范围就在你预设的这些hash结构中
不设置 source:这种类型将被视为归档,范围约定,只要在文章中出现就会被归档
特殊的 archive 归档:这是一个预设的归档类型,所有文章将按照月份被归档到这个类型下面
特殊的 index 归档:这同样是一个预设的归档类型,所有内容的最新条目将被归档到这个 block 下,你可以设定一个 limit 来指定它收录的条数限制,如果不设定将默认限制为 10 条。它也可以可以是一个 hash 结构,用来指定不同的内容收录不同的条数。
编译目标target
每个 block 都会设定一个 target,也就是生成的文件目标,它可以是一个文件也可以是一个目录,如果是一个目录 logecho 将自动按每个条目生成单个文件,如果是一个文件 logecho 将把所有条目生成到一个文件中。
注意:Logecho 会按照字符串结尾处有没有/来判断是否为一个目录。如果你不设定 target,logecho 将自动把 block 编译为一个以它的类型为文件名的 html 文件,比如 tag 将编译为 tag.html。
关联内容和归档
在某篇内容中,比如hello-world.md文件的最前方加上如下语法即可将这个内容与相应的归档关联起来
@category:default
@tag:php,redis
....
以上语法将这篇内容关联到名为default的category下面,以及名为php和redis的tag下面.其中category必须关联你在 source 中指定的名称,而tag因为没有指定source,则可以关联任意名称。
模版文件
Logecho 采用了Twig模版系统。
每个 block 都必须指定一个模版文件,主页的模版文件将自动识别为index.twig。如果你不指定相应 block 的模版文件,logecho 将自动指定一个以它的类型为文件名的 twig 文件作为模版,比如 tag 的模版将识别为 tag.twig。
在模版中你可以使用如下变量
所有在globals里定义的变量
当前 block 生成的变量
对于当前 block 生成的变量遵循如下原则
变量名就是block名称
比如在 post 对应的 post.twig 里,你可以直接使用{{ post.title }}语法来调用 post 变量的相关属性。
在归档页按target的类型来读取
在前面对 config 的解释中,target 可以设置为目录,也可以设置为单个文件,当它为目录的时候,当前 block 的变量取出的是一个标准的 hash 结构
比如在category.twig中,你可以直接使用{{ category.name }}来调用category的属性。
但如果它是一个目录,那么 block 的变量取出的就是一个数组,你需要用循环的语法取出每个元素
比如在category.twig中,你需要
{% for cat in category %}
{{ cat.name }}
{% endfor %}
其他命令
build
logecho build /your-blog-dir/
它将根据你的配置,生成所有的 target 文件
serve
logecho serve /your-blog-dir/
它将先生成所有 target 文件,然后启动一个 mini 的 http 服务器,以方便你直接预览你的网页。你可以直接访问http://localhost:7000/来浏览
sync
logecho sync /your-blog-dir/
将在执行完 build 之后,再执行你再config.yaml里设定的sync命令
import
logecho import http://your-blog-domain /your-blog-dir/
导入任何支持 xmlrpc 接口的博客到本地
update
logecho update
自动更新程序(未完成)