2011-05-10 15 views
5

He estado tratando de descubrir cómo voy a hacer la recursión con Liquid. Tengo una aplicación en la que deseo darles a los usuarios control total sobre la representación del menú. Sin embargo, el menú está definido por un árbol, por lo tanto, la necesidad de funciones recursivas en Liquid.Recursividad en Liquid Markup/Liquid Templates

¿Cómo podría hacerlo? Después de hacer un poco de lectura, estaba pensando que me abordo de esta manera:

incluyen

Yo estaba pensando en usar include esta manera:

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

Y menu_item parcial es la siguiente:

<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> 

Sin embargo, como es editable por el usuario, tendré que hackear Liquid para que cargue parciales de un dato base. Dado que tomará mucho más tiempo para estudiar, quería preguntar primero si alguien ha abordado este problema antes.

  • Si ha abordado este problema antes, ¿cómo renderizar algo de forma recursiva y permitir que sea editable por el usuario?
  • Si no ha abordado esto antes, ¿qué camino recomendaría tomar? La forma en que detallo arriba?

Gracias de antemano!

Respuesta

0

En realidad no es necesario 'piratear' Líquido para cargar los parciales de la base de datos, sólo tiene que extender las clases del sistema de archivos proporcionados, lea lo siguiente para más información:

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

he implementado Líquido de esta manera antes que yo, y puedo responder que no es particularmente difícil si sabes que estás a la vuelta de la esquina con Ruby.

En cuanto a la recursividad, líquido probablemente no limitarlo (sus ejemplos de plantillas sólo deben trabajar), pero me gustaría envolver su proceso de renderizado con un tiempo de espera :: tiempo de espera (ver enlace más abajo) para asegurarse de que no lo hace seguir por siempre.

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