dedecms学习笔记(1)--ShowMsg()

dede后台有一个写好的信息提示方法 ShowMsg()。它根据传参的不同来显示不同的提示信息,也会进行相应的界面链接跳转。

方法如下:

/**
 *  短消息函数,可以在某个动作处理后友好的提示信息
 *
 * @param     string  $msg      消息提示信息
 * @param     string  $gourl    跳转地址
 * @param     int     $onlymsg  仅显示信息
 * @param     int     $limittime  限制时间
 * @return    void
 */
function ShowMsg($msg, $gourl, $onlymsg=0, $limittime=0)
{  global $dsql;
    if(empty($GLOBALS['cfg_plus_dir'])) $GLOBALS['cfg_plus_dir'] = '..';

    $htmlhead  = "<html>\r\n
                  <head>\r\n
                  <title>DedeCMS提示信息</title>\r\n
                  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />\r\n
                  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\r\n
                  <meta name=\"renderer\" content=\"webkit\">\r\n<meta http-equiv=\"Cache-Control\" content=\"no-siteapp\" />";
    $htmlhead .= "<base target='_self'/>\r\n
                <style>div{line-height:160%;}</style></head>\r\n
                <body leftmargin='0' topmargin='0' bgcolor='#FFFFFF'>".(isset($GLOBALS['ucsynlogin']) ? $GLOBALS['ucsynlogin'] : '')."\r\n<center>\r\n<script>\r\n";
    $htmlfoot  = "</script>\r\n</center>\r\n</body>\r\n</html>\r\n";

    $litime = ($limittime==0 ? 1000 : $limittime);//时间限制 默认是 1s
    $func = '';
  //返回上一级界面
    if($gourl=='-1')
    {
        if($limittime==0) $litime = 5000;
        $gourl = "javascript:history.go(-1);";
    }
    //无跳转地址  只是显示提示信息 使用 js 弹框显示
    if($gourl=='' || $onlymsg==1)
    {
        $msg = "<script>alert(\"".str_replace("\"","“",$msg)."\");</script>";
    }
    else
    {
        //当网址为:close::objname 时, 关闭父框架的id=objname元素  task_do.php 任务文件里面会有这个操作
        if(preg_match('/close::/',$gourl))
        {
            $tgobj = trim(preg_replace('/close::/', '', $gourl));
            $gourl = 'javascript:;';
            $func .= "window.parent.document.getElementById('{$tgobj}').style.display='none';\r\n";
        }

        $func .= " var pgo=0; function JumpUrl(){ if(pgo==0){ location='$gourl'; pgo=1; } }\r\n";
        $rmsg = $func;
        $rmsg .= "document.write(\"<br /><div style='width:450px;padding:0px;border:1px solid #DADADA;'>";
        $rmsg .= "<div style='padding:6px;font-size:12px;border-bottom:1px solid #DADADA;background:#DBEEBD url({$GLOBALS['cfg_plus_dir']}/img/wbg.gif)';'><b>DedeCMS 提示信息!</b></div>\");\r\n";
        $rmsg .= "document.write(\"<div style='height:130px;font-size:10pt;background:#ffffff'><br />\");\r\n";
        $rmsg .= "document.write(\"".str_replace("\"","“",$msg)."\");\r\n";
        $rmsg .= "document.write(\"";

        if($onlymsg==0)
        {    //存在跳转的地址URL
            if( $gourl != 'javascript:;' && $gourl != '')
            {
                $rmsg .= "<br /><a href='{$gourl}'>如果你的浏览器没反应,请点击这里...</a>";
                $rmsg .= "<br/></div>\");\r\n";
                $rmsg .= "setTimeout('JumpUrl()',$litime);";
            }
            else
            {
                $rmsg .= "<br/></div>\");\r\n";
            }
        }
        else
        {
            $rmsg .= "<br/><br/></div>\");\r\n";
        }
        $msg  = $htmlhead.$rmsg.$htmlfoot;
    }

    echo $msg;
}

这个函数是在include/common.func.php里面。  基本上在后台每一个php文件里面都有调用。

但是存在一个问题就是。html界面提交表单之后。返回的信息显示(showmsg()函数返回的信息)。加载到了当前界面的iframe里面。

界面默认有个iframe:

在点击开始执行之后 ,php里面返回的信息提示都会在iframe里面显示:

 

 感觉到很奇怪 为啥呢。查看界面源码才知道 :

关键是在于form表单的target属性,这是关于它的介绍:

也是说 ,表单提交的界面 返回来的信息是在那个位置打开 ,新窗口还是父窗口还是指定框架。也就是解释清楚为什么返回的消息会加载到界面里面的iframe

posted @ 2017-11-22 10:40  逗逗ilove  阅读(404)  评论(0编辑  收藏  举报