我正在使用控制器名称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);
手动调用标头并向其传递一些信息。但是,在我的情况下,整个网站的信息将始终相同。在加载标题的视图之前,有一种方法可以调用某种控制器吗?
答案 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
& page_description
设置为$row->title
& $row->summary
。< / p>