2014-11-03 120 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組模板。