我有语言切换器在我的网站上,它工作正常。但是,它重定向到基本网址。
但是当我写redirect($_SERVER["HTTP_REFERER"]);
时,它不能正确地重定向。当我在主页上更改新的语言时,我应该停留在相同的URL,只是让网站更改语言。
如何解决此问题?
下面是我的控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class LanguageSwitcher extends CI_Controller
{
public function __construct() {
parent::__construct();
$this->load->helper('url');
}
function switchLang($language = "") {
$language = ($language != "") ? $language : "azerbaijani";
$this->session->set_userdata('site_lang', $language);
redirect(base_url());
}
}
还有,我试过这个,它对我不起作用:
function switchLang($language = "") {
if($this->uri->uri_string() == '') {
$language = ($language != "") ? $language : "azerbaijani";
$this->session->set_userdata('site_lang', $language);
redirect(base_url());
} else {
$language = ($language != "") ? $language : "azerbaijani";
$this->session->set_userdata('site_lang', $language);
redirect($_SERVER["HTTP_REFERER"]);
}
}
7条答案
按热度按时间nom7f22z1#
试试这个
tcbh2hod2#
您可以使用会话来实现这一点,但我更喜欢这种使用uri查询的方法:它所做的是将
?my-current-url
部分添加到您调用新语言的链接中。因此,在我的视图中,我有一个调用语言切换器的链接(按钮等),将当前站点url添加为uri-query,如下所示:
然后在函数
switchLang()
中处理重定向:wfauudbj3#
请尝试使用:
其中
$uri
是要翻译的主页的urlg2ieeal74#
"希望这对你有帮助"
wwodge7n5#
尝试在application/config目录下的config.php中更改base_url,并将URL地址填写完整。
5cnsuln76#
我在我所有的项目中所做的(对于你所要求的可能不是一个简单的解决方案,但对于这个和其他场景确实很有用)是使用两个助手,我称之为history()和back()。
历史记录将当前URL保存在会话中的数组中:
Back($num)接收一个号码并重定向到该位置。例如:back(1)相当于“将我发送到最后访问的页面”。
然后在“CI_Controller”的__construct()(或您扩展控制器的任何类)中调用
history()
一次以记录每个方法。同样,您可以添加第三个控制器,我称之为no_history()。
no_history()删除最后保存的URL(我在不想保存的方法中使用它,例如 AJAX 请求)。您也可以检查**$this-〉input-〉is_ajax_request(),但这只是一个想法。
就是这样,现在你有了一个访问过的网址的历史记录。你可以随意修改,然后back(1)**。这对于重定向你的用户到他们登录前正在做的任何事情也很有用。
哦!差点忘了:记住要限制数组的大小,并且在添加新的url之前总是删除最旧的url。5到10之间就可以了。
azpvetkf7#
在构造函数方法下第一次加载,如下所示:
插入或更新数据后,它将正常工作。