*

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のビューを読み込みます。

お問い合わせはこちら!

関連記事

Laravel 5.1でLaravel Mixを使ってみた

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

記事を読む

codeigniterでselect文にunionを使いたい

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

codeigniterのヘッダー、フッターはhookでなくloadで対応する

photo credit: mrlerone via photopin cc  

記事を読む

PHP初心者はまず関数die()と、print_r()を覚えよう!

photo credit: drewm via photopin cc PHPを触り始めて

記事を読む

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

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

記事を読む

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

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

記事を読む

お問い合わせはこちら!

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 ↑