好的,我们给了一个用CodeIgniter编写的应用程序,它支持多种语言。
我们遇到的问题是语言选择发生在CodeIgniter之外,在Joomla网站上,可以从中访问应用程序。但是,我们需要从Joomla安装中分离游戏,这次要在wordpress中处理语言选择。我们已经在wordpress中为所选语言设置了一个cookie(cookie名称是lang,值为ru或en(俄语和英语)),一般的想法是用户流程是这样的:
访客访问WORDPRESS网站(设置了cookie) - >通过游戏点击(Codeigniter必须检查cookie并设置会话变量)
因此,鉴于上述流程,从wordpress端写入cookie,因此CodeIgniter应用程序可以访问此cookie以分别设置语言。成功执行此操作的代码是:
if (!isset($_COOKIE["lang"])) {
$this->session->set_userdata('lang', 'en');
} else {
if ($_COOKIE["lang"] == "en") $this->session->set_userdata('lang', 'en');
if ($_COOKIE["lang"] == "ru") $this->session->set_userdata('lang', 'ru');
}
这样可以正常工作,但是在首次加载时它不会显示所选语言,但仅在我们重新加载时才会显示。但是,在将所有内容回显到浏览器之前,此代码放置在CodeIgniter应用程序的标题视图的顶部,据我们所知,它是在所有模板上调用的第一个文件。
我们应该采用另一种文件/方式吗?我们不是专家,甚至不是CodeIgniter的新手,所以不知道从哪里开始。我们尝试将此代码放在其他视图甚至控制器中,但它会中断或者不起作用。
答案 0 :(得分:0)
您可以尝试创建一个扩展CI_Controller的自定义控制器,并根据cookie / session选择合适的语言。
在应用程序/核心文件夹
中创建一个名为MY_Controller.php的新文件class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
//get the language from the cookie if its set and use it on the view
if (!isset($_COOKIE["lang"]))
{
$this->session->set_userdata('lang', 'en');
}
else
{
if ($_COOKIE["lang"] == "en") $this->session->set_userdata('lang', 'en');
if ($_COOKIE["lang"] == "ru") $this->session->set_userdata('lang', 'ru');
}
}
}
然后在您的应用程序上为每个控制器扩展MY_Controller。
class Frontpage extends MY_Controller
答案 1 :(得分:0)
有时在codeigniter中,Cookie不在同一页面上。