这是我的控制器的功能:
public function actionUser(){
Yii::app()->user->setFlash('success', "Data1 saved!");
....
}
在视图中如果我写这个:
<?php echo Yii::app()->user->getFlash('success'); ?>
它有效,但我想出现在内容之上的某个地方,然后在几秒后自动淡出。我是从here
尝试过的<?php
Yii::app()->clientScript->registerScript(
'myHideEffect',
'$(".info").animate({opacity: 1.0}, 3000).fadeOut("slow");',
CClientScript::POS_READY
);
?>
但我不明白谁是myHideEffect
和班级.info
?有人能举个例子吗?或演示的链接?
谢谢。
答案 0 :(得分:2)
下面有两个flash消息实现,我们可以使用toastr通知或正常的bootstrap flash消息实现来显示消息。
如果您希望显示消息为toastr通知,请将此行代码作为控制器操作。
YII::app()->user->setFlash('toastr.error', 'An Error occured when saving');
如果您想使用正常的bootstrap flash消息,请使用。
YII::app()->user->setFlash('alert alert-danger', 'An Error occured.');
要使其工作,您必须在主视图布局上处理Flash消息,如下所示。最有可能在<?php echo $content; ?>
/** Takes care of the flashmessages **/
$flashMessages = Yii::app()->user->getFlashes();
if ($flashMessages) {
foreach ($flashMessages as $key => $message) {
$pattern = '/\s/';
$match = preg_match($pattern, $key);/* This checks the type of error message to use if the error $key is just one word then use toastr notification */
if ($match == 0) {
Yii::app()->clientScript->registerScript(
'myNotifyEffect', $key . '("' . $message . '");', CClientScript::POS_READY
);
} elseif ($match > 0) {
if ($key != 'alert alert') {
Yii::app()->clientScript->registerScript(
'myHideEffect', '$(".' . $key . '").animate({opacity: 1.0}, 5000).fadeOut("slow");', CClientScript::POS_READY
);
echo '<div class= "' . $key . ' alert-bold-border square fade in alert-dismissable">' . '<button class="close" data-dismiss="alert" type="button">×</button>' . $message . "</div>\n";
} else {
echo '<div class="' . $key . ' alert-bold-border square fade in alert-dismissable">' . '<button class="close" data-dismiss="alert" type="button">×</button>' . $message . "</div>\n";
}
}
}
}
答案 1 :(得分:0)
这是一个基于jquery的问题,而不是基于yii的问题。不过试试这个:
<?php if(Yii::app()->user->hasFlash("success")): ?>
<div id="message">
<?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php endif; ?>
...
<script>
$(document).ready(function() {
setTimeout(function() {
$('#message').fadeOut('slow');
}, 3000);
});
</script>