2010-04-01 11 views
6

मैं अपनी नई परियोजनाओं पर आसानी से विकास करना चाहता हूं, और मैं एक नंगे हड्डियों को बहुत ही सरल टेम्पलेट इंजन समाधान चाहता था। मैंने नेट पर चारों तरफ देखा और सब कुछ या तो फूला हुआ है, या मुझे क्रिंग करता है।PHP टेम्पलेट वर्ग?

मेरे HTML फ़ाइलों तो तरह होगा:

<html> 
    <head> 
     <title>{PAGE_TITLE}</title> 
    </head> 
    <body> 
     <h1>{PAGE_HEADER}</h1> 
     <p>Some random content that is likely not to be parsed with PHP.</p> 
    </body> 
</html> 

जाहिर है, मैं कुछ मैं PHP के साथ सेट के साथ {PAGE_TITLE} और {PAGE_HEADER} बदलना चाहते हैं। इस तरह:

<?php 

    $pageElements = array(
          '{PAGE_TITLE}' => 'Some random title.', 
          '{PAGE_HEADER}' => 'A page header!' 
         ); 

?> 

और मैं str_replace की तरह कुछ का उपयोग करें और एक स्ट्रिंग में प्रतिस्थापित HTML लोड होता है, तो यह पेज को प्रिंट? यही वह क्षण है जो मैं इस समय करने की दिशा में हूं ... क्या किसी के पास कोई सलाह है या कोई तरीका है कि मैं इसे बेहतर कर सकता हूं?

धन्यवाद।

+1

"बनाता है मुझे चापलूसी" मुझे आपको लगता है बस उन्हें समझ में नहीं आता है और वास्तव में प्रयास कर में कोई दिलचस्पी नहीं कर रहे हैं बनाता है। वास्तव में इस विशेष पहिया को पुनर्जीवित करने की कोई आवश्यकता नहीं है। Smarty या Twig या कुछ समान का उपयोग करें। – cletus

+1

मेरा मतलब है कि वे HTML फ़ाइलों को पार्स करते हैं और वेरिएबल्स को प्रतिस्थापित करते हैं, मुझे बस यह पसंद नहीं है। मैं जो चाहता हूं उसके लिए Smarty _way_ भी फूला हुआ है। – Joe

उत्तर

2

यदि आप वास्तव में सरल होना चाहते हैं तो PHP स्वयं ही एक टेम्पलेट का इंजन है। बस का उपयोग include()

file.phtml:

<html> 
    <head> 
     <title><?=$tpl['PAGE_TITLE']?></title> 
    </head> 
    <body> 
     <h1><?=$tpl['PAGE_HEADER']?></h1> 
     <p>Some random content that is likely not to be parsed with PHP.</p> 
    </body> 
</html> 

code.php:

tpl = Array 
(
'PAGE_HEADER' => "This is the lazy way to do it", 
'PAGE_TITLE' => "I don't care because i am doing it this way anyways" 
) 
include("file.phtml") 
+0

यह मूल रूप से मैं इसे कैसे करता हूं। चीजों को अधिक जटिल करने की कोई ज़रूरत नहीं है, है ना? –

+0

यह काम नहीं करेगा, जब तक कि file.phtml से आपका HTML एक चर के अंदर न हो और आप इसे गूंजें। बस एक एचटीएमएल फ़ाइल के बीच में घुंघराले ब्रेसिज़ डालने से यह php द्वारा पारदर्शी नहीं होगा। शायद आप मतलब Pere

+1

@ पेरे, आप बिल्कुल सही हैं। पुरानी एसओ पोस्ट को देखकर कोड की तरह दिलचस्प है। निश्चित है कि। –

6

आपके मौजूदा रणनीति काम करेंगे, और बिल्कुल स्पष्ट है। str_replace() कुशल और साफ है, और आप इसे अपनी चर सामग्री के साथ सटीक टैग मिलानों को प्रतिस्थापित करने के लिए बस इसे लूप कर सकते हैं। हालांकि, दोष यह है कि आपको अपने सभी टेम्पलेट्स को तारों में पहले लोड करना होगा, और यह बहुत अक्षम हो सकता है।

एक वैकल्पिक विधि जो बहुत समान है, क्या आप बस extract() का उपयोग कर सकते हैं। निकालें कुंजी/मूल्य जोड़े का एक सेट लेगा और स्थानीय दायरे में उनमें से चर बना देगा। यदि आप include() एक ही दायरे में एक टेम्पलेट हैं, तो आपके चर जाने के लिए तैयार होंगे।

कुछ इस तरह:

function loadTemplate($template,$vars) 
{ 
    extract($vars); 
    include($template); 
} 

आपका टेम्पलेट बस नियमित पीएचपी हो सकता है।

<html> 
    <head> 
     <title><?php echo $PAGE_TITLE ?></title> 
    </head> 
    <body> 
     <h1><?php echo $PAGE_HEADER ?></h1> 
     <p>Some random content that is likely not to be parsed with PHP.</p> 
    </body> 
</html> 

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

फिर तुम सब करने की है:

$pageElements = array(
         'PAGE_TITLE' => 'Some random title.', 
         'PAGE_HEADER' => 'A page header!' 
        ); 
loadTemplate('file.phtml',$pageElements); 
5

आप हो सकता है mustache.php में रुचि रखें।यह Mustache

त्वरित उदाहरण के एक बहुत हल्के पीएचपी वर्ग कार्यान्वयन README से लिया है: -:

Hello {{name}} 
You have just won ${{value}}! 
{{#in_ca}} 
Well, ${{taxed_value}}, after taxes. 
{{/in_ca}} 
0
function parseVars($vars, $file){ 

    $file = file_get_contents($file); 
    foreach($vars as $key => $val){ 
     str_replace("{".$key."}", $val, $file); 
    } 

    echo $file; 

} 

<?php 
    include('Mustache.php'); 
    $m = new Mustache; 
    echo $m->render('Hello {{planet}}', array('planet' => 'World!')); 
    // "Hello World!" 
?> 

और एक अधिक गहराई उदाहरण इस विहित मूंछें टेम्पलेट है

0

ब्लॉक, लूप, इसेट (लूप में भी काम करता है) और रोटेशन के लिए समर्थन के साथ इस वर्ग टेम्पलेट इंजन का उपयोग करें। तेजी से काम करता है। छोटे और मध्यम परियोजनाओं के लिए सबसे उपयुक्त।

http://www.phpclasses.org/package/1216-PHP-Template-engine-blocks-loops-ifset-rotations.html