请参阅下面的代码,当用户点击en
按钮时,内容将更改为英语,同时点击tw
按钮,内容将更改为中文。
但是,每次用户点击en
或tw
按钮时,页面都会刷新。我想问一下如何在这种情况下实现AJAX内容更新?
结果是,当用户点击en
或tw
按钮时,将不会刷新页面以更改内容语言。
由于
我参考了Yii docs 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>
答案 0 :(得分: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',
)
);
?>
当然,您不必使用每个参数。 update参数可以立即更新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',));?>