【问题标题】:creating back page links in Codeigniter在 Codeigniter 中创建后页链接
【发布时间】:2012-02-14 18:51:55
【问题描述】:

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

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

现在,如果我想通过一个链接返回到后页...我怎样才能将用户转移回来?我无法让网址返回。

有人可以帮帮我吗?

【问题讨论】:

    标签: php codeigniter browser-history


    【解决方案1】:

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

    如果是这样,您可以使用 javascript 来解决这个问题,只需使用此行:

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

    【讨论】:

    • 上次访问的链接来自其他站点:P
    【解决方案2】:

    有两种方法可以解决您的问题:首先,您可以放置​​一个使用 javascript back-function 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>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • Ben 你的建议也很有帮助,就像@Ruben ..谢谢你的回复。
      • 没问题。运气好能解决你的问题吗?
      • 我已经在使用会话数据 - 当我运行你的代码时,我得到了错误:A session is active. You cannot change the session module's ini settings at this time Filename: Session/Session.php Backtrace: File: /Nav_session.php Line: 5 Function: __construct
      【解决方案4】:

      您可以创建一个会话以返回页面:

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

      或将其用于锚点。

      【讨论】:

      • 得到一个错误 - 只有变量应该通过引用传递
      【解决方案5】:

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

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

      你也需要导入 user_agent 库$this-&gt;load-&gt;library('user_agent');

      【讨论】:

        猜你喜欢
        • 2014-01-29
        • 1970-01-01
        • 2012-06-06
        • 2018-05-05
        • 2016-05-26
        • 2013-03-29
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多