dede showmsg如何实现0延时设置?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

“0延时”跳转通常指的是用户看到提示信息后,不等待任何时间,立即或几乎是立即进行跳转,这可以通过修改 showmsg.php 文件来实现。

dede showmsg 0延时设置
(图片来源网络,侵删)

核心原理

showmsg.php 页面的跳转功能是通过 JavaScript 的 setTimeout() 函数实现的。setTimeout() 会设置一个定时器,在指定的毫秒数后执行跳转代码,要实现“0延时”,我们只需要将这个定时器的延时时间设置为 0 即可。


直接修改 showmsg.php 文件 (最直接、最彻底的方法)

这是最常用且最有效的方法,它会作用于所有使用 ShowMsg() 函数的地方。

  1. 找到文件 登录你的网站后台,通过 FTP 或主机文件管理器,找到并打开以下文件: /include/common.func.php

    注意:有些版本的 DedeCMS 可能会将 showmsg 相关的代码直接放在这个公共函数文件里。

    dede showmsg 0延时设置
    (图片来源网络,侵删)
  2. 定位函数代码common.func.php 文件中,搜索 function ShowMsg 关键字,找到 ShowMsg() 函数的定义,它看起来通常是这样的:

    /**
     * 通用提示信息跳转
     *
     * @param string $msg      提示信息
     * @param string $gourl    跳转地址
     * @param int    $ddelay   跳转等待时间,单位:秒
     * @param string $gotype   跳转方式 (0:header, 1:javascript)
     * @return void
     */
    function ShowMsg($msg, $gourl, $ddelay = 0, $gotype = 0)
    {
        if (emptyempty($gourl))
        {
            $gourl = "javascript:history.go(-1);";
        }
        $htmlhead = "<html>\r\n<head>\r\n<title>提示信息</title>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset={dede:global.cfg_soft_lang/}\" />\r\n";
        $htmlhead .= "<base target='_self' />\r\n";
        $htmlhead .= "<style>body{font-size:12px;font-family:Arial, Helvetica, sans-serif;background-color:#FFFFFF;margin-top:50px;}a{color:#0066CC;text-decoration:underline;}a:hover{color:#000000;text-decoration:none;}</style>\r\n";
        $htmlhead .= "</head>\r\n<body>\r\n<center>\r\n<script>\r\n";
        $htmlfoot = "</script>\r\n</center>\r\n</body>\r\n</html>";
        $litime = ($ddelay > 0) ? $ddelay * 1000 : 1000; // 将秒转换为毫秒,默认为1秒
        if ($gotype == 0)
        {
            $htmlhead .= "var pgo, rat, inter, load;\n";
            $htmlhead .= "function JumpUrl(url)\n";
            $htmlhead .= "{\n";
            $htmlhead .= "    location.href=url;\n";
            $htmlhead .= "}\n";
            $htmlhead .= "pgo=0;\n";
            $htmlhead .= "function ShowMsg(msg,url)\n";
            $htmlhead .= "{\n";
            $htmlhead .= "   document.write('<br>'+msg+'<br><br>');\n";
            $htmlhead .= "   document.write('<a href='+url+'>如果你的浏览器没有自动跳转,请点击这里</a><br>');\n";
            $htmlhead .= "   pgo=1;\n";
            $htmlhead .= "   inter = setInterval('JumpUrl(\''+url+'\')',".$litime.");\n";
            $htmlhead .= "}\n";
            $htmlhead .= "document.write('<br><br><b>系统提示:</b><br>'+unescape('".rawurlencode($msg)."')+'<br><br>');\n";
            $htmlhead .= "ShowMsg('".rawurlencode($msg)."','".$gourl."');\n";
            $htmlhead .= "load=1;\n";
            $htmlhead .= "</script>\r\n";
        }
        else
        {
            $htmlhead .= "document.write('<br><br><b>系统提示:</b><br>'.$msg+'<br><br>');\n";
            $htmlhead .= "document.write('<a href='.$gourl.'>如果你的浏览器没有自动跳转,请点击这里</a>');\n";
            $htmlhead .= "setTimeout(\"location.href='".$gourl."'\",".$litime.");\n";
        }
        echo $htmlhead.$htmlfoot;
        exit();
    }
  3. 修改延时时间 在上面的代码中,找到这一行:

    $litime = ($ddelay > 0) ? $ddelay * 1000 : 1000; // 将秒转换为毫秒,默认为1秒

    这里的逻辑是:如果调用 ShowMsg 时传入了 $ddelay 参数(大于0),就使用这个值;否则,默认等待 1000毫秒(即1秒)

    要实现“0延时”,我们需要修改这个默认值,将其改为 0 即可:

    dede showmsg 0延时设置
    (图片来源网络,侵删)
    // 修改前
    $litime = ($ddelay > 0) ? $ddelay * 1000 : 1000;
    // 修改后 (实现0延时)
    $litime = ($ddelay > 0) ? $ddelay * 1000 : 0;
  4. 保存文件 保存修改后的 common.func.php 文件。

效果: 无论你在哪里调用 ShowMsg() 函数,如果没有明确指定 $ddelay 参数,页面将不会等待,直接执行跳转。


在调用 ShowMsg 时指定延时为 0 (灵活控制)

如果你只是想让某些特定页面实现0延时跳转,而不是全局修改,可以在调用 ShowMsg() 函数时,将第三个参数 $ddelay 设置为 0

在某个PHP处理文件中,你可能会这样写:

// 假设这是你的处理逻辑
if (操作成功) {
    ShowMsg('操作成功!', 'success.php', 3); // 等待3秒后跳转
} else {
    ShowMsg('操作失败!', 'error.php', 0); // 立即跳转,0延时
}

在这种情况下,只有“操作失败”的提示会立即跳转,而“操作成功”的提示仍会等待3秒。


纯前端修改 (不推荐,仅作了解)

这种方法不修改PHP文件,而是通过浏览器控制台临时生效,刷新页面后失效,不适用于生产环境。

  1. 在浏览器中打开一个使用 ShowMsg 的页面。
  2. F12 打开开发者工具,切换到“控制台” (Console) 标签页。
  3. 在控制台中输入以下代码并回车:
    // 找到并清除所有正在等待的定时器
    for (let i = 1; i < 1000; i++) {
        clearInterval(i);
        clearTimeout(i);
    }
    // 强制页面跳转到首页
    window.location.href = "/";

    这会粗暴地中断所有等待并跳转,但会破坏页面原有的提示信息。

总结与建议

方法 优点 缺点 适用场景
修改 common.func.php 一劳永逸,全局生效,代码干净 需要修改核心文件,升级时可能被覆盖 强烈推荐,适用于绝大多数需要全局0延时的场景。
调用时传参 灵活,不影响其他地方 需要在每个调用点手动修改,容易遗漏 适用于只需要在特定几个地方实现0延时的场景。
纯前端修改 无需修改文件,快速临时测试 破坏页面体验,刷新即失效,不专业 仅用于临时调试或紧急修复,不推荐正式使用。

最佳实践: 对于绝大多数情况,推荐使用方法一,即修改 include/common.func.php 文件中的 $litime 默认值为 0,这样设置后,整个网站的提示信息跳转都会变得非常迅速,用户体验更好。

注意: 修改核心文件前,务必备份原文件,以防升级或操作失误导致网站出现问题。

-- 展开阅读全文 --
头像
织梦 dede_fieldshash 作用是什么?
« 上一篇 2025-12-11
dede global.cfg与dz配置冲突如何解决?
下一篇 » 2025-12-11

相关文章

取消
微信二维码
支付宝二维码

目录[+]