帝国CMS7.5一键批量刷新修改教程:后台无需逐个点击刷新
使用帝国CMS 7.5搭建网站时,在后台修改模板、栏目、信息或者其他页面内容后,经常需要重新刷新相关页面。
帝国CMS后台原本提供了清除临时文件、刷新首页、刷新栏目页、刷新内容页面等功能,但这些操作通常需要站长一个一个点击。如果网站栏目较多、内容量较大,反复操作会比较浪费时间。
如果平时经常需要执行这些刷新任务,可以直接修改帝国CMS 7.5 后台的 ChangeData.php 文件,增加一个批量刷新按钮,让系统自动查找页面上的相关刷新操作,并依次在新窗口中执行。

一、修改帝国CMS 7.5后台文件
首先找到帝国CMS 7.5后台文件:
/e/admin/ReHtml/ChangeData.php
修改之前建议先备份原文件。如果帝国CMS后台目录已经修改过名称,则需要根据自己实际的后台目录找到对应的 ReHtml/ChangeData.php 文件。
二、增加批量刷新按钮
在 ChangeData.php 合适的位置加入下面的代码,可以增加两个操作按钮。
<input type="button" value="批量全部刷新(新窗口)" onclick="batchOpenEcmsLinks();" style="margin:5px;background:#0066cc;color:#fff;padding:3px 8px;"> <input type="button" value="重置红色标记" onclick="resetMark();" style="margin:5px;background:#666;color:#fff;padding:3px 8px;">
第一个按钮用于执行批量刷新,第二个按钮用于清除页面上的红色执行标记。
三、加入批量刷新JavaScript代码
然后在页面合适的位置加入下面的 JavaScript 代码。
<script>
window.ecmsTaskList = [];
window.onload = function(){
var selectorArr = [
'a[href*="ecmscom.php?enews=ClearTmpFileData"]',
'a[href*="enews=ReUserpageAll"]',
'a[href*="enews=ReUserlistAll"]',
'a[href*="enews=ReUserjsAll"]',
'input[value="刷新所有专题页"]',
'input[value="刷新首页"]',
'input[value="刷新所有信息栏目页"]',
'input[value="刷新所有信息内容页面"]',
'input[value="批量更新动态页面"]'
];
window.ecmsTaskList = [];
for(var k=0;k<selectorArr.length;k++){
var nodeList = document.querySelectorAll(selectorArr[k]);
for(var m=0;m<nodeList.length;m++){
var el = nodeList[m];
var task = {
el: el,
href: null,
onclick: null,
confirmTip: null
};
if(el.tagName.toLowerCase() === 'a'){
task.href = el.getAttribute('href');
var onc = el.getAttribute('onclick') || '';
var cm = onc.match(/confirm\('([^']+)'\)/);
if(cm){
task.confirmTip = cm[1];
}
}else if(el.type === 'button'){
task.onclick = el.getAttribute('onclick') || '';
}
window.ecmsTaskList.push(task);
}
}
};
function extractUrlFromOnclick(onc){
if(!onc) return null;
var pre = '';
var urlExpr = null;
var wo = onc.match(
/window\.open\s*\(\s*([^,]+),\s*['"]\s*['"]/
);
if(wo){
pre = onc.slice(0, onc.indexOf('window.open'));
urlExpr = wo[1];
}else{
var sh = onc.match(
/self\.location\.href\s*=\s*([^;]+)/
);
if(sh){
pre = onc.slice(0, sh.index);
urlExpr = sh[1];
}
}
if(!urlExpr) return null;
try{
var fn = new Function(
pre + '\nreturn (' + urlExpr + ');'
);
return fn();
}catch(e){
return null;
}
}
function batchOpenEcmsLinks(){
var taskList = window.ecmsTaskList;
if(taskList.length === 0){
alert("未找到目标刷新按钮链接");
return;
}
if(taskList[0].confirmTip){
if(!confirm(taskList[0].confirmTip)){
return false;
}
}
for(var i=0;i<taskList.length;i++){
(function(idx){
setTimeout(function(){
var t = taskList[idx];
var url = t.href
? t.href
: extractUrlFromOnclick(t.onclick);
if(!url) return;
window.open(url, "_blank", "");
t.el.style.color = "#ff0000";
t.el.style.border = "2px solid red";
}, idx * 600);
})(i);
}
}
function resetMark(){
var list = window.ecmsTaskList;
for(var i=0;i<list.length;i++){
var el = list[i].el;
el.style.color = "";
el.style.border = "";
}
}
</script>四、批量刷新功能支持哪些操作
这段代码会自动搜索当前页面中符合条件的帝国CMS刷新操作,包括以下几类任务:
清除临时文件
刷新用户相关页面
刷新用户列表
刷新用户JS
刷新所有专题页
刷新首页
刷新所有信息栏目页
刷新所有信息内容页面
批量更新动态页面
代码使用 querySelectorAll() 查找页面中的所有匹配元素,而不是只获取第一个按钮。因此,如果后台页面存在多个相同类型的刷新操作,也可以加入任务列表。
五、为什么使用新窗口批量刷新
批量执行时,代码会使用 window.open() 将刷新任务依次打开到新窗口。
不同刷新任务之间设置了 600毫秒 的间隔,可以避免在极短时间内同时触发大量后台刷新请求。
setTimeout(function(){
var t = taskList[idx];
var url = t.href
? t.href
: extractUrlFromOnclick(t.onclick);
if(!url) return;
window.open(url, "_blank", "");
}, idx * 600);如果网站数据量比较大,也可以适当增加间隔,例如改成1000毫秒,让每个刷新任务之间间隔1秒。
六、已经执行的任务会自动标红
为了方便查看哪些刷新操作已经被批量执行,代码在打开任务后,会自动给对应按钮增加红色文字和红色边框。
t.el.style.color = "#ff0000"; t.el.style.border = "2px solid red";
这样执行批量刷新后,可以直接从后台页面看到已经处理过的项目,不需要重新判断哪些按钮已经点击。
七、如何恢复原来的按钮样式
如果不需要红色标记,可以点击“重置红色标记”按钮。
对应的 JavaScript 会遍历之前记录的任务,将文字颜色和边框恢复为空:
function resetMark(){
var list = window.ecmsTaskList;
for(var i=0;i<list.length;i++){
var el = list[i];
el.style.color = "";
el.style.border = "";
}
}八、修改后如何使用
完成文件修改后,重新打开帝国CMS后台对应的数据更新、刷新页面功能页面。
如果代码加载正常,就可以看到新增的“批量全部刷新(新窗口)”按钮。
点击按钮后,程序会自动搜索当前页面中的刷新任务,然后按照页面中找到的顺序依次打开相关刷新链接。
如果页面提示“未找到目标刷新按钮链接”,通常说明当前页面的按钮文字、链接地址或者HTML结构与代码中的选择器不一致,需要根据实际后台HTML结构调整选择器。
九、修改后台文件前需要注意
这个方法直接修改帝国CMS后台核心文件,因此在修改前建议先备份 ChangeData.php。
另外,如果以后升级或者覆盖帝国CMS后台文件,修改内容可能会被覆盖,需要重新添加。
由于不同帝国CMS 7.5版本、后台模板以及二次开发程序的HTML结构可能存在差异,代码中的按钮名称和选择器也可能需要根据实际页面进行调整。
总结
对于经常需要更新大量页面的帝国CMS 7.5网站来说,这个小修改可以减少重复操作。通过自动收集后台刷新任务,再以新窗口方式依次执行,可以把原本需要逐个点击的刷新操作集中处理。
同时增加红色标记和重置功能后,也能更直观地查看当前页面中已经执行过的刷新任务。
如果你经常修改帝国cms模板、栏目或者内容页面,这种方式可以作为后台刷新功能的一个简单扩展。
