Как вручную загрузить контроллер с другого в CodeIgniter? - PullRequest
1 голос
/ 28 января 2012

Я работаю с именем контроллера 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 Ответ

3 голосов
/ 28 января 2012

Вы можете создать библиотеку и модель для выполнения всех ваших запросов к БД.Это также очистит бит $query = $this->db->query(), чтобы он был в вашей модели, а не в вашем контроллере.

Затем, каждый раз, когда вам нужно загрузить представление заголовка, вы можете использовать это в вашем контроллере:1004 *

$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 соответственно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...