在Codeigniter中切换语言后重定向到同一页面

ubof19bj  于 2022-12-06  发布在  其他
关注(0)|答案(7)|浏览(147)

我有语言切换器在我的网站上,它工作正常。但是,它重定向到基本网址。
但是当我写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"]);
        }

    }
nom7f22z

nom7f22z1#

试试这个

$url = $_SERVER['HTTP_REFERER'];
redirect($url);
tcbh2hod

tcbh2hod2#

您可以使用会话来实现这一点,但我更喜欢这种使用uri查询的方法:它所做的是将?my-current-url部分添加到您调用新语言的链接中。
因此,在我的视图中,我有一个调用语言切换器的链接(按钮等),将当前站点url添加为uri-query,如下所示:

<?php 
  // set pathname from where we came from
     $pn=uri_string();  // the uri class is initialized automatically
?>
<a href="/LanguageSwitcher/switchLang/azerbaijani?<?=$pn?>">Azerbaijani</a>

然后在函数switchLang()中处理重定向:

function switchLang($language = "") {
    // get pathname from where we came from
    $pn= parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
    $language = ($language != "") ? $language : "azerbaijani";
    $this->session->set_userdata('site_lang', $language);

    // redirect to where we came from
       redirect($pn, 'refresh');    
}
wfauudbj

wfauudbj3#

请尝试使用:

redirect($uri, 'refresh');

其中$uri是要翻译的主页的url

g2ieeal7

g2ieeal74#

"希望这对你有帮助"

$this->load->library('user_agent');
if ($this->agent->is_referral())
{
    echo $this->agent->referrer();
}
wwodge7n

wwodge7n5#

/*
    |--------------------------------------------------------------------------
    | Base Site URL
    |--------------------------------------------------------------------------
    |
    | URL to your CodeIgniter root. Typically this will be your base URL,
    | WITH a trailing slash:
    |
    |   http://example.com/
    |
    | WARNING: You MUST set this value!
    |
    | If it is not set, then CodeIgniter will try guess the protocol and path
    | your installation, but due to security concerns the hostname will be set
    | to $_SERVER['SERVER_ADDR'] if available, or localhost otherwise.
    | The auto-detection mechanism exists only for convenience during
    | development and MUST NOT be used in production!
    |
    | If you need to allow multiple domains, remember that this file is still
    | a PHP script and you can easily do that on your own.
    |
    */
    $config['base_url'] = 'your domain';

尝试在application/config目录下的config.php中更改base_url,并将URL地址填写完整。

5cnsuln7

5cnsuln76#

我在我所有的项目中所做的(对于你所要求的可能不是一个简单的解决方案,但对于这个和其他场景确实很有用)是使用两个助手,我称之为history()back()
历史记录将当前URL保存在会话中的数组中:

$history[] = current_url();
$ci->session->set_userdata('history', $history);

Back($num)接收一个号码并重定向到该位置。例如:back(1)相当于“将我发送到最后访问的页面”。

$history = $this->session->userdata('history');
$cant = count($history);
$back = $cant - $num;
redirect($history[$back]);

然后在“CI_Controller”的__construct()(或您扩展控制器的任何类)中调用history()一次以记录每个方法。
同样,您可以添加第三个控制器,我称之为no_history()
no_history()删除最后保存的URL(我在不想保存的方法中使用它,例如 AJAX 请求)。您也可以检查**$this-〉input-〉is_ajax_request(),但这只是一个想法。
就是这样,现在你有了一个访问过的网址的历史记录。你可以随意修改,然后
back(1)**。这对于重定向你的用户到他们登录前正在做的任何事情也很有用。
哦!差点忘了:记住要限制数组的大小,并且在添加新的url之前总是删除最旧的url。5到10之间就可以了。

azpvetkf

azpvetkf7#

在构造函数方法下第一次加载,如下所示:

function __construct()
  {
    parent::__construct();
$this->load->library('user_agent');
}

插入或更新数据后,它将正常工作。

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

相关问题