文档章节

Yii学习笔记:利用setFlash和runController打造个性化的提示信息页面

吾爱
 吾爱
发布于 2013/12/28 18:13
字数 721
阅读 478
收藏 2

在实现Yii::success()这样的调用方式之前,你可能需要阅读我的这篇博文:

Yii学习笔记:扩展YiiBase入口类

之后请继续往下看:

首先我们在yii.php的Yii类里面添加两个方法:

/**
     * 成功提示
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     */
    static function success($msg="",$jumpurl="",$wait=3){
        self::_jump($msg, $jumpurl, $wait, 1);
    }
    /**
     * 错误提示
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     */
    static function error($msg="",$jumpurl="",$wait=3){
        self::_jump($msg, $jumpurl, $wait, 0);
    }
    /**
     * 最终跳转处理
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     * @param int $type 消息类型 0或1
     */
    static private function _jump($msg="",$jumpurl="",$wait=3,$type=0){
        $info = array(
            'msg' => $msg,
            'jumpurl' => $jumpurl,
            'wait' => $wait,
            'type' => $type
        );
        Yii::app()->user->setFlash('showmessage',$info);
        Yii::app()->runController("Site/ShowMessage");
    }



调用的时候可以指定 消息内容、跳转地址、停留时间。

继续,在应用默认的 SiteController 中添加如下方法:

        /**
         * 提示信息
         */
        public function actionShowMessage(){
            $data = Yii::app()->user->getFlash('showmessage');//flash中读取提示信息
            if(empty($data) || !is_array($data) || !isset($data['msg']) || $data['msg']==""){
                Yii::app()->end();
            }
            if(!isset($data['wait'])){
               $data['wait'] = 3;
            }
            if(!isset($data['type'])){
               $data['type'] = 1;
            }
            $data['title'] = ($data['type']==1) ? "提示信息" : "错误信息";
            if(!isset($data['jumpurl']) || empty($data['jumpurl'])){
                if($data['type']==1){
                    $data['jumpurl']=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:"javascript:window.close();";
                }else{
                    $data['jumpurl'] = "javascript:history.back(-1);";
                }
            }
            $this->renderPartial("show_message",$data);
        }



在其对应的视图目录中添加视图文件 show_message.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>跳转提示</title>
<style type="text/css">
*{ padding: 0; margin: 0; }
body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; }
.system-message{ width:500px;height:100px; margin:auto;border:6px solid #999;text-align:center; position:relative;top:50px;}
.system-message legend{font-size:24px;font-weight:bold;color:#999;margin:auto;width:100px;}
.system-message h1{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; }
.system-message .jump{ padding-right:10px;height:25px;line-height:25px;font-size:14px;position:absolute;bottom:0px;left:0px;background-color:#e6e6e1 ; display:block;width:490px;text-align:right;}
.system-message .jump a{ color: #333;}
.system-message .success,.system-message .error{ line-height: 1.8em; font-size: 15px }
.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}
</style>
</head>
<body>
<fieldset class="system-message">
    <legend><?php echo $title;?></legend>
    <div style="text-align:left;padding-left:10px;height:75px;width:490px;  ">
        
        <?php if($type==1):?>
        <p class="success">恭喜^_^!~<?php echo($msg); ?></p>
        <?php else:?>
        <p class="error">Sorry!~<?php echo($msg); ?></p>
        <?php endif;?>
        <p class="detail"></p>
        
    </div>
    <p class="jump">
        页面自动 <a id="href" href="<?php echo($jumpurl); ?>">跳转</a> 等待时间: <b id="wait"><?php echo($wait); ?></b>
    </p>
</fieldset>
<script type="text/javascript">
    
(function(){
var wait = document.getElementById('wait'),href = document.getElementById('href').href;
totaltime=parseInt(wait.innerHTML);
var interval = setInterval(function(){
	var time = --totaltime;
        wait.innerHTML=""+time;
	if(time === 0) {
		location.href = href;
		clearInterval(interval);
	};
}, 1000);
})();

</script>
</body>
</html>



到这里就完成了。

实例:

<?php
class PublicController extends CustomController {
    public function actionLogin(){
        $this->title = "商户后台登录";
        if(Yii::app()->request->isPostRequest){
            $identify = new CustomIdentity("admin","passwd");
            if($identify->authenticate() == true){
                Yii:app()->user->login($identify);
            }else{
                Yii::error("用户名或密码错误");
            }
        }else{
            $this->render('login');
        }
    }
}



效果图:


文章原创,转载请注明出处

© 著作权归作者所有

共有 人打赏支持
吾爱
粉丝 143
博文 266
码字总数 90328
作品 0
后端工程师
私信 提问
图片导入的实现

参考网页:+ https://github.com/bupy7/yii2-gridify-view+ http://demos.krajee.com/dialog 设想 用户点击朋友圈,可以选择更改头像。弹出对话框,选择头像。为简便,不增加剪切等功能,只提...

不避风云
2016/10/15
34
0
Yii学习笔记:进一步简化,提示信息跳转页面

在Yii类里加三个方法,Yii类是初始化的那个类,可以看我之前的博文《扩展YiiBase类》,主要目的是为了能够使用Yii::success() Yii::error()这样的调用方式。 废话不多说,在Yii类中加三个方法...

吾爱
2013/12/28
0
2
实用的Laravel Debug调试工具

转载请注明: 转载自Yuansir-web菜鸟 | LAMP学习笔记 本文链接地址: 实用的Laravel Debug调试工具 主要推荐laravel几个适合开发调试用的工具 1.Clockwork 首先Chrome 插件 Clockwork 安装 Co...

Yuansir
2015/01/19
0
2
yii2有没有类似于thinkphp里面$this->error()的方法?

就是想问下有没有一个框架自带的方法能直接提示错误信息的,类似于yii1的setFlash和getFlash(我记得是这个方法,我也没用过,嘿嘿)或者ThinkPHP里的$this->error(); 度娘了一番,无果~...

Outshine
2014/09/14
2.2K
7
yii项目做负载均衡时请注意验证码session共享问题

众所周知,做负载均衡的时候,必须解决两个棘手的问题,一是session会话共享问题,二是上传文件同步问题,今天给大家分享一个我遇到过的问题,yii项目登录功能验证码无法同步的解决办法。 本...

ruiorz
2014/06/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
3
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
5
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
5
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部