2011-10-05 11 views
9

मैं सिम्फनी 2 में एक परियोजना पर काम कर रहा हूं और मेरे पास HTML के कई छोटे टुकड़े हैं जिन्हें मेरे मुख्य विचारों में से एक में शामिल करने की आवश्यकता है। आधिकारिक ट्विग प्रलेखन के अनुसार मुझे बस {% include 'filename.html' %} का उपयोग करने में सक्षम होना चाहिए, लेकिन सिम्फनी में जब तक कि फ़ाइल नाम ".html.twig" में समाप्त नहीं हो जाता है, यह फेंकता है और त्रुटि कहता है कि यह फ़ाइल नहीं ढूंढ सकता है। मैं इन फ़ाइलों के लिए ट्विग टेम्पलेट्स का उपयोग करने से बचना चाहता हूं क्योंकि उनके पास कोई गतिशील सामग्री नहीं है और बहुत से डबल ब्रेसेस (वे जावास्क्रिप्ट टेम्पलेट्स हैं) और टेम्पलेट डिज़ाइनर को इन फ़ाइलों में से प्रत्येक को {% raw %} टैग में लपेटना होगा। वास्तव में इसे करने के लिए Kludgey तरीका।मैं सिम्फनी 2/ट्विग टेम्पलेट्स में कच्ची HTML फ़ाइलों को कैसे शामिल करूं?

+0

यदि ऑफिकल दस्तावेज कहता है कि इसे काम करना चाहिए, तो शायद आपको ट्विग और ट्विग बंडल को एक नए संस्करण में अपडेट करने का प्रयास करना चाहिए (अपनी डीपीएस फ़ाइल संपादित करें)। – greg0ire

+0

मैंने कोशिश की है लेकिन मुझे लगता है कि इस मुद्दे को सिम्फनी ट्विग मुद्दे की बजाय टेम्पलेट स्थान/प्रकार को कैसे संभालता है। – wdh

+0

फिर आपको एक बग रिपोर्ट दर्ज करनी चाहिए। – greg0ire

उत्तर

7

टहनी फ़ाइल एक्सटेंशन पर एक त्वरित पुनर्कथन (प्रलेखन से लिया गया):

प्रत्येक टेम्पलेट नाम भी दो एक्सटेंशन है कि उस टेम्पलेट के लिए प्रारूप और इंजन को निर्दिष्ट किया है।

AcmeBlogBundle:Blog:index.html.twig - HTML format, Twig engine 
AcmeBlogBundle:Blog:index.html.php - HTML format, PHP engine 
AcmeBlogBundle:Blog:index.css.twig - CSS format, Twig engine 

डिफ़ॉल्ट रूप से, किसी भी Symfony2 टेम्पलेट या तो टहनी या PHP, और विस्तार के अंतिम भाग में लिखा जा सकता है (उदाहरण के लिए .twig या .php) निर्दिष्ट जो इन दो इंजनों में से इस्तेमाल किया जाना चाहिए । एक्सटेंशन का पहला भाग, (उदा। एचटीएमएल,। सीएसएस, आदि) अंतिम प्रारूप है जो टेम्पलेट उत्पन्न करेगा।

इसलिए यह मुझे समझ में आता है कि .html के रूप में फ़ाइल सहित कम से कम संदिग्ध होगा, भले ही यह कोई त्रुटि न डाले।

तो तुम 3 विकल्प हैं:

  1. फ़ाइलों विशुद्ध रूप से जावास्क्रिप्ट हैं तो उन्हें अपने पेज में स्क्रिप्ट टैग के रूप में शामिल करते हैं।

  2. यदि वे मिश्रित एचटीएमएल और जेएस हैं तो जेएस से {% कच्चे%} से बचें और फ़ाइलों को foo.html.twig टेम्पलेट्स के रूप में शामिल करें। यदि इस तरह के कई स्क्रिप्ट शामिल किए जा रहे हैं तो संभवतः आपके डिजाइनर थोड़ा रिफैक्टरिंग के साथ कर सकते हैं और अपनी स्क्रिप्ट को बाहरी फाइलों में ले जा सकते हैं (विकल्प 1 देखें)

  3. यदि आप वास्तव में जोर देते हैं कि आप हमेशा लिख ​​सकते हैं कच्चे HTML फ़ाइलों को शामिल करने के लिए टवीग एक्सटेंशन। (संपादित करें: इस विकल्प पर अधिक जानकारी के लिए नीचे @ हैप्रोग का उत्तर देखें)।

    {{include_html ('foo/bar.html')}}

  4. अद्यतन 2015 टहनी के बाद से जोड़ा गया है स्रोत समारोह:

{{ source('AcmeSomeBundle:Default:somefile.html.twig') }}

कुडोस लिए @ विकल्प 4 के लिए नीचे दी गई टिप्पणियों में निगेल एंजेल।

+1

जो मैं करने की कोशिश कर रहा हूं उसके पास जावास्क्रिप्ट द्वारा उपयोग के लिए पृष्ठ में मूंछ टेम्पलेट्स को शामिल करने का एक तरीका है। '{% Raw%} 'टैग से घिरे टेम्पलेट में उन्हें सीधे रखकर काम करता है लेकिन मुझे लगता है कि यह बहुत असंगठित है और बहुत कम टेम्पलेट बिट्स होने पर अनावश्यक हो सकता है। AJAX के माध्यम से टेम्पलेट बिट्स को लोड करना अनावश्यक रूप से क्लाइंट एंड पर चीजों को धीमा कर देता है क्योंकि अधिक अनुरोध हैं। टेम्पलेट्स को एक टवीग फ़ाइल में रखना जिसमें उसमें कोई वास्तविक ट्विग मार्कअप नहीं है ('{% raw%}' के अलावा) मेरे अंदर ओसीडी डेवलपर कीड़े हैं लेकिन यह इस मामले में सबसे आसान विकल्प जैसा लगता है। धन्यवाद। – wdh

+5

ट्विग ने 'स्रोत' फ़ंक्शन '{{स्रोत ('AcmeSomeBundle: Default: somefile.html.twig')}} –

+0

को इसके बजाय ** phtml ** फ़ाइलों का उपयोग करना संभव है? –

10

मैं भी खोजने में कोशिश कर रहा एक ही समस्या पर आया ट्विग टेम्पलेट्स में कच्चे के रूप में फ़ाइलों (मूंछ टेम्पलेट्स) को शामिल करने का एक समाधान ताकि टिग उन्हें पार्स करने का प्रयास न करे।

सबसे पहले मेरे पास मूंछ टेम्पलेट फाइलें थीं जिसका नाम केवल someemplate.html था और {% raw %} टैग में लपेटा गया था। यह थोड़ी देर के लिए काम किया, लेकिन फिर मैंने हैंडलबार्स प्लगइन (मूंछ सिंटैक्स के लिए) के साथ phpStorm आईडीई का उपयोग शुरू किया।PhpStorm के लिए फ़ाइलों को मूंछ सिंटैक्स के रूप में पहचानने के लिए, उन्हें एक अनन्य फ़ाइल एक्सटेंशन (.mustache डिफ़ॉल्ट रूप से) की आवश्यकता होती है, इसलिए मैंने अपना someemplate.html का नाम बदलकर somemplate.mustache कर दिया लेकिन मुझे वास्तव में इस विचार को नापसंद किया गया कि मेरे मूंछ टेम्पलेट्स को लपेटने की आवश्यकता है टवीग टैग। तो मैंने अपने विकल्प 3 में @rdjs ने जो कहा, वह कर दिया। यह सबसे अच्छा समाधान आईएमओ है। ऐसा करके

function twig_include_raw(Twig_Environment $env, $template) { 
    return $env->getLoader()->getSource($template); 
} 
$twig->addFunction('include_raw', new Twig_Function_Function('twig_include_raw', array('needs_environment' => true))); 
इसके साथ ही जगह आप आसानी से टहनी के बिना के रूप में "कच्चे" फ़ाइलों को शामिल कर सकते हैं में

उन्हें पार्स करने:

यहाँ काम कर टहनी विस्तार समारोह मैंने बनाया है

{{ include_raw('sometemplate.mustache')|raw }} 

मैं भी बनाया एचटीएमएल हेड सेक्शन में मूंछ टेम्पलेट्स को सरलीकृत करने के लिए एक ट्विग मैक्रो:

{% macro mustache_script(id, file) -%} 
<script id="{{ id }}" type="text/x-mustache-template"> 
{{ include_raw(file)|raw }} 
</script> 
{%- endmacro %} 

और उपरोक्त मैक्रो के साथ फ़ाइल को अपने ट्विग टेम्पलेट (उदाहरण के लिए {% import "macros.twig" %}) में आयात करने के बाद, आप आसानी से {{ mustache_script('sometemplate_tpl', 'sometemplate.mustache') }} को HTML <head> अनुभाग के अंदर अपने ट्विग टेम्पलेट्स में मूंछ टेम्पलेट फ़ाइलों को आसानी से आयात कर सकते हैं।

मुझे उम्मीद है कि यह किसी ऐसे व्यक्ति की सहायता करेगा जो एक ही समस्या का हल ढूंढ रहा है।

+0

ऐसा लगता है कि यह एक समस्या को हल करेगा जो मैं देख रहा हूं, लेकिन मुझे नहीं पता कि twig_include_raw फ़ंक्शन को परिभाषित किया जाना चाहिए और $ twig-> addFunction को कब/कब कॉल करना चाहिए। क्या आप इसे थोड़ा और समझा सकते हैं। – Craig

+0

@ क्रिएग क्षमा करें मैंने जल्द ही जवाब नहीं दिया है। आप कहीं भी फ़ंक्शन को परिभाषित कर सकते हैं। '$ Twig = new twig_Environment ($ loader) के साथ टवीग सेट अप करने के बाद बस' $ twig-> addFunction() 'को कॉल करना सुनिश्चित करें;' मेरे पास आमतौर पर मेरा स्वयं का twigInit() 'फ़ंक्शन होता है जो Twig को सेट करने में संभालता है मेरे द्वारा उपयोग किए जाने वाले एक्सटेंशन को लोड करने सहित वातावरण।आप http://twig.sensiolabs.org/doc/advanced.html – Haprog

+2

पर ट्विग को विस्तारित करने के बारे में प्रलेखन पृष्ठ भी पढ़ना चाहेंगे। यह बहुत अच्छा है। यदि आप 'need_environment' के बाद विकल्पों में" is_safe '=> array (' all ') "जोड़ते हैं, तो आप" कच्चे "की आवश्यकता को बाईपास कर सकते हैं। –

4

यदि आप विस्तार में हैं, तो कारी पर फ़ॉलो करें .. आप इसे इस तरह से लागू कर सकते हैं।

public function getFunctions() { 
    return [ 
     'include_raw' => new \Twig_Function_Method($this, 'twig_include_raw', array('needs_environment'=> true, 'is_safe'=> array('all'))) 
    ]; 
} 

और यह $-- twig_include_raw प्रकार विधि होगी। आप अपने टेम्पलेट के भीतर शामिल होंगे:

{{ include_raw("my/file/here.html.twig") }} 

"कच्चे" की आवश्यकता नहीं है।

5

मैं इस पोस्ट में आया, क्योंकि मेरे पास एक समान सवाल था। एक घंटे या तो खोज और कोशिश करने के बाद, मुझे पता चला कि Twig Version 1.15 the "source Function" was added से।

शायद यह भविष्य में किसी की सहायता करता है।

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

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