2017-11-30 13 views
1

私のウェブサイトに言語切り替え機能があります。ただし、ベースURLにリダイレクトされます。Codeigniterで言語を切り替えると、同じページにリダイレクトされます

しかし、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"]); 
     } 


    } 
+0

uはhttps://stackoverflow.com/a/25651479/8197560を試してみましたが、https://stackoverflow.com/a/21264228/8197560 – tan

答えて

1

セッションでこれを行うことができますが、私はuri-queryを利用するこのアプローチを好んでいます:それは、新しい言語を呼び出すリンクに?my-current-url部分を追加しています。

だから、私のビューに、私はこのようなURIクエリとして現在のサイトのURLを追加し、言語スイッチャーを呼び出すリンク(ボタンなど)をしました:

<?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');  
} 
+0

それはURLで毎回 '?az'または'?rus'ですか? –

+0

いいえ、リンク時にのみボタンを押すか、クリックすると新しい言語が表示されます)これは明らかにあなたの引用に基づいています: "自分のウェブサイトに言語切り替え機能があり、それはうまくいきます"?$ pnはあなたのパス名を – Vickel

+0

まず、 'LanguageSwitcher/switchLang/russian'ページにリダイレクトされ、言語を変更したページにリダイレクトされます。これは正常ですか? –

0

は、使用してみてください:

$uriがある
redirect($uri, 'refresh'); 

あなたが翻訳したいホームページのURL

+0

万一ています私はURI beforを定義するe? –

+0

それは素晴らしいだろう –

+0

それは動作しませんでした:( –

0

希望は、これはあなたに

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

私はこれを書くべきですか? –

+0

https://www.codeigniter.com/userguide3/libraries/user_agent.html詳細情報についてはこのリンクを参照 – Rishi

0

を助けるかもしれない完全なあなたのURLアドレスを使用してアプリケーション/ configディレクトリ内のあなたのconfig.phpにBASE_URLを変更しようと、この

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

これはこのURLに切り替わります:https://www.wtf.az/LanguageSwitcher/switchLang/russian –

0
/* 
    |-------------------------------------------------------------------------- 
    | 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'; 

を試してみてください。

+0

私はこれが必要ではありません –

0

は私が(そうでないかもしれない簡単にあなたが求めているもののためのソリューションが、これと他のシナリオのために本当に便利です)すべての私のプロジェクトで行う、私は彼らに歴史を()と呼ばれる、2つのヘルパーを使用することです戻る()

歴史がセッション内の配列に現在のURLを保存します。

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

バック($ 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()もチェックできますが、それは単なるアイデアです。

これで、訪問したURLの履歴があります。 希望するものを変更してからback(1)に変更できます。 ログイン前に行っていた作業にユーザーをリダイレクトする場合にも便利です。

ああ!ほとんど忘れてしまった:配列のサイズを制限し、新しいURLを追加する前に常に最も古いURLを削除することを忘れないでください。 5と10の間で大丈夫です。

関連する問題