有时候希望能预制一些内容模板使用,比如当 new
一篇标题以 微博
开头的文章时,自动为文章设置 tweet
标签,这类似 Hexo 的 scaffold
,不过 scaffold
只能做模板,不能进行更灵活的预处理,索性做了个插件系统。
有了插件系统,还可以按自己的需求定制短代码,转换任意内容,只需在 filter
上用正则做替换就好了。
插件系统在 0.8.0 版开始实验性支持。
一个简单的例子:Beex Tweet
main.lua
。_config.toml
中设置 plugins = ['plugin-name-1', 'plugin-name-2', ...]
启用插件。filter
的参数是一个表(在不同的事件上包含不同的字段),处理后返回该表,目前有四个事件:beex
模块,注册 filter
的方式类似 WordPress,不过不支持传参(但可以通过再包一层函数来实现):
function my_filter(args)
-- Do something here...
-- For example:
-- args.context.theme_ctx.foo = 'bar'
-- args.text = args.text .. '\n'
-- `args` 的可用字段参考上方表格。
return args
end
function main()
-- ↓ 注意这里用冒号
beex:add_filter('gen_after_read_md', 'my_filter')
end
print()
UTF-8 时会乱码,所以提供一个打印函数,方便调试时输出中文:
-- ↓ 注意这里用点号
beex.print(text)
..
连接字符串而非 +
。
print("中文", "会", "乱码") -- Lua 自带,支持不定参数,但是会乱码
text = "中文" .. "不会" .. "乱码"
beex.print(text) -- 不会乱码