2012-03-03 15 views
20

में एक और मैक्रो के अंदर एक मैक्रो को कॉल करना button_primary मैक्रो button मैक्रो को टवीग इंजन में कॉल कर सकता है? अपने आप कोट्विग

{% macro button(label, type, size) %} 
    {% set type = type|default('default') %} 
    {% set size = size|default('large') %} 
    {% set cls = ['btn'] %} 

    <a href="#" class="{{ cls|join(' ') }}">{{ label }}</a> 
{% endmacro %} 

{% macro button_primary(label, size) %} 
    {{ button(label, 'primary', size) }} 
{% endmacro %} 

उत्तर

48

दुर्भाग्य Gremo के जवाब में काम करता है, लेकिन यह करने के लिए सही तरीका नहीं है।

जब आप टेम्पलेट जहां आप इसे उपयोग करने के लिए जा रहे हैं में मैक्रो निर्धारित, आप के बजाय यह आयात करने के _self.input के माध्यम से मैक्रो सीधे (फोन करने के लिए परीक्षा हो सकती है); भले ही काम करने लगता है, यह वर्तमान कार्यान्वयन का एक दुष्प्रभाव है और यह अब Twig 2.x में काम नहीं करेगा।

http://twig.sensiolabs.org/doc/tags/macro.html

सही तरीका:

{% macro input(name, value, type, size) %} 
    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> 
{% endmacro %} 

{% macro wrapped_input(name, value, type, size) %} 
    {% import _self as forms %} 

    <div class="field"> 
     {{ forms.input(name, value, type, size) }} 
    </div> 
{% endmacro %} 
+1

अच्छा बिंदु। मुझे प्रश्न के समय उस नोटिस को याद नहीं किया जा सकता है। फिर भी धन्यवाद... – gremo

3

उत्तर:: मैं इस समाधान की कोशिश की है, लेकिन यह काम नहीं करता है, यह कहना है कि समारोह "बटन" मौजूद नहीं है यह एक काफी नई सुविधा जोड़ी, this link देखते हैं। वैसे भी समाधान _self उपयोग कर रहा है:

{% macro button_primary(label, size) %} 
    {{ _self.button(label, 'primary', size) }} 
{% endmacro %} 
+0

कृपया यह करने के लिए सही तरीका के लिए मेरा उत्तर देखें। – WTPK

संबंधित मुद्दे