2012-05-14 15 views
18

मैं CodeIgniter पर एक बहुत नौसिखिया हूँ, और जब मैं मैं पर जाने के लिए समस्या है कि, प्रक्रियात्मक कोडिंग में, ठीक करने के लिए आसान थे में चलानेCodeIgniter: एक नियंत्रक में वैश्विक चर

वर्तमान मुद्दा है: मैं है इस नियंत्रक

class Basic extends Controller { 

    function index(){ 
     $data['title'] = 'Page Title'; 
     $data['robots'] = 'noindex,nofollow'; 
     $data['css'] = $this->config->item('css'); 
     $data['my_data'] = 'Some chunk of text'; 
     $this->load->view('basic_view', $data); 
    } 

    function form(){ 
     $data['title'] = 'Page Title'; 
     $data['robots'] = 'noindex,nofollow'; 
     $data['css'] = $this->config->item('css'); 
     $data['my_other_data'] = 'Another chunk of text'; 
     $this->load->view('form_view', $data); 
    } 
} 

आप देख सकते हैं, कुछ सरणी आइटम अधिक से अधिक दोहराने:

$data['title'] = 'Page Title'; 
$data['robots'] = 'noindex,nofollow'; 
$data['css'] = $this->config->item('css'); 

वहाँ नियंत्रक में उन्हें "वैश्विक" बनाने के लिए एक तरह से नहीं है, तो यह है कि मैं नहीं है उन्हें ईएसी के लिए टाइप करने के लिए एच समारोह? कुछ की तरह (लेकिन यह मुझे त्रुटि देता है):

पहले से
class Basic extends Controller { 

    // "global" items in the $data array 
    $data['title'] = 'Page Title'; 
    $data['robots'] = 'noindex,nofollow'; 
    $data['css'] = $this->config->item('css'); 

    function index(){ 
     $data['my_data'] = 'Some chunk of text'; 
     $this->load->view('basic_view', $data); 
    } 

    function form(){ 
     $data['my_other_data'] = 'Another chunk of text'; 
     $this->load->view('form_view', $data); 
    } 

} 

Thnaks!

उत्तर

28

आप क्या कर सकते "वर्ग चर" है कि नियंत्रक में किसी भी विधि से पहुँचा जा सकता बनाने के साथ यह करने के लिए संदर्भित कर सकते हैं। निर्माता में, आप इन मानों को सेट करते हैं।

class Basic extends Controller { 
    // "global" items 
    var $data; 

    function __construct(){ 
     parent::__construct(); // needed when adding a constructor to a controller 
     $this->data = array(
      'title' => 'Page Title', 
      'robots' => 'noindex,nofollow', 
      'css' => $this->config->item('css') 
     ); 
     // $this->data can be accessed from anywhere in the controller. 
    }  

    function index(){ 
     $data = $this->data; 
     $data['my_data'] = 'Some chunk of text'; 
     $this->load->view('basic_view', $data); 
    } 

    function form(){ 
     $data = $this->data; 
     $data['my_other_data'] = 'Another chunk of text'; 
     $this->load->view('form_view', $data); 
    } 

} 
+1

@ डेलन: उस टाइपो को ठीक करने के लिए धन्यवाद :-) –

+0

आपका स्वागत है! – Dalen

+0

धन्यवादगुइस! मैं इस बीच प्रश्न में भूल गया क्योंकि मुझे पता चला कि "$ this-> load-> vars ($ array)" मेरे उदाहरणों के लिए वास्तव में अच्छा लगा है ... वैसे भी प्रदान किया गया समाधान अभी भी अच्छा है अगर मुझे सरणी पास करना है कक्षा के तरीके – Ivan

15

आप डेटा नाम की एक क्लास प्रॉपर्टी सेट कर सकते हैं और उसके बाद इसे डिफॉल्ट वैल्यू को कन्स्ट्रक्टर में सेट कर सकते हैं जो पहली चीज है जो Basic पर एक नया उदाहरण बनाया जाता है। तो फिर तुम $this कीवर्ड

class Basic extends Controller 
{ 
    var $data = array(); 

    public function __construct() 
    { 
     parent::__construct(); 
     // load config file if not autoloaded 
     $this->data['title'] = 'Page Title'; 
     $this->data['robots'] = 'noindex,nofollow'; 
     $this->data['css'] = $this->config->item('css'); 
    } 

    function index() 
    { 
     $this->data['my_data'] = 'Some chunk of text'; 
     $this->load->view('basic_view', $this->data); 
    } 

    function form() 
    { 
     $this->data['my_data'] = 'Another chunk of text'; 
     $this->load->view('form_view', $this->data); 
    } 
} 
+1

आपको काम करने के लिए निर्माता के लिए 'पैरेंट :: __ निर्माण();' जोड़ने की आवश्यकता है। –

+2

दाएं, और शायद कॉन्फ़िगरेशन फ़ाइल भी लोड करें यदि पहले से ही – Dalen

+0

हाँ स्वत: लोड नहीं किया गया है! निर्माण समस्या को हल करेगा। – rechie

3

हे धन्यवाद यहाँ मेरी snipet यह एक वैश्विक चर एक दृश्य

/* Location: ./application/core/MY_Controller */ 

class MY_Controller extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
     $this->data = array(
      'sidebar' => $this->load->view('sidebar', '' , TRUE), 
     ); 
    } 

} 

/* Location: ./application/controllers/start.php */ 
class Start extends MY_Controller { 

    function __construct() 
    {  
     parent::__construct(); 
    } 

    public function index() 
    { 
     $data = $this->data; 

     $this->load->view('header'); 
     $this->load->view('start', $data); 
     $this->load->view('footer'); 
    } 
} 
+0

धन्यवाद यह मेरे लिए काम कर रहा है –

0

एक सहायक पकड़े क्यों नहीं उपयोगकर्ता है?

फ़ाइल:

/application/helpers/meta_helper.php 

सामग्री:

<?php 
function meta_data() { 
return array("title" => null, "robots" => "noindex, nofollow"); 
} 

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

class Basic extends Controller { 

    function __construct(){ 
     parent::__construct(); 
     $this->load->helper('meta'); 
    }  

    function index(){ 
     $data['meta'] = meta_data(); //associate the array on it's own key; 

     //if you want to assign specific value 
     $data['meta']['title'] = 'My Specific Page Title'; 

     //all other values will be assigned from the helper automatically 

     $this->load->view('basic_view', $data); 
    } 

और आपके विचार टेम्पलेट में:

<title><?php $meta['title']; ?></title> 

विल उत्पादन:

<title>My Specific Page Title</title> 

आशा है कि भावना :-) बनाता है!

0

हालांकि यह बहुत लंबा रहा। यह अन्य के लिए उपयोगी हो सकता है आप $-- load-> vars ($ डेटा) का उपयोग कर सकते हैं; कोर My_controller में सभी दृश्यों में $ डेटा सरणी उपलब्ध कराने के लिए।

/* Location: ./application/core/MY_Controller */ 

class MY_Controller extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
    $data['title'] = 'Page Title'; 
    $data['robots'] = 'noindex,nofollow'; 
    $data['css'] = $this->config->item('css'); 
    $this->load->vars($data); 
} 

} 

/* Location: ./application/controllers/start.php */ 
class Start extends MY_Controller { 

function __construct() 
{  
    parent::__construct(); 
} 

public function index() 
{ 
    $data['myvar'] = "mystring"; 

    $this->load->view('header'); 
    $this->load->view('start', $data); 
    $this->load->view('footer'); 
} 
} 
संबंधित मुद्दे