我一直想弄清楚我将如何用Liquid进行递归.我有一个应用程序,我想让用户完全控制菜单的呈现.但是,菜单是由树定义的,因此需要Liquid中的递归函数.
我该怎么做?做了一些阅读后,我以为我会这样解决它:
包括
我想用include这种方式:
<ul id='site_nav' class='nav'>
{{ include 'menu_item' with menu_items }}
</ul>
Run Code Online (Sandbox Code Playgroud)
而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>
Run Code Online (Sandbox Code Playgroud)
但是,由于它是用户可编辑的,我需要破解Liquid以使其从数据库加载部分内容.由于这需要花费更多的时间来学习,我想先问一下是否有人之前已经解决了这个问题.
提前致谢!
您实际上不需要“破解” 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
| 归档时间: |
|
| 查看次数: |
1741 次 |
| 最近记录: |