Logecho:基于 PHP 的静态博客

106

logecho 是一个基于 PHP 的静态博客系统,他的作者是 Typecho 的创始人70大大,嗯就是segmentfault的那个70大大…

为什么要静态化

相比于各类社交网站的兴起,个人博客这个平台也开始进入更深刻的自我转变过程。一直在参与这个过程,所以更能感受到它所带来的影响。

Wordpress 为首的系统将越来越趋于 CMS 化,并且不可避免地越来越臃肿。以 Ghost 为首的新平台,却把重心转向了撰写体验地打造上。

在这个过程中出现了一个异类,那就是静态博客系统。网页静态化似乎与现今越来越丰富地媒体展现背道而驰,但它的出现却把自由撰稿者从繁杂的不必要的系统维护中解放出来,让大家更专注于内容本身的精雕细琢,至于内容的分享与传播则可以交给更多的社交平台。

Logecho是什么

Logecho是基于PHP的静态博客系统,它可以运行于任何支持静态网站的服务器上(基本上是所有的)或者类似 github.io 之类提供静态托管的平台中。不需要任何服务器配置,写完了就可以直接发布。

这是70大大继 Typecho 之后开发的又一款博客软件,目前还处于测试阶段,如果你迫不及待想要去使用它,请看下面的文字。

如何开始

需要注意的是 Logecho 的本地运行环境需要 PHP 5.4+ 的支持,如果你运行的是最新的 Mac OSX 系统那么就不用关注这些。另外我们的命令行模式对 Windows 还不支持,这一点请注意。

因为目前还在测试中,所以你得先从 github 上克隆代码

1
git clone https://github.com/typecho/logecho.git

然后编译出一个可执行文件

1
cd logecho && php build.php

你现在可以在当前目录下看到 logecho这样一个可执行文件,运行它可以看到一些基本用法


1
2
3
4
$ ./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这样一个命令。

初始化一个目录

1
2
mkdir blog
logecho init blog

这样 blog 目录就初始化完成了,它的结构是


1
2
3
4
5
6
7
8
9
10
11
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是一个配置文件,在后面我会来解释它

配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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文件的最前方加上如下语法即可将这个内容与相应的归档关联起来


1
2
3
4
@category:default
@tag:php,redis

....

以上语法将这篇内容关联到名为defaultcategory下面,以及名为phpredistag下面.其中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中,你需要


1
2
3
{% for cat in category %}
{{ cat.name }}
{% endfor %}

其他命令

build

1
logecho build /your-blog-dir/

它将根据你的配置,生成所有的 target 文件

serve

1
logecho serve /your-blog-dir/

它将先生成所有 target 文件,然后启动一个 mini 的 http 服务器,以方便你直接预览你的网页。你可以直接访问

1
http://localhost:7000/

来浏览

sync

1
logecho sync /your-blog-dir/

将在执行完 build 之后,再执行你再

1
config.yaml

里设定的

1
sync

命令

import

1
logecho import http://your-blog-domain /your-blog-dir/

导入任何支持 xmlrpc 接口的博客到本地,它还将在你的博客目录下生成一个名为

1
wxr.xml

的xml文件,这里面包括了你所有文章的评论,你可以直接将其导入到类似disqus的第三方评论平台中。

update

1
logecho update

自动更新程序(未完成)

 

其实我觉得蛮酷的,所以这里推荐一下!

如果你有设计或者 WordPress 方面的项目需求,可以和我联系 Email:wwwzhouliang@gmail.com。

作者主页 邮箱 微博 腾讯微博 QQ Twitter Facebook Google+

共 106 条评论

  1. COD试剂 回复

    PHP

Leave a Reply

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 Required fields are marked *

返回顶部