帝国CMS8.0搜索列表页不支持灵动标签、TAG标签完整解决方法
时间:2026-08-13 22:27:34 来源:aliz.cn 作者:SKY 阅读:
原创实测|适用于帝国 CMS8.0。帝国 CMS 搜索结果属于动态程序页面 /e/search/result/index.php,默认只解析基础模板变量,原生不支持灵动标签 [e:loop]、万能标签,也无法直接输出文章 TAG 标签,很多开发者做搜索模板踩坑。本文讲解完整修复方案,修改后搜索模板可以正常使用全部帝国标签,同时给出搜索列表输出 TAG 标签的实操代码。
一、问题根源
帝国 CMS 搜索结果页默认引入的是
q_functions.php轻量函数库,没有加载标签解析库 t_functions.php、functions.php,灵动标签、万能标签解析函数没有被载入,所以写在搜索模板里面的[e:loop]不会执行,原样输出到页面上帝国CMS...。
⚠️重要提醒:修改前务必备份原文件 /e/search/result/index.php,升级帝国 CMS 会覆盖此文件,升级完成需要重新修改。
二、第一步修改搜索程序文件,开启标签解析
打开文件:
/e/search/result/index.php
1、修改顶部引入文件部分
找到原始代码:
php
运行
require("../../class/connect.php");
require("../../data/dbcache/class.php");
require("../../class/q_functions.php");
require "../".LoadLang("pub/fun.php");
替换为下面代码:
php
运行
require("../../class/connect.php");
require("../../data/dbcache/class.php");
//注释轻量库,加载完整标签解析库
//require("../../class/q_functions.php");
require("../../class/functions.php");
require('../../class/t_functions.php');
require "../".LoadLang("pub/fun.php");
2、找到代码行
php
运行
//替换公共模板变量
$listtemp=$tempr['temptext'];
在这一行的上方插入标签解析调用代码:
php
运行
//开启搜索模板支持灵动、万能标签
$tempr['temptext']=DtNewsBq('listsearch'.$search_r['tempid'],$tempr['temptext'],0);
保存文件,UTF‑8 无 BOM 编码。
修改完成后:搜索模板就可以正常使用 [e:loop] 灵动标签、万能标签。
三、搜索列表循环项输出 TAG 标签(两种方案)
注意:搜索列表list.var中,默认不会携带 infotags (TAG) 字段,需要 PHP 代码读取附表获取标签。
方案 A:直接写在搜索列表内容模板(list.var),勾选【使用程序代码】
php
运行
<?php
global $empire,$dbtbpre,$public_r;
//获取数据附表编号
$stb = $r['stb'];
$tbname = $r['tbname'];
//读取TAG字段 infotags
$tagRs = $empire->fetch1("select infotags from {$dbtbpre}ecms_{$tbname}_data_{$stb} where id=".$r[id]);
$tagStr = $tagRs['infotags'];
$tagHtml = '';
if($tagStr){
$tagArr = explode(',',$tagStr);
foreach ($tagArr as $tagname){
$tagname=trim($tagname);
if(empty($tagname)) continue;
$tagUrl=$public_r['newsurl']."e/tags/?tagname=".urlencode($tagname);
$tagHtml .= "<a href=\"{$tagUrl}\" target=\"_blank\">{$tagname}</a> ";
}
}
echo $tagHtml;
?>
方案 B:封装到userfun.php,模板一行调用(推荐)
打开
/e/class/userfun.php,文件末尾?>之前加入函数:php
运行
<?php
/**
* aliz.cn 搜索列表输出TAG标签
* @param array $r 列表$r数组
* @return string html标签链接
*/
function ecms_get_search_tags($r){
global $empire,$dbtbpre,$public_r;
$stb = $r['stb'];
$tbname = $r['tbname'];
$tagRs = $empire->fetch1("select infotags from {$dbtbpre}ecms_{$tbname}_data_{$stb} where id=".$r[id]);
$tagStr = $tagRs['infotags'];
$tagHtml = '';
if($tagStr){
$tagArr = explode(',',$tagStr);
foreach ($tagArr as $tagname){
$tagname=trim($tagname);
if(empty($tagname)) continue;
$tagUrl=$public_r['newsurl']."e/tags/?tagname=".urlencode($tagname);
$tagHtml .= "<a href=\"{$tagUrl}\" target=\"_blank\">{$tagname}</a> ";
}
}
return $tagHtml;
}
?>
搜索列表
list.var勾选【使用程序代码】,直接调用:php
运行
<?php echo ecms_get_search_tags($r); ?>
四、搜索模板灵动标签使用示例
搜索页面主模板内可以直接写灵动标签,例如调用热门资讯:
html
预览
[e:loop={"select id,title,titleurl from [!db.pre!]ecms_news where classid>0 order by onclick desc limit 10",10,24,0}]
<li><a href="<?=$bqr[titleurl]?>"><?=$bqr[title]?></a></li>
[/e:loop]
五、高频问题排查
1、修改完成,灵动标签原样输出不解析
- 确认文件修改保存,编码 UTF‑8 无 BOM;
- 确认
DtNewsBq()代码是放在$listtemp=$tempr['temptext'];上方; - 后台:系统设置 → 更新数据库缓存;清除浏览器缓存。
- 帝国 CMS 升级之后,
/e/search/result/index.php会被覆盖,需要重新修改。
2、TAG 标签空白输出
- 检查模型附表是否存在,
stb字段不为空; - 文章确实填写过 TAG 标签;
- list.var 模板必须勾选【使用程序代码】,否则 PHP 代码原样输出。
3、服务器 CPU 占用升高
搜索页是动态页面,大量使用复杂灵动标签会增加数据库压力,建议:
- 搜索页面尽量少写大数量 loop;
- 高频访问网站,可以给搜索页增加 redis / 文件缓存。
六、重要注意事项
/e/search/result/index.php属于系统核心文件,版本升级会覆盖,做好修改记录;- 不要直接把复杂 SQL 写在搜索主模板,优先封装到
userfun.php; - 搜索动态页本身没有静态缓存,不要在搜索模板写消耗性能的大量查询;
- 安全提示:搜索页做好关键词过滤,防止 XSS,帝国默认已经处理
keyboard变量。
小结:修改引入文件 + 调用DtNewsBq函数,即可完整开启搜索页标签能力;TAG 标签因为存放在数据附表,不能直接用[!--infotags--],必须 SQL 读取附表字段输出。
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载
发表评论
共有0条评论