如何在CodeIgniter中手动加载另一个控制器?

时间:2012-01-28 17:18:09

标签: php codeigniter

我正在使用控制器名称page.php。这就是我所拥有的:

class Page extends CI_Controller {

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

    public function index() {
        show_404();
    }

    public function view($id) {
        $query = $this->db->query("
            SELECT * FROM proposals
            WHERE id='$id'");

        if ($query->num_rows() == 1) {
            $row = $query->row();
            $data['proposal_id']          = $id;
            $data['proposal_title']       = $row->title;
            $data['proposal_proposer']    = $row->proposer;
            $data['proposal_summary']     = $row->summary;
            $data['proposal_description'] = $row->description;
            $data['proposal_date']        = $row->date;
            $data['proposal_vote']        = $row->vote;
            $data['proposal_source']      = $row->source;
            $query->free_result();   
        } else {
            show_404();
        }

        // Get user data
        $user_info['logged_in'] = "";
        $user_info['username']  = "";
        $user_info['user_id']   = "";
        $user_info['score']     = "";

        // Get special variables needed for the header
        $header_data['page_title']       = htmlspecialchars($data['proposal_title']);
        $header_data['page_description'] = htmlspecialchars($data['proposal_summary']);

        // Get special variables needed for the footer
        $footer_data['stats_proposals'] = "12";
        $footer_data['stats_users']     = "42";

        // Check if this is an edit


        // Load the views (interfaces) in order
        $this->load->view('templates/header', $header_data);
        $this->load->view('page',             $data);
        $this->load->view('templates/footer', $footer_data);
    }
}

如上所示,我使用$this->load->view('templates/header', $header_data);手动调用标头并向其传递一些信息。但是,在我的情况下,整个网站的信息将始终相同。在加载标题的视图之前,有一种方法可以调用某种控制器吗?

1 个答案:

答案 0 :(得分:3)

你可以创建一个库&模型来完成所有数据库查询。这也会清除$query = $this->db->query()位,以便它在您的模型而不是您的控制器中。

然后,每次需要加载标题视图时,都可以在控制器中使用它:

$header_data = $this->library_name->function_to_get_header_info($id);
$this->load->view('templates/header', $header_data);

实际的库将接受创建此标题视图所需的变量(例如,$id)。它将调用模型,该模型将执行任何实际的数据库查询(例如,$query = $this->db->query("SELECT * FROM proposals WHERE id='$id'");)。然后,库将使视图可以使用的模型返回数据(例如,分别将page_title&amp; page_description设置为$row->title&amp; $row->summary。< / p>