создание обратных ссылок на страницу в Codeigniter - PullRequest
3 голосов
/ 20 января 2012

У меня есть страница с 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 ]

10 голосов
/ 20 января 2012

Я расширяю класс сеанса, создав /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 ), чтобы сделать это.

Edit: Если вы запускаете с ошибкой неопределенная константа IS_AJAX, предполагается IS_AJAX добавьте строку ниже к /application/config/constants.php

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
10 голосов
/ 20 января 2012

Я не уверен, правильно ли я понял вопрос, если нет, пожалуйста, проигнорируйте мой ответ, но я думаю, что вы хотите ссылку «вернуться на предыдущую страницу», аналогично кнопке «Назад» в веб-браузере.

Если это так, вы можете использовать javascript, чтобы решить эту проблему, просто используя эту строку:

<a href="javascript:window.history.go(-1);">Go back</a>
4 голосов
/ 20 января 2012

Существует два способа решения вашей проблемы: во-первых, вы можете разместить ссылку, которая использует обратную функцию javascript, как здесь ...

<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>
1 голос
/ 16 июня 2016

Самый простой способ перенаправить на предыдущую страницу, попробуйте это, у меня это работает

 redirect($this->agent->referrer());

вам тоже нужно импортировать библиотеку user_agent $this->load->library('user_agent');

0 голосов
/ 06 июня 2013

Вы можете создать сеанс для перехода на обратную страницу как:

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

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

...