создание обратных ссылок в Codeigniter
У меня есть страница с URL http://arslan/admin/category/index/0/name/asc/10 в Codeigniter.
В этом URL-адресе uri_segment
начинается с 0
. Это (0
) - значение поиска по умолчанию, name
и asc
- Поле сортировки и порядок сортировки по умолчанию, а 10-индекс разбиения на страницы.
Теперь, если я перейду на страницу добавления с URL (http://arslan/admin/category/add/) аналогично, как и выше, "добавить" - это текущая функция.
Теперь, если я хочу вернуться по ссылке на заднюю страницу... Как я могу отвлечь внимание пользователь вернулся? Я не могу заставить URL вернуться.
Кто-нибудь может мне помочь, пожалуйста?5 ответов:
Я не уверен, правильно ли я понял вопрос, если нет, пожалуйста, проигнорируйте мой ответ, но я думаю, что вы хотите ссылку "вернуться на предыдущую страницу", аналогичную кнопке Назад в веб-браузере.
Если это так, вы можете использовать javascript для решения этой проблемы, просто используя эту строку:
<a href="javascript:window.history.go(-1);">Go back</a>
Я расширяю класс сеанса, создавая
/application/libaries/MY_Session.php
class MY_Session extends CI_Session { function __construct() { parent::__construct(); $this->tracker(); } function tracker() { $this->CI->load->helper('url'); $tracker =& $this->userdata('_tracker'); if( !IS_AJAX ) { $tracker[] = array( 'uri' => $this->CI->uri->uri_string(), 'ruri' => $this->CI->uri->ruri_string(), 'timestamp' => time() ); } $this->set_userdata( '_tracker', $tracker ); } function last_page( $offset = 0, $key = 'uri' ) { if( !( $history = $this->userdata('_tracker') ) ) { return $this->config->item('base_url'); } $history = array_reverse($history); if( isset( $history[$offset][$key] ) ) { return $history[$offset][$key]; } else { return $this->config->item('base_url'); } } }
И затем, чтобы получить URL последней посещенной страницы, вы вызываете
$this->session->last_page();
И вы также можете увеличить смещение и тип возвращаемой информации и т. д.
$this->session->last_page(1); // page before last $this->session->last_page(2); // 3 pages ago
Функция не добавляет в трекер страницы, вызванные с помощью Ajax, но вы можете легко удалить бит
if( !IS_AJAX )
, чтобы сделать это.Править: Если вы бежите к ошибке неопределенной константы IS_AJAX, предполагается IS_AJAX добавьте строку ниже, чтобы
/application/config/constants.php
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
Есть два способа решить вашу проблему: во-первых, вы можете разместить ссылку, которая использует javascript back-функцию onclick, как это ...
<a href="javascript:history.back()">go back</a>
... или вы всегда сохраняете текущий полный url-адрес страницы в файл cookie и используете его для создания обратной ссылки-помощник может выглядеть так (не протестирован)...
/** * save url to cookie */ if(!function_exists('urlhistory_save')) { function urlhistory_save() { $CI =& get_instance(); $CI->load->library('session'); $array = array( 'oldUrl' = $CI->session->userdata('newurl'), 'newurl' = $CI->uri->uri_string() ); $CI->session->set_userdata($array); } } /** * get old url from cookie */ if(!function_exists('urlhistory_get')) { function urlhistory_get() { $CI =& get_instance(); $CI->load->library('session'); return $CI->session->userdata('oldurl'); } }
В вашем контроллере вы бы использовали urlhistory_save () для сохранения текущего URL, а в представлении вы могли бы использовать urlhistory_get() для восстановления старого адреса, как это:
<a href="<?php echo base_url().urlhistory_get(); ?>go back</a>
Самый простой способ переадресации на предыдущую страницу, попробуйте это сделать для меня
redirect($this->agent->referrer());
Вам также нужно импортировать библиотеку user_agent
$this->load->library('user_agent');
Вы можете создать сеанс для перехода на заднюю страницу следующим образом:
$this->session->set_userdata('ses_back_jobs','controller name'.array_pop(explode('controller name',$this->input->server('REQUEST_URI'),2))); //Back page
Затем, если вы хотите перенаправить на какую-то страницу, используйте его:
redirect($this->session->userdata('ses_back_jobs'));
Или используйте его для якоря.