在 Yii 框架中实现 flash 消息
Implementing flash messages in Yii framework
这是我的控制器的功能:
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
和 class .info
是谁?有人可以给我举个例子吗?或 link 演示?
谢谢.
这是一个基于 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>
下面有两种闪现消息的实现,我们可以使用toastr通知或正常的bootstrap闪现消息实现来显示消息。
如果您想将消息显示为 toastr 通知,请将这行代码作为您的控制器操作。
YII::app()->user->setFlash('toastr.error', 'An Error occured when saving');
如果您想使用普通的 bootstrap 闪现消息,请改用。
YII::app()->user->setFlash('alert alert-danger', 'An Error occured.');
为此,您必须按如下方式处理主视图布局上的即显消息。很可能就在 <?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";
}
}
}
}
这是我的控制器的功能:
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
和 class .info
是谁?有人可以给我举个例子吗?或 link 演示?
谢谢.
这是一个基于 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>
下面有两种闪现消息的实现,我们可以使用toastr通知或正常的bootstrap闪现消息实现来显示消息。
如果您想将消息显示为 toastr 通知,请将这行代码作为您的控制器操作。
YII::app()->user->setFlash('toastr.error', 'An Error occured when saving');
如果您想使用普通的 bootstrap 闪现消息,请改用。
YII::app()->user->setFlash('alert alert-danger', 'An Error occured.');
为此,您必须按如下方式处理主视图布局上的即显消息。很可能就在 <?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";
}
}
}
}