【问题标题】:Static site generator with dynamic components具有动态组件的静态站点生成器
【发布时间】:2013-08-03 00:04:14
【问题描述】:

我正在寻找一个好的静态网站生成器。我正在研究 Jekyll / Octopress (Ruby) 或者 PhroznPieCrust (PHP)。我只有一件事让我退缩:

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: php python ruby jekyll


    【解决方案1】:

    你可以编写 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 列表替换。

    【讨论】:

    • 感谢 sn-p。所以在 Jekyll 术语中,它们被称为tags。所以我现在应该学习创建一个输出tags 的 Jekyll 插件。谢谢你。我现在正在阅读jekyllrb.com/docs/plugins
    • 有几种插件,这个例子是一个标签——它实际上是基于一个名为 Liquid 的库。例如,您还可以使用另一种称为“生成器”的插件来创建整个页面(类别页面是主要示例)。
    • 感谢您的指点。现在我知道去哪里继续学习了。
    【解决方案2】:

    经过更多研究,我发现 Phrozn 似乎可以做到。

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

    不过,我希望听到更多来自 Jekyll 的观点。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2016-06-19
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2016-06-02
      相关资源
      最近更新 更多