2011-05-10 3 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를 해킹해야합니다. 베이스. 그게 공부하는데 더 많은 시간을 필요로하기 때문에, 나는 누군가가 전에이 문제를 다루는 지 먼저 물어보고 싶었다.

  • 이 문제를 해결하기 전에 어떻게 재귀 적으로 렌더링하고 사용자가 편집 할 수있게 했습니까?
  • 이전에이 문제를 해결하지 않았다면 어떤 방법을 택할 것입니까? 내가 위에 상술 한 방법?

미리 감사드립니다. 내가 구현 한

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

:

답변

0

당신은 실제로 DB에서 부분 지문을로드 액체를 '해킹'할 필요가 없습니다, 단순히 더 많은 정보를 원하시면 다음을 읽어 제공된 파일 시스템 클래스를 확장 이런 식으로 나 자신보다 앞서라. 나는 네가 루비를 둘러싼다는 것을 안다면 특별히 어렵지 않다는 것을 보증 할 수있다.

재귀에 관해서는 Liquid가 아마 제한하지 않을 것이고 (템플릿 예제도 제대로 작동 할 것입니다.) 렌더링 프로세스를 Timeout :: timeout (아래 링크 참조)으로 감싸서 영원히.

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