• Github 中文镜像
Sign inSign up
Watch966
Star102.4k
Fork61.8k
Tag: todo
Switch branches/tags
K / Beex 插件系统(Plugins).md
移动浏览 Clone
加载中...
到移动设备上浏览
53 lines 4.86 kB
First commit on 31 Jul 2020

尚未完成: Not completed尚未完成Not completed 随时检查: Check back later随时检查Check back later

    尚在开发/Still programming

    例子

    有时候希望能预制一些内容模板使用,比如当 new 一篇标题以 微博 开头的文章时,自动为文章设置 tweet 标签,这类似 Hexo 的 scaffold,不过 scaffold 只能做模板,不能进行更灵活的预处理,索性做了个插件系统。

    有了插件系统,还可以按自己的需求定制短代码,转换任意内容,只需在 filter 上用正则做替换就好了。

    插件系统在 0.8.0 版开始实验性支持。

    一个简单的例子:Beex Tweet

    说明

    • 插件使用 Lua 5.4 进行开发,因为附带一个 Python 或 JavaScript 解释器要几十 M,太大了。
    • 文件夹名即插件名,入口文件为 main.lua
    • _config.toml 中设置 plugins = ['plugin-name-1', 'plugin-name-2', ...] 启用插件。
    • filter 的参数是一个表(在不同的事件上包含不同的字段),处理后返回该表,目前有四个事件:
    事件说明参数字段
    new_before_write_md准备好 .md 文件的内容后,保存之前。参数字段是文本,主要是 BeexMetatext
    gen_after_read_md读取文件内容后。参数字段是完整的文本内容。text
    gen_before_render_html渲染之前,已经准备好模板上下文变量。参数字段是表,可用的值参考模板context
    gen_after_render_html保存之前。两个字段,整个页面渲染后的 HTML 和模板上下文。html, context
    • 在 Lua 环境中提供一个 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
      
    • Lua 虽然支持读写 UTF-8,但 print() UTF-8 时会乱码,所以提供一个打印函数,方便调试时输出中文:
      --  ↓ 注意这里用点号
      beex.print(text)
      
      • 只接受一个参数,所以多个参数先连接为一个字符串,Lua 使用 .. 连接字符串而非 +
        print("中文", "会", "乱码") -- Lua 自带,支持不定参数,但是会乱码
        text = "中文" .. "不会" .. "乱码"
        beex.print(text)  -- 不会乱码
        
    • 为了安全性,移除或剪裁了 Lua 的 io、require 等模块。