在Codeigniter中创建后台链接

时间:2012-01-20 06:15:06

标签: php codeigniter browser-history

我在Codeigniter中有一个网址为http://arslan/admin/category/index/0/name/asc/10的网页。 在此网址中,uri_segment0开始。此(0)是默认搜索值,nameasc是默认排序字段和顺序,10是分页索引。

现在,如果我移动到带URL的添加页面(http:// arslan / admin / category / add /) 类似上面的“添加”是当前的功能。

现在,如果我想通过返回页面的链接返回...如何将用户转移回来?我无法让网址返回。

有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:10)

我不确定我是否正确理解了这个问题,如果不是,请忽略我的答案,但我认为您需要一个“返回上一页”的链接,类似于网络浏览器中的后退按钮。

如果是这样,你可以使用javascript通过简单地使用这一行来解决这个问题:

<a href="javascript:window.history.go(-1);">Go back</a>

答案 1 :(得分:10)

我通过创建/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');
        }
    }
}

然后检索您调用的最后一页的网址

$this->session->last_page();

您也可以增加返回的信息的偏移量和类型等

$this->session->last_page(1); // page before last
$this->session->last_page(2); // 3 pages ago

该函数不会将使用Ajax调用的页面添加到跟踪器,但您可以轻松删除if( !IS_AJAX )位以使其执行此操作。

编辑: 如果运行错误Undefined constant IS_AJAX,则假定为IS_AJAX 将以下行添加到/application/config/constants.php

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

答案 2 :(得分:4)

有两种方法可以解决您的问题:首先,您可以放置​​一个使用javascript back-function onclick的链接,就像这样......

<a href="javascript:history.back()">go back</a>

...或者您总是将当前的整页网址保存到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>

答案 3 :(得分:1)

重定向到上一页的最简单方法,试试这个对我有用

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

您还需要导入user_agent库$this->load->library('user_agent');

答案 4 :(得分:0)

您可以创建一个会话以转到后页:

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

或将其用于锚。