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

我喜欢这种结构,干净整洁。

class Home extends CI_Controller {

    public function index()
    {
        // Load libraries, helpers, models
        $this->load->helper('segment1');
        $this->load->model('segment1/Leftsidebar_model');
        $this->load->model('segment1/Default_model');
        $this->load->model('Rightsidebar_model');

        // Data for views
        $data = array(
            'articles' => $this->Leftsidebar_model->articles(),
            'head' => $this->Default_model->segment1(),
            'segment1' => $this->Default_model->segment1(),
            'segment2' => $this->Default_model->segment2(),

            'coming_up' => $this->Rightsidebar_model->coming_up(),
            'featured_pages' => $this->Rightsidebar_model->featured_pages(),
            'recommended_link' => $this->Rightsidebar_model->recommended_link(),
            'testimonials' => $this->Rightsidebar_model->testimonials()
        );

        // Load views
        $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);
    }
}

当然,可以通过其他方式管理视图加载,让视图加载所有公共部分。

于 2013-07-04T12:30:42.507 回答
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 回答