【问题标题】:How can I write a Jekyll plugin that modifies the `site` object?如何编写一个修改 `site` 对象的 Jekyll 插件?
【发布时间】:2014-11-10 21:43:51
【问题描述】:

我想写一个 Jekyll 插件来修改 site 对象。 site 对象在整个 Jekyll 构建过程中都可用。在 Jekyll 中,添加属性最直接的方法是在 _config.yml 文件中定义它。这在某些情况下有效,但我需要更进一步。

我问这个问题的原因是因为我需要做的事情比我在 YAML 文件上下文中所能做的更多。我想向site 对象添加一个方法。我以为我只需要将方法添加到 Site 类,但它不起作用。

非工作插件:

module Jekyll
  class Site
    def foo
      "foo"
    end
  end
end

通过阅读 Jekyll 源代码以及如何扩展 Ruby 类,我假设 Jekyll 中的 site 对象将具有新的 foo 方法,但事实并非如此。供参考,here is the Site Class in the Jekyll source code

由于我阅读构建 Jekyll 的 RUby 代码的能力很差,所以这个问题与 Jekyll 本身的问题一样多。

【问题讨论】:

    标签: ruby jekyll


    【解决方案1】:

    也许你可以在没有插件的情况下做到这一点。受Jekyll Bootstrap 的启发,您可以制作一个全局变量来定位您的资产文件夹。

    _config.yml

    # can be '' or '/repositoryName'
    baseurl: /repositoryName
    
    ASSET_PATH : /assets
    

    _layouts/default.html

    ---
    front mater ...
    ---
    {% capture ASSET_PATH %}{{ site.baseurl }}{{ ASSET_PATH }}{% endcapture %}
    

    然后从帖子或页面调用资产:

    <link href="{{ ASSET_PATH }}/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    
    or
    
    ![img title]({{ ASSET_PATH }}/img/toto.jpg)
    

    【讨论】:

    • 很棒的建议,我要试试。
    • 我相信我可以通过你的建议解决我的问题,但就其原理而言,我想构建我最初设定的内容,以提高我对 Ruby 和 Jekyll 的理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多