代码点火器 |获取上一个 URL 并用作返回上一页的按钮

Posted

技术标签:

【中文标题】代码点火器 |获取上一个 URL 并用作返回上一页的按钮【英文标题】:Codeigniter | Get previous URL and used as back button to previous page 【发布时间】:2014-12-05 05:38:17 【问题描述】:

我真的很想知道我该怎么做,我有 3 个页面有相同的链接到 1 个页面,现在我想要做的是有 1 个按钮,它足以智能地获取 3 个页面中的哪一个被使用转到该页面并将其用作返回上一页的链接。

如果有人知道如何做到这一点,请帮助我摆脱这种混乱。在codeigniter中发布一些代码如何做到这一点。提前谢谢你。

【问题讨论】:

内置方法***.com/a/70766040/13903942 【参考方案1】:

通过使用简单的javascript实现上一个按钮,

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

【讨论】:

这不是真的正确,问题是关于 codeigniter,此外,内联 javascript 总而言之是不好的做法。知道有一个内置函数重定向回***.com/a/70766040/13903942【参考方案2】:

加载 url helper 后,在隐藏字段中设置 current_url,例如“refer_from”。

<input type="hidden" name="refer_from" value="<?php echo current_url(); ?>" />

使用Input Class 获取它并将其设置在锚链接上

<a href="<?php echo $this->input->post('refer_from'); ?>">Previous</a>

注意:使用 window.history.go(-1) 将失败并抛出 js 错误,如果用户以某种方式登陆 直接在“1”最后一页。在这种情况下,window.history 将为空。

【讨论】:

我会试试的。感谢您的回复。【参考方案3】:

在我的情况下,jquery back 方法意味着 window.history 等,所以没有工作,我试过这个希望这对你们有帮助。点击时调用这个方法。干杯

  function redirection()
        
           <?php $send=$_SERVER['HTTP_REFERER'];?> 
            var redirect_to="<?php echo $send;?>";             
            window.location = redirect_to;

        

【讨论】:

【参考方案4】:

控制器中添加:

$data['back'] = $_SERVER['HTTP_REFERER'];

视图中添加一个按钮并链接到$back

【讨论】:

【参考方案5】:
//to get previous url $_SERVER['HTTP_REFERER'];

<?php $send = $_SERVER['HTTP_REFERER'];?> 
var redirect_to="<?php echo $send;?>";    

//to redirected to this link
location.assign(redirect_to);

//you can pass static link also to redirected to this link
location.assign('facebook.com');

【讨论】:

【参考方案6】:

我不知道旧版本,我猜有这样的功能,但知道有,你应该避免使用可能会在很多方面破坏的公认答案。

知道你可以使用方法previous_url。 只需将其添加到您需要的地方即可完成

<div class="container">
    <a  href="<?= previous_url();?>" class="btn btn-info">
        <i class="bi bi-arrow-return-left"></i>
    </a>
</div>

返回用户之前所在页面的完整 URL(包括片段)。

由于盲目信任 HTTP_REFERER 系统变量的安全问题,CodeIgniter 会将之前访问过的页面存储在会话中(如果可用)。这可确保我们始终使用已知且受信任的来源。如果会话尚未加载或不可用,则将使用经过清理的 HTTP_REFERER 版本。


编辑

改进问题修复

我注意到单独的previous_url 可能适合所有场景,特别是如果我们有一个重定向回同一页面的表单;这是因为上一页是用户当前所在的页面,因此不会回到想要的位置(其他解决方案无论如何都会有同样的问题),一个简单的解决方案,并且无论如何都可以改进,如下:

    /app/Controllers/BaseController.php

     ///  Use this as base redirect
     public static $baseRedirect = '/index';
    
     /** @public
      *  Will check the User position and avoid and URL which aren't desired
      *  - @example
      *  Current Page: /news
      *  Previus : /index
      *
      * if the user update a form in the current page, which is a POST or GET and the user is
      * /news/update and then will go back to the current page now previous_url() will be /news and
      * NOT /index , if the user presses back will go to /news again and not /index.
      *
      * @var array $skip An array with url slugs to check the previous url, if the previous url containts any then skip to fallback
      * @var string $baseRedirect : base redirec if fallback is not provided
      * @param string|null $fallback use a target url as the desired 'Go Back' URL
      */
     public function getPreviousURL(?string $fallback=null)
     
         // NOTE: We need the current_url also inside, to check that we don't go back in the same page ;)
         $skip = [current_url(), "create", "udate", "delete", "post"];
         $prev = previous_url();
         foreach($skip as $s) 
             if (str_contains($prev, $s)) 
                 return site_url($fallback ? $fallback : self::$baseRedirect);
             
         
         return $prev;
     
    

    现在,在任何扩展 BaseController 的控制器中

     class MyController extends BaseController
     // ... code 
     public function view($slug=null)
     
         // code
    
         $data = [
             // data
             'prev' => $this->getPreviousURL(), // this will be available in any Controller 
         ];
         echo view('templates/header', $data);
         echo view('news/view', $data);
         echo view('templates/footer', $data);
    
     
    

此外,您可以将任何后备传递到 url ;)

$data = [
            // data
            'prev' => $this->getPreviousURL(fallback: '/home'), // this will be available in any Controller
        ];
    在视图中news/view.php

 <?php  $prev = $prev ??=  site_url('/index'); ?>

  <div class="container">
    <a  href="<?= $prev ?>" class="btn btn-info">
        G Back <i class="bi bi-arrow-return-left"></i>
    </a>
  </div>

【讨论】:

【参考方案7】:

/*使用jquery的codeigniter项目中的后退按钮*/

<button type="button" class="btn btn-primary btn-sm"  id= "back">Back</button>

//返回按钮的JQuery

 <script type="text/javascript">
  $(document).ready(function()
  $('#back').on('click', function()
        <?php $send = $_SERVER['HTTP_REFERER'];?> 
        var redirect_to="<?php echo $send;?>";             
        window.location.href = redirect_to;
      );
   );
  </script>

【讨论】:

以上是关于代码点火器 |获取上一个 URL 并用作返回上一页的按钮的主要内容,如果未能解决你的问题,请参考以下文章

js获取上一页当前页及域名url

uniapp里navigateBack返回上一页携带参数方法封装

如何使用 JavaScript 获取上一页 URL? [复制]

返回上一页代码区别:

如何使浏览器后退按钮跳过内页导航并返回上一页

转:javascript获取上一访问页面