2012-09-25 140 views
4

我有一個自加入表格,其中每個文件夾都有一個父級,並且這個深度是無限的。一個文件夾可以將另一個文件夾作爲父項,對深度沒有限制。Symfony2樹枝無限深度

今天我的代碼看起來像這樣,我正在尋找一種深入挖掘的方式,而不需要對每一步進行硬編碼,也許有一種方法可以用循環定義一個小枝函數,即調用本身在循環中的每一輪?

<select id='parent' name='container'> 
    <option value='none'>No parent</option> 
     {% for folder in folders %} 
      <option value='{{ folder.id }}'>{{ folder.name }}</option> 
       {% for folder in folder.children %} 
        <option value='{{ folder.id }}'>&nbsp;&nbsp;&nbsp;{{ folder.name }}</option>  
       {% endfor %} 
     {% endfor %} 
</select> 

回答

8

你需要一個單獨的文件渲染選項,遞歸包括本身:

<select> 
    <option value="none">No parent</option> 
    {% include 'options.html.twig' with {'folders': folders, 'level': 0} %} 
</select> 

options.html.twig

{% for folder in folders %} 
    <option value="{{ folder.id }}"> 
     {% for i in range(0, level) %}&nbsp;{% endfor %} 
     {{ folder.name }} 
    </option> 

    {% include 'options.html.twig' with {'folders': folder.children, 'level': level + 1} %} 
{% endfor %} 

我在這裏寫了這個代碼,所以不要」不要期望它是正確的,但它應該足以給你這個想法。

+0

感謝您的支持,我會嘗試一下,然後回到yall。 –

+0

這一切都搞定了,你教給我一種新技術!一切順利。 –

0

這必須用遞歸來完成。我從來沒有用樹枝測試過它,但你可以開發一個機制,遞歸地包含一個模板。

因此,您的當前模板將包含在循環中,直到達到特定條件。所以你需要在內部循環中使用某種if子句。

祝你好運;)