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

时间:2011-05-10 07:36:14

标签: ruby liquid

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

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

包含

我在考虑以这种方式使用include

<ul id='site_nav' class='nav'>
  {{ include 'menu_item' with menu_items }}
</ul>

menu_item部分是这样的:

<li id='{{menu_item.dom_id}}' class='{{menu_item.css_menu_class}}'>
  {{ menu_item.name }}
  <ul>
    {{ include 'menu_item' with menu_item.children }}
  </ul>
</li>

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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