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

时间:2013-08-01 15:01:23

标签: php python ruby jekyll

我正在寻找一个好的静态站点生成器。我正在研究Jekyll / Octopress(Ruby)或PhroznPieCrust(PHP)。我只有一件事能阻碍我:

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

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

目前,我正在使用PyroCMS,我将此自定义代码作为模板的一部分。 (不太理想,我知道。因为我打算从PyroCMS迁移出来,所以没有费心去解决它。)

我更喜欢使用Jekyll(真正的功能)或Phrozn或PieCrust(因为我可以重用我之前的PHP代码),但我看不到如何创建一个半动态页面,就像我上面描述的那样。我也对其他静态站点生成器开放 - 只要它们是PHP,Ruby或Python。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以编写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列表。

答案 1 :(得分:0)

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

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

我希望从Jekyll的角度听到更多。