class Index extends CI_Controller {
private $data = array();
private $content_data = array();
public function __construct() {
parent::__construct();
if (isset($_GET['m2w'])) {
$stw = switch_to_web();
}
if (isset($_GET['w2m'])) {
$stm = switch_to_mobile();
}
// load mobile or desktop view
}
// Called within an helper function
function switch_to_web() {
return set_cookie('load-web', 'true', '86500');
}
function switch_to_mobile() {
return delete_cookie('load-web');
}
function is_mobile() {
// return true;
$CI = & get_instance();
if ($CI->input->cookie('load-web'))
return false;
$CI->load->library('user_agent');
if ($CI->agent->is_mobile()) {
return true;
}else
return false;
}
上記のコード ブロックを使用して、モバイル ビューと Web ビューのどちらを読み込むかを決定します。
予想される実行順序:
- m2w が設定されている場合、load-web cookie を設定します (これは is_mobile 関数が呼び出される前に行われます)
- is_mobile 関数は、load-web cookie が設定されていることを確認し、デスクトップ バージョンをロードします
実際の実行順序:
- m2w が設定されている場合、load-web cookie が呼び出されて設定されますが、is_mobile 関数はそれが設定されていると認識しないため、デスクトップ バージョンは読み込まれません。
- is_mobile 関数が true を返した後に Cookie が設定されます。ブラウザの Cookie を確認したところ、Cookie が実際には設定されていましたが、期待どおりに設定されていませんでした。
何が正しくないのですか?