我正在寻找一个好的静态站点生成器。我正在研究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/
不过,我希望能从杰基尔的角度听到更多。