液体标记/液体模板中的递归

我一直想弄清楚我将如何用Liquid进行递归。 我有一个应用程序,我想让用户完全控制菜单的呈现。 但是,菜单是由树定义的,因此需要Liquid中的递归函数。

我怎么会这样呢? 做了一些阅读后,我以为我会这样解决它:

包括

我想用这种方式include

  

而menu_item部分是这样的:

 
  • {{ menu_item.name }}
      {{ include 'menu_item' with menu_item.children }}
  • 但是,由于它是用户可编辑的,我需要破解Liquid以使其从数据库加载部分内容。 由于这需要花费更多的时间来学习,我想先询问是否有人之前已经解决了这个问题。

    • 如果您之前已经解决过这个问题,那么如何递归呈现某些内容并允许其进行用户编辑?
    • 如果您之前没有解决过这个问题,我建议您选择哪种方式? 我上面详述的方式?

    提前致谢!

    您实际上不需要“破解”Liquid来从DB加载部分内容,只需扩展提供的文件系统类,请阅读以下内容以获取更多信息:

    https://github.com/Shopify/liquid/blob/master/lib/liquid/file_system.rb

    我已经在我之前以这种方式实现了Liquid,如果你知道你已经绕过Ruby,我可以保证不会特别困难。

    至于递归,Liquid可能不会限制它(你的模板示例应该正常工作),但是我将使用Timeout :: timeout包装你的渲染过程(参见下面的链接),以确保它不会永远持续下去。

    http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout.html