我想繪製深度不確定的樹(兒童孩子的孩子等)。我需要循環遍歷數組;我怎麼能在Twig中做到這一點?如何在樹枝中渲染樹
回答
首先我想,這可能是直截了當的 - 但並不那麼容易。
你需要創建一個邏輯,也許用一個php類的方法,何時包括一個樹枝子模板,什麼時候不包括。
<!-- tpl.html.twig -->
<ul>
{% for key, item in menu %}
{# pseudo twig code #}
{% if item|hassubitem %}
{% include "subitem.html.tpl" %}
{% else %}
<li>{{ item }}</li>
{% endif %}
{% endfor %}
</ul>
所以,你可以使用特殊的twig loop variable,這是可用的樹枝在for循環。但我不確定這個迴路變量的範圍。
對不起,只提供一種解決方案,但也許我希望我的想法可以幫助你(一點點)。
這個和其他信息是可用的Twigs "for" Docu!
謝謝domi27,我玩了你的想法,並提出了這一點。我做了一個嵌套數組作爲我的樹,['link'] ['sublinks']爲null或更多相同的另一個數組。
模板
子模板文件使用遞歸的:
<!--includes/menu-links.html-->
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{% include "includes/menu-links.html" with {'links': link.sublinks} %}
</ul>
{% endif %}
</li>
{% endfor %}
然後在主模板調用這個(有點多餘 '與' 的東西存在):
<ul class="main-menu">
{% include "includes/menu-links.html" with {'links':links} only %}
</ul>
宏
類似的效果可以用宏來實現:
<!--macros/menu-macros.html-->
{% macro menu_links(links) %}
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{{ _self.menu_links(link.sublinks) }}
</ul>
{% endif %}
</li>
{% endfor %}
{% endmacro %}
在主模板做到這一點:
{% import "macros/menu-macros.html" as macros %}
<ul class="main-menu">
{{ macros.menu_links(links) }}
</ul>
希望它能幫助:)
如果你想使用在宏相同的模板你應該使用這樣的事情來保持兼容Twig 2.x:
{% macro menu_links(links) %}
{% import _self as macros %}
{% for link in links %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% if link.sublinks %}
<ul>
{{ macros.menu_links(link.sublinks) }}
</ul>
{% endif %}
</li>
{% endfor %}
{% endmacro %}
{% import _self as macros %}
<ul class="main-menu">
{{ macros.menu_links(links) }}
</ul>
這擴展random-coder
的回答,並結合dr.scre
的暗示,twig documentation about macros到現在使用_self
但進口本地。
截至今天,這應該是答案。 –
這裏的答案引導我到我的解決方案。
我有一個類別實體與自引用ManyToOne關聯(父對子女)。
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
private $children;
在我的樹枝模板我正在渲染樹視圖這樣的:
<ul>
{% for category in categories %}
{% if category.parent == null %}
<li>
<a href="{{ category.id }}">{{ category.name }}</a>
{% if category.children|length > 0 %}
<ul>
{% for category in category.children %}
<li>
<a href="{{ category.id }}">{{ category.name }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endif %}
{% endfor %}
</ul>
如果您擁有多個級別的層次結構,該怎麼辦? – PMoubed
如果您正在運行PHP 5.4或更高版本,有一個美好的新的解決方案(2016日)至Alain Tiemblo的這個問題:https://github.com/ninsuo/jordan-tree。
這是一個「樹」標籤,用於確切的目的。標記應該是這樣的:
{% tree link in links %}
{% if treeloop.first %}<ul>{% endif %}
<li>
<a href="{{ link.href }}">{{ link.name }}</a>
{% subtree link.sublinks %}
</li>
{% if treeloop.last %}</ul>{% endif %}
{% endtree %}
拿了流感的答案,修改了一些:
{# macro #}
{% macro tree(items) %}
{% import _self as m %}
{% if items %}
<ul>
{% for i in items %}
<li>
<a href="{{ i.url }}">{{ i.title }}</a>
{{ m.tree(i.items) }}
</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
{# usage #}
{% import 'macros.twig' as m %}
{{ m.tree(items) }}
- 1. Symfony Form Collection樹枝渲染
- 2. 樹枝和原子圖案 - 乾淨的樹枝渲染
- 3. 樹枝什麼都不渲染
- 4. Symfony 3 FOSRestBundle樹枝 - 不渲染
- 5. Symfony複選框列出樹枝渲染
- 6. 多重渲染控制器樹枝
- 7. 如何在Symfony2中將json渲染成樹枝
- 8. 渲染Subversion樹?
- 9. 如何在樹枝
- 10. 如何在樹枝
- 11. 如何使用樹枝渲染單頁WordPress模板
- 12. 如何使用Symfony2 +樹枝渲染動態選擇
- 13. 如何用樹枝JavaScript方法渲染方法
- 14. 樹枝「渲染」的方法:如何獲得請求變量
- 15. 如何渲染自定義位置的樹枝?
- 16. 在樹枝模板中渲染自定義formType選項
- 17. 在Symfony2中動態放置HTML渲染樹枝模板?
- 18. 在symfony2中創建事件以渲染樹枝文件
- 19. 如何在Silex中使用「渲染器」在樹枝中插入控制器
- 20. 樹枝與樹枝原始
- 21. 如何在樹枝模板中獲取樹枝塊的來源?
- 22. 如何在HTML + PHP渲染樹(笨)
- 23. 如何用樹枝
- 24. 如何用樹枝
- 25. 如何用樹枝
- 26. Symfony 2.7和渲染樹枝中的選擇
- 27. 從樹枝文件中的數據庫渲染圖像
- 28. 從多維數組(渲染陣列)在樹枝
- 29. 剪枝樹枝
- 30. 使用渲染集合渲染樹
非常好,謝謝!如果你想在同一個模板中使用宏,你可以使用'{{_self.menu_links(links)}}'。 – flu
謝謝你,這個想法讓我的大腦受到傷害,但你的回答很有道理。 – azzy81
我有一個與我的項目與評論問題。子集(子鏈)也包含在主要集合(鏈接)中。所以在包含之前,我必須檢查評論是否有'父'條目。 –