Проблема с контроллером кэша Codeigniter - PullRequest
3 голосов
/ 27 марта 2012

У меня есть 2 контроллера:

cart/
cart/buy

В обоих показывается содержимое библиотеки Корзина

    <tbody>
        <?php foreach($this->cart->contents() as $items): ?>
        <tr>
            <td><?php echo $items['name'] ?></td>
            <td>$ <?php echo $this->cart->format_number($items['price']); ?></td>
            <td><?php echo $items['qty'] ?></td>
            <td>$ <?php echo $this->cart->format_number($items['subtotal']); ?></td>
        </tr>
            <?php endforeach; ?>
    </tbody>

Моя проблема в том, что контроллер buy остается в кеше, когда я добавляю первый товар в корзину. Я имею в виду, что у контроллера cart / есть 5 элементов, а у контроллера cart / buy есть 1 элемент. Я должен нажать Ctrl + F5, чтобы увидеть все элементы

Мне удалось решить эту часть до:

function buy()
    {

        $this->output->set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
        $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
        $this->output->set_header('Pragma: no-cache');
        $this->output->set_header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');  

        if($this->cart->contents())
        {

            $this->load->view('web/products/buy_view');
        }
        else
        {
            redirect('cart');   
        }       

    }

Но, видите, я хочу знать, есть ли данные в корзине, и перенаправить на другую страницу, если корзина пуста.

Очевидно , если ($ this-> cart-> contents ()) , "остается в кэше", как, например, корзина может быть заполнена в cart / , но пуста в корзина / покупка и до тех пор, пока я не нажму Ctrl F5 условие все еще не выполнялось.

Есть ли способ исправить это, или, может, я что-то не так делаю?


p.d. Мой метод добавления в контроллере корзины:

function add_item()
    {
        if($this->cart_model->validate_add_item() == TRUE)
        {  
            redirect('cart');
        }
    }

Мой метод добавления в модель корзины:

function validate_add_item()
    {
        $id = $this->input->post('producto_id'); 
        $cantidad = $this->input->post('cantidad');

        $this->db->select('vNombre, dPrecio');
        $this->db->where('iIdProducto', $id);
        $query = $this->db->get('product', 1);

        if($query->num_rows > 0)
        { 

            foreach ($query->result() as $row)  
            {  

                $data = array(  
                        'id'      => $id,  
                        'qty'=> $cantidad,  
                        'price'  => $row->dPrecio,  
                        'name'  => $row->vNombre  
                );  


                $this->cart->insert($data);   

                return TRUE;    
            }
        }
        else
        {  
            return FALSE;  
        }   
    }

1 Ответ

1 голос
/ 27 марта 2012

Я не нашел проблем в вашем коде.Я думаю, что это проблема кеша, как вы упомянули, так что вы можете попробовать это очистить кеш.Это очистит все предыдущие кэши, созданные codeigniter, а также предотвратит создание кэша в будущем:

    $this->load->driver('cache');
    $this->cache->clean();

    $this->output->cache(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...