2012-05-31 71 views
0

請參考我的代碼,當用戶點擊en按鈕時,內容將改爲英文,點擊tw按鈕時,內容將改爲中文。用Yii更新AJAX多語言內容

但是,每當用戶單擊entw按鈕時,頁面將被刷新。我想問一下在這種情況下如何實現AJAX內容更新?

的結果是,當用戶單擊entw按鈕,頁面將無法刷新改變內容的語言。

感謝

我指的Yii文檔here,但似乎它不適合我的情況

C:\wamp\www\website\protected\views\site\index.php

<?php 
$lang = isset($_GET["lang"]) ? $_GET["lang"] : "en_uk"; 
$lang = $lang == "en" ? "en_uk" : "zh_tw"; 

Yii::app()->setLanguage($lang); 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> 
    <input type="submit" value="en" name="lang" /> 
    <input type="submit" value="tw" name="lang" /> 
</form> 

<div class="main"> 
    <?php echo Yii::t(Yii::app()->controller->id, "Causeway Bay"); ?> 
</div> 

回答

2

最佳做法是重新加載頁面,在這些情況下,因爲通常你必須更新太多,以至於不值得。

也就是說,CHtml的ajaxSubmitButton是最簡單的方法來實現這一點,因爲你可以很容易地映射你的通話的每個事件。它看起來像這樣:

<?php 
echo CHtml::ajaxSubmitButton('en', CHtml::normalizeUrl(array('site/changeLanguage')), 
array(
    'error'=>'js:function(){ 
     alert("error"); 
    }', 
    //if you add a return false in this, it will not submit. 
    'beforeSend'=>'js:function(){ 
     alert("beforeSend");            
    }', 
    'success'=>'js:function(data){ 
     alert("success, data from server: "+data); 
    }', 
    'complete'=>'js:function(){ 
     alert("complete"); 
    }', 
    //'update'=>'#where_to_put_the_response', 
) 
); 
?> 

當然你不必使用每個參數。更新參數可以立即更新HTML標籤。

編輯: 如果您使用控制器的renderPartial方法,例如在您的站點控制器中,如果您有對索引負責的操作,則可以輕鬆完成此操作。

public function actionIndex(){ 
    //get variables, etc 


    if(Yii::app()->request->isAjaxRequest) { 
     $lang = $_POST['nameOfSubmit']; 

    }else { 
     //... 
    } 
    //if the 3rd parameter is true, the method returns the generated HTML to a variable 
    $page = $this->renderPartial('_page', array(/*parameters*/), true); 
    echo $page; 
} 

,然後在您的視圖文件,你可以簡單地有

<?php echo CHtml::ajaxSubmitButton('en', CHtml::normalizeUrl(array('site/index')), 
array('update'=>'#content_div',));?> 

<?php echo CHtml::ajaxSubmitButton('tw', CHtml::normalizeUrl(array('site/index')), 
    array('update'=>'#content_div',));?> 
+0

感謝您的回答,那麼你的建議是更新/通過更換相關的HTML標籤AJAX? –

+0

如果你編寫一個部分渲染頁面(或頁面的大部分)的動作,那麼是的,它可以用ajax很容易地完成。我會用一個例子來更新我的迴應。 – adamors

+0

+1代碼示例。另外,你能解釋一下CHtml :: normalizeUrl的用法嗎?謝謝 –