2011-05-10 178 views
5

我一直在想弄清楚我將如何用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以使其從數據中加載部分基礎。由於這需要更多的時間來研究,所以我想先問是否有人解決過這個問題。

  • 如果您之前已經解決了這個問題,您是如何遞歸呈現某些東西並允許它是用戶可編輯的?
  • 如果你之前沒有解決這個問題,你會推薦我採取什麼方式?我上面詳述的方式?

在此先感謝!

回答

0

你實際上並不需要「破解」液體加載從DB諧音,乾脆延長所提供的文件系統類,閱讀更多的信息如下:

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

我實現在我自己之前用這種方式進行流動,如果你知道你是圍繞着Ruby的話,我可以證明它並不是特別困難。

至於遞歸,Liquid可能不會限制它(您的模板示例應該可以正常工作),但是我會用Timeout :: timeout(請參閱下面的鏈接)來包裝您的渲染過程以確保它不會永遠繼續下去。

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