7

我一直在试图弄清楚我将如何使用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 以使其从数据库加载部分内容。由于这将花费更多时间来学习,所以我想先询问是否有人以前解决过这个问题。

  • 如果您以前解决过这个问题,您是如何递归渲染某些内容并允许用户编辑的?
  • 如果你以前没有解决过这个问题,你会建议我采取什么方式?我上面详述的方式?

提前致谢!

4

1 回答 1

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

于 2012-03-20T10:21:58.837 回答