2015-11-04 66 views
2

我想设置标题,meta描述和关键字动态地使用语言特性象下面这样:笨的语言数组动态文本

$lang['/contact_title'] = "Contact Us"; 
$lang['/contact_desc'] = "Description for contact us page"; 
$lang['/contact_keywords'] = "key, words"; 

,并在头文件中我使用它象下面这样:

<title><?echo $this->lang->line($_SERVER['PATH_INFO']."_title");?></title> 
<meta name="description" content="<?echo $this->lang->line($_SERVER['PATH_INFO']."_desc");?>"> 

到目前为止,这工作得很好,但我如何才能使它适用于动态标题? Regex虽然是我第一次想到,但不幸的是,它不适用于像我已经尝试过的那样的语言类,因为它适用于路由。

我使用语言课的原因是,它的巨大列表中有很多控制器,我们将一次又一次地更改这个seo关键字和标题。所以为了避免这种麻烦,我希望所有的seo细节都在一个地方。所以在未来,如果我们想进行更改,而不是访问所有控制器,我只能对一个文件进行更改。

任何人都可以建议我一个想法/解决方案,我可以如何使它与动态标题一起工作?

+0

任何一个在那里? –

+0

“动态标题”究竟意味着什么? – sotoz

回答

0

尝试这个

在控制器的方法补充一点:

$data['contact_title'] = "Contact Us"; 
$data['contact_desc'] = "Description for contact us page"; 
$data['contact_keywords'] = "key, words"; 

$this->load->view('header',$data); 

终于在header.php拨打:

<title><?php echo $contact_title; ?></title> 
<meta name="description" content="<?php echo $contact_desc; ?>"> 
<meta name="keywords" content="<?php echo $contact_keywords; ?>"> 
+0

我使用语言类的原因是,它的巨大列表中有很多控制器,我们将一次又一次地更改这个seo关键字和标题。所以为了避免这种麻烦,我希望所有的seo细节都在一个地方。所以在未来,如果我们想进行更改,而不是访问所有控制器,我只能对一个文件进行更改。 –

0

你不应该使用任何正则表达式的存在。所有数据都应该由控制器传递,这就是MVC的工作原理。所以,根据你的情况,你应该在控制器中创建变量并传递它来查看。你可以这样说:

$lang['page_title'] = 'Home page'; 

和切换语言后(默认情况下它是在你的config文件中定义),您可以访问它:

在你的语言文件

(例如英语目录内)通过:

lang('page_title'); 

所以在你的控制器代码应该是这样的:

$data = array(
    'page_title' => lang('page_title') 
); 

$this->load->view('view_name', $data); 

// for usage in the view 
<head> 
    <title><?= $page_title ?></title> 
</head> 

因此使用codeigniter $this->session->userdata('lang');它将返回当前选定的lang。您可以更改它:

$this->session->set_userdata('lang','germany'); 

然后系统会从您的应用程序/ language/germany /文件夹中读取文件。不要忘记首先加载语言 - $this->lang->load('lang_file', $this->session->userdata('lang'))