amazonバナー

2012年7月27日金曜日

[CodeIgniter]hookでviewの向きを動的に変更する場合の注意点

CodeIgniter(2.0.3)にて View の向きを動的に変更する場合、
hook を活用します。

http://hampom.wordpress.com/2010/03/05/codeigniter-%E3%81%A7%E8%B6%85%E7%B0%A1%E6%98%93%E7%9A%84%E3%81%AA%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%83%9A%E3%83%BC%E3%82%B8%E5%87%BA%E5%8A%9B%E3%82%92%E3%81%99%E3%82%8B/

こちらのサイトにて hook を活用した方法が記載されています(感謝!)
ただ、Version が古いものなのか、2.0.3 ではそのままでは動きません。

具体的には、_ci_view_path の部分が 2.0.3 では
_ci_view_paths になっていて、しかも配列になっています。
加えて、protected のメンバ変数なので直接いじることができません。

というわけなので、core の Loader を拡張してメンバ変数をいじれる
プロパティを追加します。

Application/core/MY_Loader.php を追加します。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Loader extends CI_Loader {
    function __construct(){
        parent::__construct();
    }
    /**      * viewのパス上書き      * @param string $path 追加するパス      */     function view_path_override($path){         $this->_ci_view_paths = array(APPPATH.'views/'.$path    => TRUE);     } } ?>


こんな感じで作成したら、例の hook のプログラムの部分で
function view_set() {
    if ($this->ci->agent->is_mobile()) {
        $this->ci->load->view_path_override('mobile/');
    }
}

こうすると、携帯のアクセス時には views/mobile/配下の View を
参照するようになります。

0 件のコメント:

コメントを投稿