dede cms提示信息改为弹窗

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

layer 是一个功能强大、使用简单且广受欢迎的 Web 弹层组件,非常适合用来替换 DedeCMS 的原生提示。

dede cms提示信息改为弹窗
(图片来源网络,侵删)

下面我将为您提供两种实现方案:

  1. 推荐方案:使用 layer 库(效果最好,最常用)
  2. 备选方案:使用 alert 弹窗(最简单,但体验较差)

使用 layer 库(强烈推荐)

layer 可以实现美观的模态框、加载层、提示层等,用户体验远超原生 alert

第 1 步:引入 layer

您需要将 layer 库的 CSS 和 JS 文件放到您的模板目录中,然后在网站的全局头部文件中引入它们。

  1. 下载 layer

    dede cms提示信息改为弹窗
    (图片来源网络,侵删)
    • 访问官方网站:https://layer.layui.com/
    • 点击“下载”按钮,下载完整版。
    • 解压后,你会得到一个 layui 文件夹,里面包含 cssjs 文件夹。
  2. 部署到您的网站

    • layui 文件夹上传到您的 DedeCMS 模板目录下,/templets/default/
    • 现在您的路径应该是 /templets/default/layui/
  3. 修改全局头部文件 head.htm

    • 登录 DedeCMS 后台 -> 模板 -> 默认模板管理 -> 找到并打开您正在使用的模板目录下的 head.htm 文件。
    • <head></head> 标签之间,添加以下代码来引入 layer 的 CSS 和 JS 文件:
    <!-- 在 head.htm 中添加 -->
    <link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/layui/css/layui.css" media="all">
    <script src="{dede:global.cfg_templets_skin/}/layui/layui.js"></script>
    • {dede:global.cfg_templets_skin/} 是 DedeCMS 的模板路径标签,会自动替换成您的模板目录,如 /templets/default

第 2 步:修改 PHP 代码以调用 layer

DedeCMS 的提示信息通常位于 /include/common.func.php 文件中的 ShowMsg() 函数,我们需要修改这个函数,让它不再输出 HTML 页面,而是执行一段 JavaScript 代码来调用 layer

  1. 定位并编辑 ShowMsg() 函数

    dede cms提示信息改为弹窗
    (图片来源网络,侵删)
    • 使用 FTP 或文件管理器,打开 /include/common.func.php 文件。
    • 找到 function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0) 这个函数。
  2. 替换函数内容

    • 将整个 ShowMsg() 函数的代码替换为下面这个新版本,这个版本会构建一个 JavaScript 字符串,并用 layer.msg() 来显示提示。
    /**
     * 通用提示信息函数 (修改版,支持layer弹窗)
     *
     * @param string $msg 提示信息
     * @param string $gourl 跳转地址
     * @param int $onlymsg 是否只显示信息
     * @param int $limittime 跳转等待时间
     * @return void
     */
    function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0)
    {
        // 如果只显示信息,不跳转,则使用layer.msg
        if ($onlymsg == 1) {
            $js = "
            layui.use('layer', function(){
                var layer = layui.layer;
                layer.msg('" . $msg . "', {icon: 1});
            });";
            echo "<script>" . $js . "</script>";
            exit();
        }
        // 构建JS代码
        $func = "function Jumping(){
            location.href='" . $gourl . "';
        }";
        $html = "<!DOCTYPE html>
        <html>
        <head>
        <meta charset=\"utf-8\">
        <title>提示信息</title>
        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">
        <style>
        body{margin:0;font-family:微软雅黑, Arial;font-size:16px;background:#efefef;}
        .msgbox{width:90%;max-width:600px;margin:10% auto;background:#fff;padding:30px;border-radius:5px;box-shadow: 0 0 10px rgba(0,0,0,0.1);text-align:center;}
        .msgbox h2{font-size:24px;margin-bottom:15px;}
        .msgbox p{font-size:16px;margin-bottom:20px;color:#666;}
        .msgbox .btn{display:inline-block;margin-top:10px;padding:8px 30px;background:#1E9FFF;color:#fff;border-radius:3px;text-decoration:none;}
        </style>
        </head>
        <body>
        <div class=\"msgbox\">
            <h2>系统提示</h2>
            <p>" . $msg . "</p>
            <a href='" . $gourl . "' class=\"btn\">页面即将自动跳转,点这里立即跳转...</a>
        </div>";
        // 根据消息类型设置layer图标
        // 这里简单判断,可以根据需要扩展,例如判断$msg中是否包含“错误”、“失败”等字样
        $icon = 1; // 默认成功图标
        if (stripos($msg, '错误') !== false || stripos($msg, '失败') !== false || stripos($msg, 'err') !== false) {
            $icon = 2; // 错误图标
        } elseif (stripos($msg, '警告') !== false || stripos($msg, '注意') !== false) {
            $icon = 7; // 疑问/警告图标
        }
        $js = "
        layui.use('layer', function(){
            var layer = layui.layer;
            layer.msg('" . $msg . "', {
                icon: " . $icon . ",
                time: " . ($limittime * 1000) . ",
                end: function(){
                    Jumping();
                }
            });
        });
        " . $func . "
        setTimeout('Jumping()', " . ($limittime * 1000) . ");";
        $html .= "<script>" . $js . "</script>";
        $html .= "</body></html>";
        echo $html;
        exit();
    }
    • 代码说明
      • 这个新版本的 ShowMsg() 会输出一个包含 layer 调用代码的完整 HTML 页面。
      • layer.msg() 用于显示提示信息。
      • icon 参数用于显示不同的图标(1:对勾, 2:叉, 7:感叹号)。
      • time 参数设置了自动关闭的时间(毫秒)。
      • end 回调函数在弹窗关闭后执行,进行页面跳转。
      • 同时保留了 setTimeout 作为兼容和备用方案。
  3. (可选)修改成功/失败提示的调用

    • 在 DedeCMS 的其他 PHP 文件中,调用 ShowMsg 时,可以传递 $onlymsg = 1 来实现纯弹窗不跳转的效果。
    • 在某个操作成功后,你只想显示一个成功提示,不希望页面跳转,可以将代码从:
      ShowMsg('操作成功!', '-1');

      修改为:

      ShowMsg('操作成功!', 'javascript:;', 1, 3); // 提示信息,跳转地址为空,只显示信息,3秒后自动关闭

当 DedeCMS 执行任何包含 ShowMsg() 的操作时,就会弹出 layer 风格的提示框,而不是那个老旧的 HTML 页面了。


使用 alert 弹窗(最简单)

如果你只是需要一个最简单的弹窗,不想引入 layer 这样的库,可以直接使用 alert

第 1 步:修改 ShowMsg() 函数

同样,打开 /include/common.func.php 文件,找到 ShowMsg() 函数,将其内容替换为以下代码:

/**
 * 通用提示信息函数 (修改版,支持alert弹窗)
 *
 * @param string $msg 提示信息
 * @param string $gourl 跳转地址
 * @param int $onlymsg 是否只显示信息
 * @param int $limittime 跳转等待时间
 * @return void
 */
function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0)
{
    if ($onlymsg == 1) {
        // 只显示提示,不跳转
        echo "<script>alert('" . $msg . "');</script>";
        exit();
    }
    // 显示提示并跳转
    $func = "function Jumping(){
        location.href='" . $gourl . "';
    }";
    $js = "alert('" . $msg . "');";
    $js .= "setTimeout('Jumping()', " . ($limittime * 1000) . ");";
    echo "<script>" . $js . "</script>";
    exit();
}

第 2 步:处理 header("location: ...") 的情况

DedeCMS 有些地方直接使用 PHP 的 header 函数进行跳转,这种情况下不会经过 ShowMsg 函数,为了让这些地方也弹出提示,你需要:

  1. 在网站的全局头部文件 head.htm 中添加以下 JavaScript 代码

    <script>
    // 拦截并处理 location.href 跳转,使其先弹出提示
    (function() {
        var originalLocation = window.location;
        window.location = {
            href: function(url) {
                if (url && url !== originalLocation.href) {
                    // 这里可以根据URL判断是否需要弹出提示
                    // 如果URL包含 'msg=' 参数,则弹出提示
                    var msg = url.match(/msg=([^&]*)/);
                    if (msg) {
                        alert(decodeURIComponent(msg[1]));
                        window.location.href = url.split('?')[0]; // 跳转到不包含msg参数的地址
                    } else {
                        window.location.href = url; // 正常跳转
                    }
                }
            }
        };
    })();
    </script>
    • 注意:这种方法比较“hack”,不一定能覆盖所有情况,而且需要你的跳转 URL 中包含提示信息(success.php?msg=操作成功)。强烈推荐方案一
特性 方案一 (layer) 方案二 (alert)
美观度 ,可定制 低,系统原生
用户体验 ,可自动关闭,有图标区分 一般,需手动点击确定
实现复杂度 中等,需引入库并修改函数 简单,只需修改函数
推荐度 ⭐⭐⭐⭐⭐ (强烈推荐) ⭐⭐ (仅作为临时或简单需求)

对于绝大多数网站,使用方案一(layer 库)是最佳选择,它能显著提升网站的用户体验和专业度。

-- 展开阅读全文 --
头像
dede无法找到head.htm
« 上一篇 2025-12-23
dede gbk utf8 区别
下一篇 » 2025-12-23

相关文章

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

目录[+]