Codeigniter мобильный редирект с кешированием - PullRequest
1 голос
/ 03 апреля 2012

У меня есть мой сайт (mysite.com) для перенаправления на mysite.com/Mobile для мобильных браузеров с использованием библиотеки useragent codeigniters из моего контроллера по умолчанию.

Когда я кеширую свои выходные данные из контроллера, перенаправление не работает, так как браузер обслуживает кэшированный файл.

Существует ли правильный способ перенаправления из файла config / rout.php? Будет ли это перенаправлять мобильных посетителей?

Мой контроллер

класс Child расширяет контроллер {

function child()
{
    parent::Controller();
    //$this->output->cache(7200);
    $agent = $this->agent->browser() . ' ver ' . $this->agent->version();

}

function index()
{
    if ($this->agent->is_mobile())
    {
        header('Location: ' . site_url() . 'Mobile/', TRUE, 301);
        exit(0); 
    }else{
        $this->output->cache(7200);
        $this->load->view('home',$data);
    }
}

1 Ответ

2 голосов
/ 03 апреля 2012

Я бы не советовал использовать кэширование вывода CodeIgniter. Это работает до контроллера, поэтому вы никогда не попадете в index(). Маршрутизация не может справиться с этой ситуацией, поскольку она не может определить, является ли клиент мобильным.

Лучше использовать другой метод кэширования, который предлагает CodeIgniter, поскольку он более детализирован, вы можете кэшировать отдельные представления. http://codeigniter.com/user_guide/libraries/caching.html

function index()
{
    // should put this in the __construct() of this controller or in your MY_Controller.php
    $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));

    if ($this->agent->is_mobile())
    {
        redirect('Mobile');
    }
    else
    {
        // if this doesn't get us the output, recreate and store it
        if(!$output = $this->cache->get('controllername_index_output'))
        {
            $output = $this->load->view('home', $data, TRUE);
            $this->cache->save('controllername_index_output', $output, 7200);
        }

        // now we surely have the output ready, whether it was cached or not
        $this->output->set_output($output);         
    }
}
...