带有动态组件的静态站点生成器


Static site generator with dynamic components

我正在寻找一个好的静态站点生成器。我正在研究Jekyll/Otompress(Ruby),或者Phrozen或PieCrust(PHP)。我只有一件事阻碍了我:

如何创建一个侧边栏小部件,在构建/编译时读取JSON文件中的数据,并根据数据生成静态页面?一个特殊的用例是,当我有一个事件的JSON文件,并且我想在一个静态页面上显示它们作为侧边栏上的一周事件列表。

我知道我可以简单地使用客户端Javascript来加载和处理JSON文件,然后操作DOM,但我确信这不是一个好主意。

目前,我正在使用PyroCMS,并将此自定义代码作为模板的一部分。(我知道这并不理想。由于我计划从PyroCMS迁移出去,所以我没有费心去修复它。)

我更喜欢使用Jekyll(真正的功能性)、Phrozen或PieCrust(因为我可以重用以前的PHP代码),但我不知道如何创建像上面描述的那样的半动态页面。我对其他静态站点生成器也持开放态度——只要它们是PHP、Ruby或Python。

提前感谢您的帮助。

您可以编写Jekyll插件来实现这一点,可能是一个标签。如果您将JSON放在一个名为_data的目录中,那么标签插件的骨架将类似于:

module Jekyll
  class JsonEventsTag < Liquid::Tag
    def initialize(tag_name, markup, tokens)
      super
        # Open & Parse JSON file somthing like
        @events = JSON.parse(File.read("_data/events.json"));
      end
      def render(context)
        # loop over @events, format into HTML and return the result
      end
    end
  end
end
Liquid::Template.register_tag('sidebar_events', Jekyll::JsonEventsTag)

然后,您可以将布局中的标签称为

{% sidebar_events %}

当网站建立时,它将被您格式化的JSON列表所取代。

经过更多的研究,我发现Phrozen似乎能够做到这一点。

http://www.phrozn.info/en/documentation/providers/

不过,我希望能从杰基尔的角度听到更多。