2013-05-04 4 views
1

У меня действительно странное поведение класса корзины CodeIgniter. Я установил таблицу ci_session в моей базе данных и уже изменил sess_use_database на TRUE.CodeIgniter Shopping Cart Странное поведение

Что происходит, когда я добавляю элементы в корзину для покупок, все в порядке: я вижу, что счетчик общих предметов растет и все. Когда я перехожу на страницу моей корзины, я впервые вижу все мои предметы там, где они должны быть. Я также предоставил кнопку «Удалить элемент» и кнопку «Пустая корзина». Странные вещи происходят здесь: когда я нажимаю, чтобы удалить элемент, страница обновляется (из-за перенаправления, я думаю), но элемент все еще там! Затем, если я вручную обновляю страницу корзины, я вижу, что тот же самый элемент, который я удалил, исчез. Это похоже на то, что когда я использую перенаправление, я получаю кеш страницы, а не фактическую страницу со свежей информацией об этом.

Во всяком случае, вот некоторые ссылки:

Попробуйте добавить некоторые элементы из этой страницы: http://www.pantanishoes.it/Niko/index.php/store/linea/urban Нажатие на большой темной кнопки на нижней части каждого описания.

Тогда попробуйте поехать в Каррелло в меню сверху и попытаться удалить некоторые предметы или Svuota (что делает простой destroy()) и посмотреть, что произойдет! Любая помощь будет принята с благодарностью! Спасибо, совет!

Вот некоторые коды товаров.

function add() { 

    $item = $this->store_model->get_item($this->input->post('id')); 

    $data = array(
     'id' => $this->input->post('id'), 
     'name' => $item->modello, 
     'qty' => $this->input->post('qty'), 
     'price' => $item->prezzo, 
     'options' => array(
      'taglia' => $this->input->post('taglia'), 
      'linea' => $item->linea, 
      'modello' => $item->modello, 
      'foto' => $item->foto1 
      ) 
    ); 

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

    $linea = str_replace(' ', '-', $item->linea); 

    redirect('/store/linea/' . $linea . '/', 'location'); 
} 

function remove() { 
    $rowid = $this->uri->segment(3); 
    $data = array(
     'rowid' => $rowid, 
     'qty' => 0 
    ); 

    $this->cart->update($data); 
    redirect('cart'); 
} 

function destroy() { 
    $this->cart->destroy(); 
    redirect('cart'); 
} 

На локальном хосте все работает отлично! Когда я загрузил веб-сайт на сервер, у него возникли такие проблемы. Действительно действительно странно! Есть ли какая-то конфигурация, которую я пропускаю?

Chrome говорит: Request URL: http://www.pantanishoes.it/Niko/index.php/cart/remove/fb1b4a9869de6f24aa620e2307192d93 Метод запроса: GET Код состояния: 302 Временно перемещено (из кэша)

+0

Вы используете кеш-код или какой-то метод кеширования? причина, если я отключу кеш в браузере, он работает, если включен кеш-доступ, он возвращает ту же страницу, что и вы описали. Так что провальд-а-а-а-а-а-а-аш (не «какандо») – sbaaaang

ответ

1

Хорошо, ребята. Поэтому я, наконец, исправил эту небольшую ошибку благодаря помощи моего друга, который некоторое время использовал CI. Как некоторые из вас догадались, это проблема с кешем. Единственное, что вам нужно сделать, это заставить PHP заголовки вроде так:

header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', false); 
header('Pragma: no-cache'); 

Вы можете сделать закрытую функцию в контроллере, так что он не доступен снаружи и назвать его в относительном добавить, удалить, уничтожить методы , Частная функция должна выглядеть следующим образом:

private function _set_headers() { 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    header('Last-Modified: ' . gmdate('D, d M Y H:i(worry)') . ' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 
} 

И вы называете это внутри других функций, например, так:

$this->_set_headers(); 

Помните, что это будет работать только в рамках класса. Вы не можете вызвать эту функцию в других контроллерах, и ее невозможно получить из-за пределов области действия, так как она не является общедоступной.

Спасибо вам всем!

0

я бы посоветовал вам попробовать это:

redirect('/store/linea/' . $linea . '/', 'refresh'); 

вместо

redirect('/store/linea/' . $linea . '/', 'location'); 

кажется, что ваша страница остается в кеше после перенаправления

Spero che funzioni

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