2014-11-03 60 views
0

我有一个观点:如何把一个变量的笨temaplate

public function index() 
{ 

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
    if ($lang == "fr"){ 
     $this->smarty->display('excel.tpl');  
    } 
    else{ 
     $this->smarty->display('excel_eng.tpl'); 
    } 
} 

我的模板:

<div class="fullscreen background" id="landing-page-image"> 
    {include 'components/menu.tpl'} 
</div> 

我想更换取决于语言的组件

如何做它?

回答

1

你可以这样做:

excel.tpl:

<div class="fullscreen background" id="landing-page-image"> 
    {include 'components/menu.tpl'} 
</div> 

excel_eng.tpl:

<div class="fullscreen background" id="landing-page-image"> 
    {include 'components/menu_eng.tpl'} 
</div> 

编辑

PHP代码:

... 

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 

$smarty->assign('lang' , $lang); // passing lang to templates 

.... 

HTML代码:

<div class="fullscreen background" id="landing-page-image"> 
    {include 'components/menu_$lang.tpl'} 
</div> 
+0

如何把变量放在{include'components/variable here'}? – Mark 2014-11-03 12:43:33

+0

为什么从一开始就使用不同的模板时传递一个var? – akmozo 2014-11-03 12:49:47

+0

我编辑了我的答案,将var传递给模板。 – akmozo 2014-11-03 13:04:49

1

这里的第一个选项是加载语言变量,对他们有共同的模板:

$lang = 'en';//your default language 
$available_langs = array('en', 'fr'); //your set of languages 
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
if (in_array($browser_lang, $available_langs)) { 
    $lang = $browser_lang; //set language according to browser 
} 
//assumed you keep your language variables in /app/language/lang_en.php 
require_once(APPPATH.'language/lang_'.$lang.'.php'); 
$this->smarty->assign('lang_vars', $lang_vars); 

lang_en.php的示例:

<?php 
$lang_vars = array(
'some_var_1'=>'Some string', 
'some_var_2'=>'Another string', 
); 

示例如何.tpl文件中使用:

<div> 
{$lang_vars.some_var_1} 
</div> 

2.这里的另一种选择是基于同样的方法加载不同的模板,当你发现语言:

... 
$this->smarty->display('some_template_'.$lang.'.tpl'); 

但这被认为是不好的做法,因为您需要支持和更改2组模板。