*

codeigniterで、PC版とスマフォ版のテンプレートを自動で振分ける方法

公開日: : CodeIgniter, PHP, user_agent, 未分類

small__6757040007

 

スマフォ版とPC版のテンプレートを切り替えるために、毎回コントローラでユーザーエージェントをチェックして振り分け処理が面倒になり

$this->load->view();を指定すると内部で自動にPCフォルダ内のview、スマフォフォルダ内のviewを表示するように対応してみました。

loadクラスを拡張したクラスで振り分け処理を行う

前回、headerfooterをloadで設定する方法で行った延長で、以下のようにMY_Loader クラスを作成します。

class MY_Loader extends CI_Loader {
 
    function __construct(){
        parent::__construct();
    }
    
    // PC版、スマフォ版ともに同じviewを使いたい場合はこの関数を呼び出す
	public function done_common_view () {
		$this->done_common_view = true;
	}
 
 
    public function view($view, $vars = array(), $return = FALSE)
    {
		$ci =& get_instance();

		if($ci->agent->is_mobile()) {
			$this->header_path = APPPATH . "views/sp/header.php";
			$this->footer_path = APPPATH . "views/sp/footer.php";
		}
		else {
			$this->header_path = APPPATH . "views/pc/header.php";
			$this->footer_path = APPPATH . "views/pc/footer.php";
		}
		
        $class = $ci->router->fetch_class(); // Get class
        $action = $ci->router->fetch_method(); // Get action
 
        // 共通headerを読み込まない処理をいれる
        if(strpos($action, 'ajax') !== FALSE  || $class == "static") {
        } else{
            $header =  $this->_ci_load(array('_ci_path' => $this->header_path, '_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
        }
 
        // ボディ
		if($this->done_common_view) {
			//共通の場合はviewsフォルダ以下に置く
			$body =  $this->_ci_load(array('_ci_view' => "$view", '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
		}
		elseif($ci->agent->is_mobile()) {
			//スマフォ版の場合はviews/sp/フォルダ以下に置く
			$body =  $this->_ci_load(array('_ci_view' => "sp/$view", '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
		}
		else {
			//PC版の場合はviews/pc/フォルダ以下に置く
			$body =  $this->_ci_load(array('_ci_view' => "pc/$view", '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
		}
 
        // 共通footerを読み込まない処理をいれる
        if(strpos($action, 'ajax') !== FALSE  || $class == "static") {
        } else{
            $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;
        }
    }
}
?>

使い方は、$this->load->view(“welcome”);と指定するとPC版はapplication/views/pc/welcome.php スマフォ版はapplication/views/sp/welcome.phpのビューを読み込みます。

また、$this->load->done_common_view();をviewを呼び出す手前に呼び出すと、application/views/welcome.phpのビューを読み込みます。

お問い合わせはこちら!

関連記事

large__2433102356

codeigniterはセッション情報をクッキー保持するので、複数台構成でもセッション保持してくれる

サービスが拡大していくと、いずれサーバの複数台構成にしなければならなくなる状況になります。

記事を読む

What have I done!?

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

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

記事を読む

phpCon_logo

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

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

記事を読む

medium_2264763977 (1)

PHPでMicrosoft Translate APIの翻訳機能を使ってみる

photo credit: Robert Scoble via photopin cc レ

記事を読む

vs2015xOpenCV

Visual Studio 2015でOpenCVを動かすための環境設定

OpenCVを利用してウェブカメラから画像を取得し、画面上に表示してみました。 コーディング環

記事を読む

Laravel

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

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

記事を読む

laravel_dev

Windows10にLaravel開発環境を構築

本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構築した時のメモです。 構

記事を読む

medium_3229017611 (1)

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

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

記事を読む

1463577479_XAMPP

複数のXAMPPインストール

Windows環境でPHP開発をする際にXAMPPをインストールすることになります。ただし、複数の開

記事を読む

medium_389294731 (1)

【Codeigniter】$this->db->where() の第3引数にfalseを指定した時の解説

photo credit: trekkyandy via photopin cc PHPに

記事を読む

お問い合わせはこちら!

Message

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

お問い合わせはこちら!

35643
SourceTreeで差分ファイルを抽出

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

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

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

laravel_dev
Windows10にLaravel開発環境を構築

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

1463577479_XAMPP
複数のXAMPPインストール

Windows環境でPHP開発をする際にXAMPPをインストールするこ

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

本記事ではLaravel 5.1 LTSを利用して開発するためにLar

→もっと見る

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