codeigniterで共通のヘッダーフッターの読み出しはCI_LoaderをextendsしたMY_Loaderで実装する
公開日:
:
CodeIgniter, PHP
codeigniterで共通のヘッダー、フッターを読み込むときは、CI_LoaderクラスをextendsしたMY_Loaderクラスで行うのがよいと思いました。
まずはhookでやってみた
codeigniterではhookというコントローラの直前や直後など実行したいタイミングを選べる機能が用意されています。
具体的に、application/config/hooks.php でコントローラがインスタンス化された直後でヘッダーを読み込み、コントローラが完全に実行された直後でフッターを読み込むように対応してみました。
$hook['post_controller_constructor'][] = array( 'class' => 'HeaderFooterSet', 'function' => 'beforeFilter', 'filename' => 'headerfooterset.php', 'filepath' => 'hooks' ); $hook['post_controller'][] = array( 'class' => 'HeaderFooterSet', 'function' => 'afterFilter', 'filename' => 'headerfooterset.php', 'filepath' => 'hooks' );
クラスファイル application/hooks/headerfooterset.php に以下のように実装してみます。
class HeaderFooterSet { function __construct() { $this->ci =& get_instance(); } public function beforeFilter() { // 共通ヘッダー $ci =& get_instance(); $ci->load->view('header'); } public function afterFilter() { // 共通フッター $ci =& get_instance(); $this->ci->output->set_header('Content-Type: text/html; charset=utf-8'); $ci->load->view('footer'); } }
application/views/header.php が共通のヘッダーのviewですが、、コントローラがインスタンス化された直後で実行するため、コントローラ内で実行された値をapplication/views/header.php で呼び出すことができないため不都合になるケースがあります。
hookはやめてMY_Loaderでやってみた
view関数を読み込む直前でheader、直後でfooterを読み込めるようにしたい。具体的には下記Welcomeクラスのview関数でwelcome_viewを読み込んでいますが、この直前、直後でheader、footerが呼び出せればコントローラ内で実行された値を呼び出せます。以下の例ですとview_typeをheader内で表示させることが可能になります。
class Welcome { public function index() { $data = array(); $data["view_type"] = "welcome_view"; $this->load->view('welcome_view', $data); } }
CI_LoaderをextendsしたMY_Loaderクラスを作成して、以下のように実装することでコントローラ内で実行された値をheaderやfooterで読み出せることができました。
class MY_Loader extends CI_Loader { function __construct(){ parent::__construct(); $this->header_path = APPPATH . "views/header.php"; $this->footer_path = APPPATH . "views/footer.php"; } public function set_header($view) { $this->header_path = APPPATH . "views/".$view.".php"; } public function set_footer($view) { $this->footer_path = APPPATH . "views/".$view.".php"; } public function view($view, $vars = array(), $return = FALSE) { $ci =& get_instance(); $class = $ci->router->fetch_class(); // Get class $action = $ci->router->fetch_method(); // Get action $header = $this->_ci_load(array('_ci_path' => $this->header_path, '_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return)); $body = $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return)); $footer = $this->_ci_load(array('_ci_path' => $this->footer_path, '_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return)); if($return) { return $body; } } }
お問い合わせはこちら!
関連記事
-
-
複数のXAMPPインストール
Windows環境でPHP開発をする際にXAMPPをインストールすることになります。ただし、複数の開
-
-
PHPカンファレンス2015参加後記(PHP7は何が変わったか?)
PHPカンファレンス2015に行ってきましたので、後記を作成してみました。発表内容についての説明より
-
-
Windows10にLaravel開発環境を構築
本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構築した時のメモです。 構
-
-
Laravel 5.1の自動ログインのお試し!
セッションの保持時間を1分にする 単位:分 デフォルト:120分 config
-
-
自動改札機のようにfuelphpでormのModelを自動作成する方法
自動改札機をみたときに、fuelphpのORMのモデルを自動化させたい!
-
-
Laravel 5.X Queryログ出力例
Laravel 5.1でQueryログを出力する際のメモです。 <?ph
-
-
Laravel 5.1でLaravel Mixを使ってみた
本投稿の目的は、Laravel 5.1でLaravel Mixを利用してSassをCSSへコンパイル
-
-
phpでexif_read_dataを使ってexif情報から撮影日を取得する
写真には画像データ以外に撮影日が取得できます!それがexifデータで、phpではexif_r
-
-
PHP初心者は特に必見!CodeIgniter勉強するなら参考になるサイトまとめ
今でもメインで使っているし、使っていて気持ちのよいPHPフレームワークはCodeIgnite
-
-
第104回 PHP勉強会に参加しました!
昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。 本当は発表を聞きに行くつも