我有一个带有URL的页面http://arslan/admin/category/index/0/name/asc/10在Codeigniter中。在该URL中,uri_segment
从0
开始。This(0
)是默认搜索值,name
和asc
是默认排序字段和顺序,10是分页索引。
现在,如果我移动到带有URL的添加页面(http://arslan/admin/category/add/)类似于上面的"add"是当前函数。
现在,如果我想通过链接返回到主页。。。如何将用户转回?我无法使URL返回。
有人能帮帮我吗?
我不确定我是否正确理解了这个问题,如果没有,请忽略我的答案,但我认为你想要一个"返回上一页"的链接,类似于web浏览器中的后退按钮。
如果是这样的话,您可以使用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 )
位
编辑:如果运行到错误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');
有两种方法可以解决您的问题:首先,您可以放置一个使用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,在视图中,您也可以使用urghistory_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'));
或将其用于锚。