代码点火器 |获取上一个 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 并用作返回上一页的按钮的主要内容,如果未能解决你的问题,请参考以下文章
uniapp里navigateBack返回上一页携带参数方法封装