2008-10-07 17 views
15

शीर्षलेख, और पाद लेख बनाने का सबसे अच्छा तरीका क्या है? क्या आपको इसे नियंत्रक से कॉल करना चाहिए, या दृश्य फ़ाइल से शामिल करना चाहिए? मैं CodeIgniter का उपयोग कर रहा हूं, और मैं जानना चाहता हूं कि इसके लिए सबसे अच्छा अभ्यास क्या है। नियंत्रक से सभी शामिल दृश्य फ़ाइलों को लोड कर रहा है, इस तरह?सर्वोत्तम व्यवहार: शीर्षलेख और पाद लेखों का निर्माण करने का सबसे अच्छा तरीका क्या है?

class Page extends Controller { 

    function index() 
    { 
     $data['page_title'] = 'Your title'; 
     $this->load->view('header'); 
     $this->load->view('menu'); 
     $this->load->view('content', $data); 
     $this->load->view('footer'); 
    } 

} 

या एकल दृश्य फ़ाइल बुला, और वहाँ से शीर्ष लेख और पाद विचारों बुला:

//controller file  
class Page extends Controller { 

    function index() 
    { 
     $data['page_title'] = 'Your title'; 
     $this->load->view('content', $data); 

    } 

} 

//view file 

<?php $this->load->view('header'); ?> 

<p>The data from the controller</p> 

<?php $this->load->view('footer'); ?> 

मैं इसे दोनों तरीकों से किया है, लेकिन अब चयन करना चाहते हैं इससे पहले कि मैं बहुत दूर जाना देखा है एक रास्ता नीचे।

+0

के बाद से अपने प्रश्न CodeIgniter के बारे में था - मैं तो बस करने के लिए आप अग्रेषित करना चाहते कैसे Zend फ्रेमवर्क इस संभालता है: http://framework.zend.com/manual/en/zend.layout.html – leek

उत्तर

9

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

अपने नियंत्रक में:

$data['content'] = 'your_controller/index'; 

// more code... 

$this->load->vars($data); 
$this->load->view('layouts/default'); 

तो जैसे सभी पृष्ठों के लिए डिफ़ॉल्ट लेआउट को परिभाषित विचार/लेआउट/default.php

// doctype, header html etc. 

<div id="content"> 
    <?= $this->load->view($content) ?> 
</div> 

// footer html etc. 

फिर आपके विचारों में केवल शुद्ध सामग्री हो सकती है उदा। विचारों/your_controller/index.php बस चर नियंत्रक/डेटा सरणी

<?= $archives_table ?> 
<?= $pagination ?> 
// etc. 

More details on the CI wiki/FAQ से पारित हो सकता है - (? मैं विचारों के भीतर विचारों प्र कैसे एम्बेड करूं नेस्टेड टेम्पलेट्स ...)

+0

इस दृष्टिकोण के बारे में मेरा पसंदीदा बात यह है कि मैं अंत टैग लापता और शीर्ष लेख और पाद टुकड़े में शुरू टैग लापता के बारे में मेरे आईडीई में उन सभी त्रुटियों से छुटकारा पा सकते है। अच्छा! –

3

अन्य विचारों के अंदर विचारों को कॉल करना बुरा व्यवहार है। यह नियंत्रक दृश्य मिश्रण का एक रूप हो सकता है। सीआई में व्यू फ़ंक्शन आपको तीसरे पैरामीटर को पार करने की अनुमति देता है जो इसे स्ट्रिंग के रूप में उस दृश्य आउटपुट को वापस करने का कारण बनता है। आप एक यौगिक दृश्य बनाने के लिए इसका उपयोग कर सकते हैं।

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

class Page extends Controller { 
    function index() { 
     $data['page_title'] = 'Your title'; 

     $this->load->view('default_layout', array(
     'header' => $this->load->view('header' , array(), true), 
     'menu' => $this->load->view('menu' , array(), true), 
     'content' => $this->load->view('content', $data , true), 
     'footer' => $this->load->view('footer' , array(), true), 
    )); 
    } 
} 

default_layout.php

<? echo $header, $menu, $content, $footer; ?> 

आप इस प्रकार का टेम्पलेट बनाने के लिए अपने शीर्ष लेख और पाद गठबंधन करने के लिए कर सकते हैं।

class Page extends Controller { 
    function index() { 
     $data['page_title'] = 'Your title'; 

     $this->load->view('default_template', array(
     'menu' => $this->load->view('menu' , array(), true), 
     'content' => $this->load->view('content', $data , true), 
    )); 
    } 
} 

default_template.php

<html><head></head><body><span>Some Header HTML</span> // this is your header html 
<? echo $menu, $content; ?> 
<span>some footer HTML</span></body></html> // this is your footer html 
4

मुझे लगता है कि पहले जिस तरह से आप यह क्या कर रहे हैं क्लीनर है। बस यह जानने के एक बिंदु से कि प्रस्तुत किया जा रहा है। बाकी को खोजने के लिए दृश्य फ़ाइल दर्ज करने के बजाय।

13

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

सबसे पहले, बेस_कंट्रोलर क्लास को परिभाषित करें, जिसमें आप अपने पृष्ठ तत्वों (हेडर, पाद लेख इत्यादि) को जोड़ते हैं।) एक आउटपुट स्ट्रिंग के लिए:

class Base_controller extends Controller 
{ 
    var $_output = ''; 

    function _standard_header($data=null) 
    { 
     if (empty($data)) 
      $data = ...; // set default data for standard header here 

     $this->_output .= $this->load->view('header', $data, true); 
    } 

    function _admin_header($data=null) 
    { 
     if (empty($data)) 
      $data = ...; // set default data for expanded header here 

     $this->_output .= $this->load->view('admin_header', $data, true); 
    } 

    function _standard_page($data) 
    { 
     $this->_standard_header(); 
     $this->_output .= 
      $this->load->view('standard_content', $data, true); 
     echo $this->_output; // note: place the echo statement in a 
          // separate function for added flexibility 
    } 

    function _page_with_admin_header($data) 
    { 
     $this->_admin_header($data); 
     $this->_output .= 
      $this->load->view('standard_content', $data, true); 
     echo $this->_output; 
    } 
} 

फिर, अपने पेज नियंत्रकों में, बस आधार वर्ग को बढ़ाने और अपने कार्यों कॉल पेज बनाने के लिए।

class Page_controller extends Base_controller 
{ 
    function index() 
    { 
     $data = ...; // Set content data here 
     $this->_standard_page($data); 
    } 

    function admin() 
    { 
     $data = ...; // Set content and header data here 
     $this->_page_with_admin_header($data); 
    } 
} 

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

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

का आनंद लें!

/जेन्स रोलाण्ड