में एक पेड़ कैसे प्रस्तुत करें मैं एक अनिश्चित गहराई (बच्चों के बच्चों के बच्चों आदि) के साथ एक पेड़ प्रस्तुत करना चाहता हूं। मुझे सरणी के माध्यम से फिर से लूप की जरूरत है; मैं इसे टिग में कैसे कर सकता हूं?ट्विग
ट्विग
उत्तर
सबसे पहले मैंने सोचा, इसे सीधे हल किया जा सकता है - लेकिन यह इतना आसान नहीं है।
आपको एक तर्क बनाने की आवश्यकता है, शायद एक PHP वर्ग विधि के साथ, जब एक twig subtemplate को शामिल किया जाए और कब नहीं।
<!-- 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, जो लूप के लिए एक टहनी अंदर उपलब्ध है इस्तेमाल कर सकते हैं। लेकिन मुझे इस लूप चर के दायरे के बारे में निश्चित नहीं है।
केवल एक दृष्टिकोण प्रदान करने के लिए खेद है, लेकिन शायद मुझे उम्मीद है कि मेरे विचार आपकी मदद कर सकते हैं (थोड़ा सा)।
यह और अन्य जानकारी Twigs "for" Docu पर उपलब्ध हैं!
धन्यवाद domi27, मैंने आपके विचार के साथ खेला और इसके साथ आया। मैंने अपने पेड़ के रूप में एक घोंसला वाला सरणी बना दी, ['लिंक'] ['सब्लिंक्स'] शून्य या उससे अधिक की एक और सरणी है।
टेम्पलेट्स
उप टेम्पलेट फ़ाइल के साथ recurse करने:
<ul class="main-menu">
{% include "includes/menu-links.html" with {'links':links} only %}
</ul>
:
<!--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 %}
तो मुख्य टेम्पलेट कॉल इस (थोड़े सामान '' के साथ वहाँ निरर्थक) में
मैक्रोज़
एक समान प्रभाव मैक्रो के साथ प्राप्त किया जा सकता है:
<!--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
लेकिन आयात का उपयोग करने के लिए।
आज के रूप में, यह जवाब होना चाहिए। –
यहां दिए गए उत्तरों मेरे समाधान के लिए नेतृत्व करते हैं।
मेरे पास कई संदर्भों के साथ एक श्रेणी इकाई है जिसमें कई लोग हैं (बच्चों के लिए माता-पिता)।करने के लिए
<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 के रूप में):
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
private $children;
मेरी टहनी टेम्पलेट में मैं इस तरह ट्री दृश्य प्रतिपादन कर रहा हूँ 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. ट्विग
- 2. ट्विग
- 3. ट्विग
- 4. ट्विग
- 5. ट्विग
- 6. ट्विग
- 7. ट्विग
- 8. ट्विग
- 9. ट्विग
- 10. ट्विग पथ
- 11. ट्विग: स्ट्रिंग
- 12. ट्विग वेरिएबल
- 13. एक ट्विग टेम्पलेट में ट्विग डिलीमीटर से कैसे बचें?
- 14. ट्विग: रेंडर बनाम
- 15. ट्विग सरणी-कुंजी
- 16. सिम्फनी 2 और ट्विग
- 17. ट्विग एक्सेस ऐरे इंडेक्स?
- 18. एक अन्य ट्विग चर
- 19. ट्विग - एक ही वैरिएबल
- 20. ट्विग: वर्तमान लोकेल
- 21. सिम्फनी 2 + ट्विग ग्लोबल वैरिएबल
- 22. ट्विग टेम्पलेट्स इंजन: वर्तमान यूआरएल
- 23. सिम्फनी फॉर्म/सिलेक्स और ट्विग
- 24. ट्विग मैक्रोज़ वीएस में शामिल हैं?
- 25. सिलेक्स का उपयोग कर ट्विग एडफिल्टर?
- 26. ट्विग: वर्ष के प्रत्येक महीने के लिए
- 27. ट्विग के साथ प्रदर्शन सिद्धांत संग्रह? (Symfony2)
- 28. ट्विग: कुछ ब्लॉक चुनना और उन्हें
- 29. सिम्फनी ट्विग फॉर्म विशिष्ट फ़ील्ड की थिंगिंग
- 30. Aptana में ट्विग प्लगइन कॉन्फ़िगर करें 3
बहुत अच्छा, धन्यवाद! यदि आप उसी टेम्पलेट में मैक्रो का उपयोग करना चाहते हैं तो आप '{{_self.menu_links (लिंक)}}' का उपयोग कर सकते हैं। – flu
धन्यवाद, इस विचार ने मेरे दिमाग को चोट पहुंचाई लेकिन आपका जवाब सही समझ में आया। – azzy81
मुझे टिप्पणियों के साथ मेरी परियोजना के साथ एक मुद्दा था। मुख्य संग्रह (लिंक) में उपखंड (sublinks) भी शामिल थे। इसलिए शामिल होने से पहले मुझे यह जांचना पड़ा कि टिप्पणी में 'पैरेंट' प्रविष्टि है या नहीं। –