1

私は Codeigniter の設定をマニュアルから直接追ってきました - そして、コントローラーをコーディングするためのより簡単で効率的な方法があるかどうか疑問に思いました...

例えば。

class Home extends CI_Controller {

        public function index()
        {
            $this->load->helper('segment1');
            $this->load->model('segment1/Leftsidebar_model');
            $data['articles'] = $this->Leftsidebar_model->articles();
            $this->load->model('segment1/Default_model');
            $data['head'] = $this->Default_model->segment1();
            $data['segment1'] = $this->Default_model->segment1();
            $data['segment2'] = $this->Default_model->segment2();
            $this->load->model('Rightsidebar_model');
            $data['coming_up'] = $this->Rightsidebar_model->coming_up();
            $data['featured_pages'] = $this->Rightsidebar_model->featured_pages();
            $data['recommended_link'] = $this->Rightsidebar_model->recommended_link();
            $data['testimonials'] = $this->Rightsidebar_model->testimonials();
            $this->load->view('head_view', $data);
            $this->load->view('header_view', $data);
            $this->load->view('segment1/__leftSidebar_view', $data);
            $this->load->view('segment1/__mainContent/default_view', $data);
            $this->load->view('segment1/__mainContent/segment2_view', $data);
            $this->load->view('__rightSidebar_view', $data);
            $this->load->view('footer_view', $data);
        }
    }
4

3 に答える 3

0

同様のページ ブロックをレンダリングするためのライブラリを少し追加するだけです。このようなもの:

    class Display_Lib{
       private $_CI;
       private $_template_data;

       public function __construct()
       {
           $this->_CI =& get_instance();
       }

       public function set($key, $value)
       {
           $this->_template_data[$key] = $value;
       }

       public function get($key)
       {
           return $this->_template_data[$key];
       }

       public function get_template_data()
       {
           return $this->_template_data;
       }

       public function display_page($view, $data = array())
       {
           $this->set('content', $this->_CI->load->view($view, $data, TRUE));
           $this->_CI->load->view('templates/main_template', $this->get_template_data());
       }
}

このライブラリを自動ロードに設定します。

$autoload['libraries'] = array('session', 'database', 'display_lib');

そしてコントローラーで呼び出します:

class Main extends CI_Controller{
    public function index()
    {
        $some_data = array();
        $this->display_lib->display_page('views/main_view', $some_data);
    }
}
于 2013-07-04T20:58:20.410 に答える
0

ヘルパーとモデルは自動ロードできます。これは confiq ファイルで指定できます。これにより、手動でロードする必要がなくなります。

残りは:

CI_Controller をサブクラス化できます。例: 私のコントローラーは CI コントローラーを拡張し、これには 2 つのメソッドが含まれます。

1) ページのヘッダーとヘッダーをロードする 2) ページの下部をロードする

次に、コントローラーを My_Controller からサブクラス化し、それらのメソッドを呼び出すことができます

load_page_top();
//insert whatever you have to load
load_page_bottom();

それ以外はあなた次第です

例えば:

class Home extends MY_Controller
{
    index()
    {
        $data = get_data();
        load_page_top();
        //insert your views here specific to the controller
        load_page_bottom();
    }

    get_data()
    {
        //gather all your needed data here and return it as an array
        return data;
    }
}
于 2013-07-04T10:32:21.107 に答える