[英]codeigniter redirect to language with location as default link
当前在codeigniter多语言网站上工作。 我的网站名称是www.abcd.com,它正在调用默认控制器。 需要重定向www.abcd.com/en/location作为默认链接,当用户更改语言时,它将像www.abcd.com/fr/location一样重定向。 最好的方法是什么,任何帮助将不胜感激
我使用这样的会议
应用/配置/ routes.php文件
$route['default_controller'] = "default_controller/select_home";
//if make a generic page public example
$route['public/(:any)'] = 'public/public/page_render/$1';
default_controller.php
function __construct(){
parent::__construct();
$this->router =& load_class('Router', 'core');
$this->_set_lang_language($this->get_language());
}
public function select_home( $page = 'index' ){
redirect(base_url($page), 'refresh');
}
public function get_language(){
if( is_null($this->session->userdata('language')) || ! $this->session->userdata('language')){
$_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
else{
$_language = $this->session->userdata('language');
}
return $_language;
}
private function _set_lang_language( $language = '' ){
switch($language){
case 'en':
$new = 'english';
break;
case 'es':
default:
$new = 'spanish';
break;
}
$this->lang->load('calendar', $new);
$this->lang->load('date', $new);
$this->lang->load('db', $new);
$this->lang->load('email', $new);
$this->lang->load('form_validation', $new);
$this->lang->load('ftp', $new);
$this->lang->load('imglib', $new);
$this->lang->load('number', $new);
$this->lang->load('profiler', $new);
$this->lang->load('unit_test', $new);
$this->lang->load('upload', $new);
}
public function set_language( $language ){
$this->session->set_userdata('language', $language);
$this->_set_lang_language();
}
应用程序/公/ public.php
function __construct(){
parent::__construct();
}
public function page_render( $page ){
//you can change your lang with parser or with deferents views as you want
$data = array(...);
$this->load->view('header', $data);
$this->load->view($page, $data);
$this->load->view('footer', $data);
}
尽管您可以使用路由执行此操作,但我始终建议在应用程序/核心内部使用名称为MY_Controller的单独的控制器类,以扩展默认的CI_Controller 。
class MY_Controller extends CI_Controller {
function __construct() {
}
}
然后,在控制器中(例如Example_controller),您必须扩展MY_Controller并在构造函数中添加所需的功能。
class Example_controller extends MY_Controller {
public function __construct() {
parent::__construct();
}
}
您可以在MY_Controller内做什么以满足您的需求? 好吧,你可以检查
$ language = $ this-> uri-> segment(2); //小心,数量取决于您的项目
并在$ language的 if语句中应用您的功能。
您必须与会话结合才能检查用户是否已经选择了他的语言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.