2011-06-03 16 views
8

मैं 2 अन्य डेवलपर्स वाली वेबसाइट पर काम कर रहा हूं। मैं विचार बनाने के लिए केवल जिम्मेदार हूं।PHP में दृश्य बनाना - सर्वोत्तम अभ्यास

डेटा किसी ऑब्जेक्ट में उपलब्ध है, और मेरे पास डेटा पढ़ने के लिए गेटर्स हैं और फिर एक्सएचटीएमएल पेज बनाते हैं।

किसी भी टेम्पलेट इंजन का उपयोग किए बिना ऐसा करने का सबसे अच्छा अभ्यास क्या है?

बहुत बहुत धन्यवाद।

+0

आप किसी भी टेम्पलेट भाषा का उपयोग क्यों नहीं करना चाहते हैं? – confiq

+6

PHP को एक templating भाषा के रूप में उपयोग किया जा सकता है, इसके लिए आपको छोटे टैग चालू करने की आवश्यकता हो सकती है (जरूरी नहीं, लेकिन यह तब कम लेखन है)। – kapa

+0

@baz: ज़रूर। आप असेंबलर में भी महान वेबसाइटें लिख सकते हैं। – NikiC

उत्तर

11

यदि आप एक टेम्पलेटिंग इंजन का उपयोग नहीं करना चाहते हैं, तो आप PHP की मूल टेम्पलेटिंग क्षमताओं का उपयोग कर सकते हैं।

दरअसल, आपको केवल HTML लिखना चाहिए, और जब भी आपको एक चर के मूल्य को आउटपुट करने की आवश्यकता होती है, तो <?php के साथ एक PHP भाग खोलें और इसे ?> से बंद करें। मैं उन उदाहरणों के लिए मानूंगा जो $data आपकी डेटा ऑब्जेक्ट है।

उदाहरण के लिए:

<div id="fos"><?php echo $data->getWhatever(); ?></div> 

कृपया ध्यान दें कि, सभी पीएचपी नियंत्रण संरचनाओं (जैसे if, foreach, while, आदि) भी एक वाक्य रचना कि templating के लिए इस्तेमाल किया जा सकता है। आप इन्हें अपने PHP मैन्युअल पृष्ठों में देख सकते हैं।

उदाहरण के लिए:

<div id="fos2"> 
<?php if ($data->getAnother() > 0) : ?> 
    <span>X</span> 
<?php else : ?> 
    <span>Y</span> 
<?php endif; ?> 
</div> 

आप जानते हैं कि कम टैग उपयोग सर्वर पर सक्षम कर दिया जाएगा, सादगी के लिए आप उन्हें रूप में अच्छी तरह उपयोग कर सकते हैं (नहीं की सलाह दी एक्सएमएल और XHTML में) है। छोटे टैग के साथ, आप बस अपना PHP भाग <? के साथ खोल सकते हैं और ?> के साथ बंद कर सकते हैं। इसके अलावा, <?=$var?> कुछ गूंजने के लिए एक शॉर्टेंड है।

छोटे टैग के साथ पहला उदाहरण:

<div id="fos"><?=$data->getWhatever()?></div> 

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

<?php 
    echo '<img src="x.jpg" alt="" />'; 
    echo '<img src="y.jpg" alt="" />'; 
?> 

बराबर नहीं है:

इस कोड को लेखन

<img src="x.jpg" alt="" /> 
<img src="y.jpg" alt="" /> 

क्योंकि दूसरा एक में आप एक वास्तविक \nimg तत्वों के बीच है, जिसे ब्राउज़र द्वारा स्पेस कैरेक्टर के रूप में अनुवादित किया जाएगा और यदि वे इनलाइन हैं तो छवियों के बीच एक वास्तविक स्थान के रूप में प्रदर्शित किया जाएगा।

+0

यह मेरी राय में किया जाना चाहिए। असल में, टेम्पलेट सिस्टम का उपयोग ईमानदार होने के लिए पुराना है। टेम्पलेट सिस्टम का पतन यह है कि , हाँ, आपने इसे लिखा है, और आप जानते हैं कि इसे कैसे काम करना है, लेकिन जब आप एक नया डेवलपर किराए पर लेते हैं तो क्या होता है? अब उसे अपना कोड पढ़ना है और अपना टेम्पलेट सिस्टम सीखना है। –

+0

@ डैल्टन स्मार्टी जैसे व्यापक टेम्पलेट सिस्टम हैं। – kapa

+0

एक्सएचटीएमएल में छोटे टैग्स की सलाह क्यों नहीं दी जाती है? – binaryLV

0

डेटा को पढ़ने के लिए एक अलग फाइल का उपयोग करें:

<?php 
if ($foo == False) 
    { 
    $bar = 1; 
    } 
else 
    { 
    $bar = 0; 
    } 
?> 

फिर HTML फ़ाइल में जिसके परिणामस्वरूप राज्य संदर्भ:

require 'logic.php'; 

<html> 
    <!--...--> 
    <input type="text" value="<?php echo $bar; ?>" > //Logic is separated from markup 
    <!--...--> 
</html> 
0

मुझे नहीं पता मैं वास्तव में अपने प्रश्न मिलता है।यदि ऐसा है तो मेरा उत्तर नहीं exaclty मैं नष्ट कर दिया डे के लिए

इस वर्ग साधारण दृश्य पैदा करेगा पसंद करेंगे

class View 
{ 

public function render($filename, $render_without_header_and_footer = false) 
{ 
    // page without header and footer, for whatever reason 
    if ($render_without_header_and_footer == true) { 
     require VIEWS_PATH . $filename . '.php'; 
    } else { 
     require VIEWS_PATH . '_templates/header.php'; 
     require VIEWS_PATH . $filename . '.php'; 
     require VIEWS_PATH . '_templates/footer.php'; 
    } 
} 


private function checkForActiveController($filename, $navigation_controller) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 

    if ($active_controller == $navigation_controller) { 
     return true; 
    } 
    // default return 
    return false; 
} 

private function checkForActiveAction($filename, $navigation_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_action = $split_filename[1]; 

    if ($active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 

private function checkForActiveControllerAndAction($filename, $navigation_controller_and_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 
    $active_action = $split_filename[1]; 

    $split_filename = explode("/", $navigation_controller_and_action); 
    $navigation_controller = $split_filename[0]; 
    $navigation_action = $split_filename[1]; 

    if ($active_controller == $navigation_controller AND $active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 
} 

सू अब आप अपने टेम्पलेट बना सकते हैं और सिर्फ

$this->view->my_data = "data"; 
$this->view->render('index/index'); 
// 
की तरह किसी भी जहां से यह कॉल कर सकते हैं

और आपकी अनुक्रमणिका/index.php पर आप डेटा $-> my_data पर कॉल कर सकते हैं;