欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > 帝国 CMS 教程

帝国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.phpfunctions.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、修改完成,灵动标签原样输出不解析

  1. 确认文件修改保存,编码 UTF‑8 无 BOM;
  2. 确认DtNewsBq()代码是放在 $listtemp=$tempr['temptext'];上方
  3. 后台:系统设置 → 更新数据库缓存;清除浏览器缓存。
  4. 帝国 CMS 升级之后,/e/search/result/index.php会被覆盖,需要重新修改。

2、TAG 标签空白输出

  1. 检查模型附表是否存在,stb字段不为空;
  2. 文章确实填写过 TAG 标签;
  3. list.var 模板必须勾选【使用程序代码】,否则 PHP 代码原样输出。

3、服务器 CPU 占用升高


搜索页是动态页面,大量使用复杂灵动标签会增加数据库压力,建议:
  • 搜索页面尽量少写大数量 loop;
  • 高频访问网站,可以给搜索页增加 redis / 文件缓存。

六、重要注意事项

  1. /e/search/result/index.php属于系统核心文件,版本升级会覆盖,做好修改记录;
  2. 不要直接把复杂 SQL 写在搜索主模板,优先封装到userfun.php
  3. 搜索动态页本身没有静态缓存,不要在搜索模板写消耗性能的大量查询;
  4. 安全提示:搜索页做好关键词过滤,防止 XSS,帝国默认已经处理keyboard变量。
小结:修改引入文件 + 调用DtNewsBq函数,即可完整开启搜索页标签能力;TAG 标签因为存放在数据附表,不能直接用[!--infotags--],必须 SQL 读取附表字段输出。

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程