2012-01-28 20 views
1

コントローラ名page.phpで作業しています。これは私が持っているものです。CodeIgniterの別のコントローラーから手動でコントローラーをロードする方法は?

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);を使用してヘッダーを呼び出し、それにいくつかの情報を渡しています。しかし、私の場合、この情報はサイト全体で常に同じです。ヘッダーのビューをロードする前に何らかのコントローラを呼び出す方法がありますか?

答えて

3

ライブラリ&モデルを作成して、すべてのDBクエリを完了できます。これによりコントローラの代わりにモデルに入るように、$query = $this->db->query()ビットもクリーンアップされます。

その後、あなたはヘッダビューをロードする必要があるたびに、あなたのコントローラでこれを使用することもできます

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

このヘッダビューを作成するために必要な変数を受け入れるだろう、実際のライブラリー(例えば、$id) 。実際のDBクエリを実行するモデルへの呼び出しを行います(たとえば、$query = $this->db->query("SELECT * FROM proposals WHERE id='$id'");)。次に、ライブラリによってモデルによって返されたデータがビューで使用可能になります(たとえば、page_title & page_description$row->title & $row->summary)。

関連する問題