2009-09-14 12 views
9

मैं एक सीएमएस लिखने जा रहा हूं, लेकिन अभी मैं अपने सभी विचार लिख रहा हूं और शुरू करने से पहले मेरी सभी अवधारणाओं को सीधे प्राप्त करने की कोशिश कर रहा हूं। जिन चीज़ों पर मैं फटा हुआ हूं उनमें से एक यह है कि टेम्पलेट भाषा का उपयोग करना और वेबसाइट के पृष्ठों को पार्स करना है, और सामग्री आइटमों के साथ टेम्पलेट टैग को प्रतिस्थापित करना है, या सीधे सीधी PHP के साथ साइट विकसित करना है और सीएमएस डेटा संरचनाएं उत्पन्न करता है जो मदद करते हैं।टेम्पलेट भाषा बनाम सीधे PHP

{navigation: products} 

बनाम

foreach($cms_label['products'] as $product) { 

    echo '<li class="product_nav">'. 
     '<a href="products/{$product.id}">{$product.name}</a>'. 
     "</li>\n"; 

} 

पूर्व क्लीनर है लेकिन यह एक भाषा की खोज करने, प्लस प्रदर्शन से पहले हर पृष्ठ को पार्स शामिल होगा: उदाहरण के लिए। उत्तरार्द्ध कम साफ है लेकिन मुझे लगता है कि अगर सीएमएस ने सभी कोड के लिए डेटा प्रदान किया तो यह वास्तव में बहुत अच्छा काम कर सकता है। लेकिन, क्या प्रस्तुति के साथ मिश्रण मिश्रण माना जाएगा? एक और विकल्प मैंने माना है कि टेम्पलेट टैग के समान PHP फ़ंक्शन का उपयोग करना है:

<?php navigation('products'); ?> 

आपके विचार क्या हैं?

ध्यान रखें मैं कुछ भी एक निश्चित स्थान पर एक पेज भी शामिल है, या एक बिना क्रम वाली सूची बाहर लिखने की तुलना में अधिक जटिल करने के लिए नहीं है; शेष सीएसएस द्वारा संभाला जाएगा।

+1

बहुत यकीन है कि यह कई बार पहले पूछा गया है। – MitMaro

+0

डुप: http://stackoverflow.com/questions/731743/php-vs-template-engine http://stackoverflow.com/questions/436014/why-should-i-use-templating-system-in-php http://stackoverflow.com/questions/62605/php-as-a-template-language-or-some-other-php-templating-script – MitMaro

उत्तर

13

PHP के लिए खाका भाषाओं एक विरोधी पैटर्न बुलाया का एक उदाहरण है "Inner-Platform Effect।" स्मार्टी PHP के लिए टेम्पलेट फ्रेमवर्क का एक उदाहरण है, लेकिन स्मार्टी पर एक पुस्तक के लेखक हसीन हेडर कहते हैं कि Smarty is dead और अब इसका उपयोग करने की आवश्यकता नहीं है।

टेम्पलेट भाषा विकसित करने के अच्छे कारण हो सकते हैं, उदाहरण के लिए यदि आपके पास सीएमएस का उपयोग करके गैर-कोडर डिज़ाइनर या सामग्री संपादक हैं और आप उन्हें PHP की जटिलता से अभिभूत नहीं करना चाहते हैं (या उन्हें अनुमति दें कोड लिखें जो आपकी वेबसाइट को तोड़ सकता है)।

लेकिन आपने इसे एक लक्ष्य के रूप में वर्णित नहीं किया है, इसलिए मैं PHP का उपयोग करना मानूंगा क्योंकि इस पृष्ठ में आपकी पृष्ठ टेम्पलेट भाषा सबसे अच्छी है। यह कम काम होगा क्योंकि आपको अपनी नई भाषा विकसित करने की ज़रूरत नहीं है, और यह असामान्य मामलों के लिए अधिक लचीलापन प्रदान करेगा जहां आपको एक विशिष्ट प्रकार की गतिशील सामग्री की आवश्यकता होगी।

HTML आउटपुट के ब्लॉक को समाहित करने के लिए PHP फ़ंक्शंस न लिखें। इसके बजाय, HTML के टुकड़ों को खींचने के लिए include() का उपयोग करें। इस तकनीक को कभी-कभी "आंशिक" कहा जाता है।

आप अपने PHP टेम्पलेट कोड को अपने शेष एप्लिकेशन कोड से अलग करने के बारे में अनुशासन रखने में सहायता के लिए सिम्फनी, कोहाना, सौर, कोडइग्निटर या ज़ेंड फ्रेमवर्क जैसे एमवीसी फ्रेमवर्क का भी उपयोग कर सकते हैं।

+0

मैं इसे कोडनिर्देशक पर बना रहा हूं। साथ ही, क्या होगा यदि HTML में कुछ हिस्सों को PHP में निर्दिष्ट करने की आवश्यकता है? एक सूची आउटपुट करने के लिए (जैसे कि मेरे उदाहरण में) मैंने सोचा कि उपयोग करना अनावश्यक होगा। "कुछ-विशिष्ट-नेविगेशन.html" लिखने की आवश्यकता नहीं है और इसे शामिल करें, है ना? पृष्ठों के लिए, वे फ्लाई पर उत्पन्न नहीं होंगे। –

+1

मेरा मुद्दा यह है कि मैं सभी HTML को टेम्पलेट फ़ाइलों में रखता हूं, जबकि मैं PHP फ़ंक्शन लिखता हूं (उदाहरण के लिए 'नेविगेशन()' उदाहरण का उल्लेख) केवल टेम्पलेट को डेटा प्रदान करने के लिए। टेम्पलेट में भी HTML टैग को कभी भी गूंज न करें। जब आप शाब्दिक HTML टैग चाहते हैं तो '' ब्लॉक से बाहर निकलें। –

+0

मैंने सोचा था कि '' लिखने के लिए '' –

2

आप Smarty- http://smarty.php.net में देखना चाहते हैं Smarty एक बहुत ही शक्तिशाली टेम्पलेट इंजन है जो आपको दोनों दुनिया के सर्वश्रेष्ठ प्रदान करता है। कस्टम मॉड्यूल और प्लगइन्स के लिए इसका व्यापक समर्थन है।

मैं चतुर और PHP के साथ एक कस्टम सीएमएस बनाया गया है और कुछ भी नहीं लेकिन अच्छी बातें इसके बारे में कहना है।

php कोड चतुर इस

<?php 
// my cms 

$smarty = new Smarty(); 
. 
. 
$smarty->display('home.tpl'); 

?> 

टेम्पलेट कोड की तरह दिखता है उपयोग करने के लिए इस

<h1>{$pagetitle}</h1> 

{insert tag="navigation"} 
+0

मैं Smarty पर Dwoo [dwoo.org] की अनुशंसा करता हूं। ब्लॉएट के बिना Smarty की अधिकांश विशेषताएं हैं। – MitMaro

+0

+1 मैंने कई परियोजनाओं के लिए स्मार्टी का उपयोग किया है, हालांकि यह थोड़ी देर पहले था, इसलिए वहां अन्य इंजन भी हो सकते हैं ताकि जांच भी हो सके (डुवो, जैसा कि मिटमारो ने उल्लेख किया है)। मेरे अनुभव में, टेम्पलेट भाषाओं के साथ ओवरराइडिंग चिंता, व्यवसाय तर्क को उनके अंदर घुसने से रोकना है। इसका आमतौर पर यह सुनिश्चित करने के लिए थोड़ा अतिरिक्त काम होता है कि केवल वह जानकारी जिसे आप प्रदर्शित करना चाहते हैं, टेम्पलेट को प्रदान किया जाता है, केवल टेम्पलेट कोड पर स्वरूपण और प्रदर्शन संरचना को छोड़कर। – yukondude

7

मैं एक लंबे समय के लिए एक बहुत खुश चतुर उपयोगकर्ता था की तरह कुछ है, मुझे नहीं पता अब विशेष टेम्पलेट भाषाओं में विश्वास करें।

एक टेम्पलेट भाषा अपनी प्रस्तुति कोड में अनुचित तर्क डालने से रोक नहीं होगा, यह सिर्फ टेम्पलेट भाषा में बुरा कोड लिखने के लिए आपको मजबूर कर देंगे।

यह काफी अपने खुद के छोटे से टेम्पलेट प्रणाली टेम्पलेट्स में php का उपयोग करता है रोल करने तुच्छ है। फिर अपने टेम्पलेट कोड को साफ रखने के लिए विभिन्न सहायक बनाएं (जैसे आपका "नेविगेशन()" फ़ंक्शन)।

मुझे लगता है कि Zend_View द्वारा लिया गया दृष्टिकोण बहुत अच्छा है। सिम्फनी की व्यू-लेयर स्टफ भी काफी साफ है, लेकिन थोड़ा डरावना हो सकता है। इससे कुछ पाने के लिए आपको ढांचे का उपयोग करने की ज़रूरत नहीं है। उदाहरणों में बस कुछ टेम्पलेट कोड देखें, और देखें कि आपको क्या प्रेरित करता है।

निष्कर्ष: किसी टेम्पलेट्स के लिए एक विशेष भाषा के बारे में भूल - बस आपके विचार कोड के लिए अच्छा डिजाइन भावना लागू होते हैं, दृश्य स्क्रिप्ट से बाहर है और पुन: प्रयोज्य सहायकों में जटिलता बाँटे।

7

पहिया को पुनर्निर्मित करना सबसे बुरा समय है।

PHP पहले से ही एक templating भाषा है। आपको अपना खुद का कार्यान्वयन करने की आवश्यकता नहीं है।

स्मार्ट के लिए यह php के लिए सबसे पूर्ण टेम्पलेटिंग सिस्टम है और यह अभी भी एक बुरा विचार है।

विषय पर लेख की एक जोड़ी:

  • Once upon a time there was Smarty! Hasin Hayder द्वारा। उन्होंने वास्तव में smarty पर एक पुस्तक लिखी और वह इसकी सिफारिश नहीं करता है।

  • Php and Templates हैरी Fuecks (php संकलन के 1 संस्करण के लेखक)

आप नज़र में बेहतर किया टेम्पलेट्स को देखने के लिए चाहते हैं के द्वारा:

  • phpSavant इसे इस्तेमाल करता है PHP कोड और अभी भी चिंताओं को अलग करने को बढ़ावा देता है।

अंतिम उद्देश्य व्यापार तर्क और प्रस्तुति की जुदाई बढ़ावा देने के द्वारा बनाए रखने के लिए आसान कोड के लिए निश्चित रूप से है

1

मुझे आश्चर्य है कि क्यों कोई उल्लेख एक टेम्पलेट भाषा का सबसे महत्वपूर्ण का उपयोग करता है में से एक है क्या: स्वचालित उत्पादन से बचने।

यह एक htmlspecialchars() यहां या वहां मत भूलना आसान है इसलिए कोई टेम्पलेट भाषा कि {$ name} की तरह निर्देशों प्रदान करता है यकीन है कि $ नाम स्वचालित रूप से htmlspecialchars के माध्यम से पारित कर दिया, उचित चारसेट और सब कुछ के साथ है बनाने के लिए है।

बेशक, यह भी दर्शाता है कि आप परिवर्तनीय आउटपुट के लिए एक अलग "संदर्भ" निर्दिष्ट कर सकते हैं, जैसे उदा। चेतावनी ('हाय {$ नाम | संदर्भ = एकलक्वॉट}!'); जहां टेम्पलेट दुभाषिया $ नाम की सामग्री से बच जाएगा ताकि एक्सएमएल से बचने के बजाय सिंगल कोट्स को तोड़ना असंभव हो (जो डिफ़ॉल्ट होना चाहिए)।

इस तरह के संदर्भों भी पूर्णांक (एक नंबर के लिए मजबूर करने) की तरह सामान शामिल कर सकते हैं, और यह भी उत्पादन, एट आदि

मेरे 2 सेंट फ़ॉर्मेट करने के लिए अतिरिक्त पैरामीटर स्वीकार करने के लिए बढ़ाया जा सकता है। सुनिश्चित नहीं है कि कोई ओपन सोर्स समाधान है जो इसके लिए अनुमति देता है (इसके बारे में सुनने में दिलचस्पी होगी!), मैंने काम पर इस सामान के लिए अपना खुद का दुभाषिया लुढ़काया। चूंकि परिणामी "इंटरमीडिएट कोड" शुद्ध PHP है, इसलिए यह "कैश्ड" भी आसानी से हो सकता है (जैसे स्मार्ट और अन्य टीपीएल सिस्टम करते हैं)।

+0

यह एक अच्छा मुद्दा है जिसे मैंने पहले नहीं माना था। लेकिन यह टेम्पलेट टैग के बजाय PHP कार्यों के साथ आसानी से नहीं किया जा सका? –

+0

हां, लेकिन मुद्दा यह है कि HTMLspecialchars() को कॉल करना या