2013-06-21 8 views
39

मैं सिग्फनी 2 का उपयोग कर एक PHP प्रोजेक्ट पर टिग टेम्पलेटिंग के साथ काम कर रहा हूं, और मुझे इस समस्या का हल नहीं मिल रहा है।Symfony2 - Twig - मैं मूल टेम्पलेट में पैरामीटर कैसे भेज सकता हूं?

मेरे पास एक व्यवस्थापक बंडल है और सभी टेम्पलेट व्यवस्थापक आधार से विस्तारित हैं जिसमें मेनू के साथ एक मास्टर टेम्पलेट है।

मुझे उस पृष्ठ पर मौजूद होने पर चयनित पृष्ठ के मूल टेम्पलेट में मेनू का वर्तमान टैब सेट करने की आवश्यकता है।

क्या extends के माध्यम से आधार टेम्पलेट में पैरामीटर पास करने का कोई तरीका है?

base.html.twig:

{# base.html.twig #} 
... 
<ul> 
    <li{% if menu_selected|default('one') == 'one' %} class="selected"{% endif %}>One</li> 
    <li{% if menu_selected == 'two' %} class="selected"{% endif %}>Two</li> 
    <li{% if menu_selected == 'three' %} class="selected"{% endif %}>Three</li> 
</ul> 
... 

page2.html.twig: प्रतिपादन page2.html से

{# page2.html.twig #} 
{% extends 'YourBundle::base.html.twig' %} 

{% set menu_selected = 'two' %} 

आउटपुट

उत्तर

67

यहाँ एक सरल उदाहरण है .twig:

<ul> 
    <li>One</li> 
    <li class="selected">Two</li> 
    <li>Three</li> 
</ul> 
+0

बढ़िया! आपका बहुत बहुत धन्यवाद! –

+0

@ जर्ममेनलेना आपका बहुत स्वागत है :) – Paulpro

+15

यदि आप अपने आधार के भीतर चर सेट करते हैं, तो बस एक नोट (जैसा कि मैंने स्वयं पर ठोकर खाई है), तो विरासत टेम्पलेट इसे ओवरराइट करने में सक्षम नहीं होंगे। – carbontwelve

0

एक बेहतर तरीका है कि मैं सिर्फ पता चला शॉर्टकट रास्ता नाम के लिए मार्ग की जाँच करके बुनियादी दृष्टिकोण है:

<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li> 

या किसी अन्य तरीके से समूह यह के अंतर्गत आता है के अनुसार अपने सभी मार्ग शॉर्टकट नामों नाम के लिए है । उदाहरण के लिए आपके उत्पाद नियंत्रक के सभी मार्ग "उत्पाद _...." से शुरू होते हैं और फिर टेम्पलेट में आप यह कर सकते हैं:

<li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}"> 
संबंधित मुद्दे