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

(图片来源网络,侵删)
下面我将为您提供两种实现方案:
- 推荐方案:使用
layer库(效果最好,最常用) - 备选方案:使用
alert弹窗(最简单,但体验较差)
使用 layer 库(强烈推荐)
layer 可以实现美观的模态框、加载层、提示层等,用户体验远超原生 alert。
第 1 步:引入 layer 库
您需要将 layer 库的 CSS 和 JS 文件放到您的模板目录中,然后在网站的全局头部文件中引入它们。
-
下载
layer库
(图片来源网络,侵删)- 访问官方网站:https://layer.layui.com/
- 点击“下载”按钮,下载完整版。
- 解压后,你会得到一个
layui文件夹,里面包含css和js文件夹。
-
部署到您的网站
- 将
layui文件夹上传到您的 DedeCMS 模板目录下,/templets/default/。 - 现在您的路径应该是
/templets/default/layui/。
- 将
-
修改全局头部文件
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。
- 登录 DedeCMS 后台 ->
第 2 步:修改 PHP 代码以调用 layer
DedeCMS 的提示信息通常位于 /include/common.func.php 文件中的 ShowMsg() 函数,我们需要修改这个函数,让它不再输出 HTML 页面,而是执行一段 JavaScript 代码来调用 layer。
-
定位并编辑
ShowMsg()函数
(图片来源网络,侵删)- 使用 FTP 或文件管理器,打开
/include/common.func.php文件。 - 找到
function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0)这个函数。
- 使用 FTP 或文件管理器,打开
-
替换函数内容
- 将整个
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作为兼容和备用方案。
- 这个新版本的
- 将整个
-
(可选)修改成功/失败提示的调用
- 在 DedeCMS 的其他 PHP 文件中,调用
ShowMsg时,可以传递$onlymsg = 1来实现纯弹窗不跳转的效果。 - 在某个操作成功后,你只想显示一个成功提示,不希望页面跳转,可以将代码从:
ShowMsg('操作成功!', '-1');修改为:
ShowMsg('操作成功!', 'javascript:;', 1, 3); // 提示信息,跳转地址为空,只显示信息,3秒后自动关闭
- 在 DedeCMS 的其他 PHP 文件中,调用
当 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 函数,为了让这些地方也弹出提示,你需要:
-
在网站的全局头部文件
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=操作成功)。强烈推荐方案一。
- 注意:这种方法比较“hack”,不一定能覆盖所有情况,而且需要你的跳转 URL 中包含提示信息(
| 特性 | 方案一 (layer) | 方案二 (alert) |
|---|---|---|
| 美观度 | 高,可定制 | 低,系统原生 |
| 用户体验 | 好,可自动关闭,有图标区分 | 一般,需手动点击确定 |
| 实现复杂度 | 中等,需引入库并修改函数 | 简单,只需修改函数 |
| 推荐度 | ⭐⭐⭐⭐⭐ (强烈推荐) | ⭐⭐ (仅作为临时或简单需求) |
对于绝大多数网站,使用方案一(layer 库)是最佳选择,它能显著提升网站的用户体验和专业度。
