2016-03-25 5 views
1

, ben kullanıcı cihazı ve istenen alan adını algılamak istiyorum. Aynı uygulama üzerinde kullanıyorum Alan adları şunlardır: ayrıca $this->detect() kullanıyorum, ve m.seeme.tld www.seeme.tld. Yani bu ne yaptım:Farklı görünümlerimi nasıl yüklerim? Benim <strong>MY_Controller.php</strong> yılında

<?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); 
} 

?> 

ben uygulamada 2 klasörler/görünümler klasör: (mobil kullanıcılar için) (pc kullanıcıları için) PC ve Mobile görüşlerini yüklemek için, ben bu kodu kullanılan benim fetch() fonksiyonu: bir mobil cihaz veya mobil bir cihazla ziyareti m.seeme.tld kullandığınızda

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); 
} 

, mobil içeriğini olsun. Ama ziyaret ettiğimde, mobil içerik almak yerine bir PC ile m.seeme.tld'u ziyaret ettiğimde, PC içeriğini almayı tercih ediyorum. Lütfen bu sorunu çözmeme yardım edin!

+0

Neden 'basit' senin 'fetch' işlevinde else' için elseif' bunu değiştirmez? – Keeleon

+0

bunu kontrol edin: http://stackoverflow.com/a/4117597/2275490 – Vickel

+0

@Vickel mobil algılama komut dosyasını aramıyor. Ben zaten pc içeriğini gösteren mobiledetect.net –

cevap

1

değiştirme yapılandırma dizi bazen problemli olabilir: How to override config's array within a controller in CodeIgniter?. Ayrıca çift kontrol yapıyorsunuz (kontrolörde ve fonksiyonda).

YOURCONTROLLER.PHP __construct():

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

yapabildin:

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

o zaman görünümünü yüklemek için kullanabilirsiniz

bu şekilde yapıyor benzer davranışlar arşivleyebilrsiniz statment ince çalışıp çalışmadığını eğer görüntülemek için tek bir kontrol noktasından ekleyin:

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'); 
} 

Size yardımcı olur umarım. // Bu sadece '===' yerine '=' ile çalışır.

+0

Yardımınız için teşekkürler, ancak hala bir pc ile mobil url'yi ziyaret ettiğimde 'Im pc' yazdıran kodunuz çalışmıyor. –

+0

Tamam, şimdi 2 koşulun ne işe yaradığını bilebilirdiniz: log_message ('debug', 'Im pc - Ismobile false olmalıdır:'. $ This-> detect-> isMobile(). 'Ve url mobile true: '. ($ _ SERVER [' HTTP_HOST '] === MOBILE_URL); Ve hangisinin doğru olmadığını kontrol edin.M MOBILE_URL ayarını yaparsınız? Nerede tanımlanır? URL'yi etkileyen .htaccess var mı? –

+0

Yazdırırsanız $ _SERVER ['HTTP_HOST'] sonucu doğru? –

0

yardım için teşekkür ama sabit var. Tüm ı ilk MY_Controller.php mobil kullanıcıları tespit edip benim getirme sonra MOBILE_URL onları yönlendirmek için yaptığım() i did:

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

ve bu kadar, PAAm o çalışmaya başladı.