создание обратных ссылок в 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 3

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

Или используйте его для якоря.