2012/05/24

共通ヘッダー フッター(HTML)


要するに、CakePHPで言う、layoutみたいなことがやりたいわけだ
サイトのページで共通する ヘッダー部分とか フッター部分は どこか1箇所に書きたい
本家のやり方は、結局Controllerに毎回 header footerを書かなきゃならないから、だめじゃん?
ビュー : CodeIgniter ユーザガイド 日本語版http://codeigniter.jp/user_guide_ja/general/views.html
→複数のビューの読み込み
・hookを使ってみる
CIにはviewクラス的なものがないから、cakeコントローラのCallbackメソッド(beforeFilterとかafterFilterとか)的なものを探したら、hookがそれにあたる(?)ぽいので、やってみる
※app/は 自前アプリケーションフォルダ index.phpで指定する$application_folder
・共通ヘッダー&フッターを作成(View)
app/views/parts_hook
      ┠ header.php
      ┗ footer.php
※それぞれ HTMLのヘッダー部分とフッター部分
・自前hookクラスを用意
app/hooks/ControllerCallback.php
/**
* ControllerCallback Class
*/
class ControllerCallback {
  /**
   * beforeFilter - post_controller_constructor
   */
  public function beforeFilter()
  {
    // 共通ヘッダー
    $ci =& get_instance();
    $ci->load->view('parts_hook/header');
  }
  /**
   * afterFilter - post_controller
   */
  public function afterFilter()
  {
    // 共通フッター
    $ci =& get_instance();
    $ci->load->view('parts_hook/footer');
  }
}
・hook設定
app/config/hooks.php
/*
| --------------------------------------
| Hooks
| --------------------------------------
| This file lets you define "hooks" …略
$hook['post_controller_constructor'] = array(
                'class'  => 'ControllerCallback',
                'function' => 'beforeFilter',
                'filename' => 'ControllerCallback.php',
                'filepath' => 'hooks'
                );

$hook['post_controller'] = array(
                'class'  => 'ControllerCallback',
                'function' => 'afterFilter',
                'filename' => 'ControllerCallback.php',
                'filepath' => 'hooks'
                );
※最初、beforeFilter()をpre_controllerで呼んだら、コントローラインスタンス化される前だから駄目だった(汗
※'params'は使ってない
参考)
フック : CodeIgniter ユーザガイド 日本語版http://codeigniter.jp/user_guide_ja/general/hooks.html

これで、共通ヘッダーとフッターは表示された
うーんでも、これだと、ヘッダーの中の<title>とかを動的に設定したい(各コントローラーで指定したい)ときに、だめだなあ…
ということで、続く





0 件のコメント: