*

codeigniterで共通のヘッダーフッターの読み出しはCI_LoaderをextendsしたMY_Loaderで実装する

公開日: : CodeIgniter, PHP

small__9257451603

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をインストールすることになります。ただし、複数の開

記事を読む

codeigniterでselect文にunionを使いたい

select文でunionを使いたいが、調べてみてると普通にできなさそうなので、librar

記事を読む

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用してSassをCSSへコンパイル

記事を読む

Laravelのパッケージ開発

 パッケージ作成 Laraavelのパッケージを作成し、作成したパッケージを他のプロジェクトで利用

記事を読む

codeigniterでIE8において別Windowで開くとセッションが切れてログアウトしてしまう

codeigniterで作成したWebサービスをアクセスしているときに、別Windowで開く

記事を読む

codeigniterで複数データベース切替方法について

codeigniterでデータベース切替を行うためにはどうしたらよいかを試行錯誤してみました

記事を読む

phpでexif_read_dataを使ってexif情報から撮影日を取得する

写真には画像データ以外に撮影日が取得できます!それがexifデータで、phpではexif_r

記事を読む

PHPカンファレンス2015参加後記(PHP7は何が変わったか?)

PHPカンファレンス2015に行ってきましたので、後記を作成してみました。発表内容についての説明より

記事を読む

PHP初心者は特に必見!CodeIgniter勉強するなら参考になるサイトまとめ

今でもメインで使っているし、使っていて気持ちのよいPHPフレームワークはCodeIgnite

記事を読む

Laravel 5.1 プロジェクト作成(インストール)

本記事ではLaravel 5.1 LTSを利用して開発するためにLaravelをインストールする手順

記事を読む

お問い合わせはこちら!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お問い合わせはこちら!

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用し

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト

SourceTreeで差分ファイルを抽出

GitのクライアントでSourceTreeを利用する時、コミットの差分

第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。

Windows10にLaravel開発環境を構築

本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構

→もっと見る

  • AWS構築 - クラウドアドバイザー
PAGE TOP ↑