2016-03-25 3 views
1

В моем MY_Controller.php, я хочу обнаружить пользовательское устройство и запрошенное доменное имя. Доменные имена, которые я использую в одном приложении: www.seeme.tld и m.seeme.tld, также я использую $this->detect(). Так вот что я сделал:Как загрузить различные виды?

<?php 

if($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){ 
$this->config->set_item('base_url', MOBILE_URL); 
}elseif(!$this->detect->isMobile() || $_SERVER['HTTP_HOST'] != MOBILE_URL){ 
$this->config->set_item('base_url', WEBSITE_URL); 
} 

?> 

У меня есть 2 папки в приложении/папка просмотров: PC (для пользователей ПК) и Mobile (для мобильных пользователей) Для загрузки точки зрения, я использовал этот код в моя fetch() функция:

public function fetch($view, $data = array, $other_vars = false) 
{ 

if(base_url() === MOBILE_URL || $this->_ci->detect->isMobile()){ 
$f = 'Mobile/'; 
}elseif(!$this->_ci->detect->isMobile() || base_url() != MOBILE_URL){ 
$f = 'PC/'; 
} 
return $this->_ci->load->view($f.'contents/'.$view, $data, true); 
} 

При использовании мобильного устройства или посетить m.seeme.tld с мобильным устройством, я получаю мобильный контент. Но когда я посещаю визит m.seeme.tld с ПК вместо получения мобильного контента, я скорее получаю содержимое ПК. Пожалуйста, помогите мне решить эту проблему!

+0

Почему бы не изменить это 'elseif' на простое' else' в вашей функции 'fetch'? – Keeleon

+0

проверить это: http://stackoverflow.com/a/4117597/2275490 – Vickel

+0

@Vickel не смотря мобильный сценарий обнаружения. я уже использую mobiledetect.net –

ответ

1

Изменение конфигурационного массива иногда может быть проблематичным: How to override config's array within a controller in CodeIgniter?. Также вы выполняете двойную проверку (в контроллере и в функции).

Я подобное поведение АРХИВ с делать так:

YOURCONTROLLER.PHP __construct():

if ($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){ 
    define('IS_MOBILE', TRUE); 
}else{ 
    define('IS_MOBILE', FALSE); 
} 

, то вы можете использовать для загрузки вид:

if (IS_MOBILE) { 
    $view_folder = 'Mobile/'; 
}else{ 
    $view_folder = 'PC/'; 
} 
$this->load->view($view_folder.$view, $data, TRUE); 

Также вы могли добавьте единую контрольную точку для просмотра, если статус If работает нормально:

if ($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){ 
    define('IS_MOBILE', TRUE); 
    log_message('debug', 'Im mobile browser: '.$this->detect->isMobile().' or the url is mobile:'.$_SERVER["HTTP_HOST"]); 
}else{ 
    define('IS_MOBILE', FALSE); 
    log_message('debug', 'Im pc'); 
} 

Надеюсь, это поможет вам. // Это работает только с заменой '===' на '='.

+0

спасибо за помощь, но ваш код не работает, поскольку он печатает «Im pc», когда я нахожу мобильный URL с ПК. –

+0

Итак, теперь вы можете знать, что из двух условий не работает: log_message ('debug', 'Im pc - Ismobile должен быть false:'. $ This-> detect-> isMobile(). 'И url mobile true: '. ($ _ SERVER [' HTTP_HOST '] === MOBILE_URL); И проверьте, что это неправильно. Как вы устанавливаете MOBILE_URL? Где определено? У вас есть .htaccess, который влияет на URL? –

+0

Если вы печатаете результат $ _SERVER ['HTTP_HOST'] правильный? –

0

спасибо за помощь, но я исправился. все, что я делал, было для первого обнаружения мобильных пользователей в MY_Controller.php и перенаправить их на MOBILE_URL то в моей выборки() я сделал:

if($_SERVER['HTTP_HOST'] = MOBILE_URL){ 
$view_folder = 'Mobile/; 
}else{ $view_folder = 'Frontend/; 
} 

и это все, Paam он начал работать.

Смежные вопросы