帝国CMS搜索模板定制实战:从调用到高亮,手把手搭出用户爱用的站内搜索
适用人群:正在使用帝国CMS建站、有一定后台操作基础但不懂前端代码的站长;想要提升站内搜索体验、让搜索页更美观、更符合SEO规范的初中级使用者;以及需要自定义搜索筛选功能(如按栏目、按时间、按关键词高亮)的模板开发者,本文不涉及二次开发核心逻辑,纯模板层操作,只要你会复制粘贴、能看懂HTML标签,就能跟着搭完。
开始前要理解的两个核心文件
在帝国CMS中,搜索功能主要由两个模板控制:一个是搜索表单模板(通常放在头部或侧边栏,用于输入关键词),另一个是搜索结果列表模板(用于展示搜索到的内容),很多人把“搜索模板”误以为只有一个文件,其实搜索页的完整展示靠的是 search 标签和对应的列表模板配合,我们接下来要做的,就是新建一套专属的搜索模板,并在后台指定它生效。
完整搭建步骤(手把手)
第一步:复制默认模板,建立你的专属版本
进入帝国CMS后台 → “模板管理” → “搜索模板管理”,你会看到默认的搜索模板,不要直接修改默认模板,先点“复制”,得到一个新模板,命名为“自定义搜索模板-列表”,类似地,再去“搜索表单模板管理”复制一份,命名为“自定义搜索表单模板”。

帝国CMS搜索模板从零搭建完整指南,让站内搜索真正为你引流
为什么要复制?因为默认模板在系统升级或你调试出错时,可以随时还原,避免网站前端直接崩掉。
第二步:修改搜索表单模板
打开你复制的“自定义搜索表单模板”,代码一般是这样的:
<form action="/e/search/index.php" method="post"> <input type="text" name="keyboard" /> <input type="submit" value="搜索" /> </form>
你要在这个基础上丰富它,建议加入栏目筛选下拉框,让用户可以选择只在某个栏目内搜索,修改后如下:
<form action="/e/search/index.php" method="post" target="_blank">
<input type="text" name="keyboard" placeholder="请输入关键词" />
<select name="classid">
<option value="0">全部栏目</option>
<option value="1">公司新闻</option>
<option value="2">产品中心</option>
<option value="3">行业资讯</option>
</select>
<input type="submit" value="搜索" />
</form>
注意:classid 这个字段对应帝国CMS搜索的参数,如果你不想限制栏目,就保留value="0",另外target="_blank"表示搜索结果在新窗口打开,是否新增看你的喜好。
保存后,到“模板管理”→“公共模板变量”或“页面头部模板”中,把原来的搜索表单调用代码替换成你新建的模板调用标签,通常帝国CMS搜索表单模板的调用标签是[!--searchform--],如果你新建后没有自动替换,你可以在头部模板里手动加入:
<?php include('searchform.php'); ?>
但更简单的方式是:在“搜索表单模板管理”里点“设为默认”,这样全站调用的就是你的新表单,设置后,去首页刷新看看搜索框样式是否变化。
第三步:修改搜索结果列表模板
这是最核心的一步,回到“搜索模板管理”,编辑你复制的“自定义搜索模板-列表”,默认模板的循环部分大致是:
[!--news.list--] 或类似的标签
你需要改成适合你的样式的列表结构,下面是一个可直接套用的完整示例:
<div class="search-result"> <h3><a href="[!--titleurl--]" target="_blank">[!--title--]</a></h3> <p class="summary">[!--smalltext--]</p> <p class="meta">栏目:[!--classname--] | 日期:[!--newstime--]</p> <hr /> </div>
但这里有个关键点:帝国CMS搜索列表的标签写法与普通列表不同,在搜索模板中,循环变量通常用[!--list--]包裹,内部字段使用类似[!--title--]、[!--titleurl--]、[!--smalltext--]、[!--newstime--]、[!--classname--],你要特别注意,如果直接复制普通列表模板的[!--news.url--]之类的标签,可能无效。
正确做法:在搜索模板管理页面,点击“搜索模板”的“修改”按钮,在源码模式下,找到原来的循环体,也就是包含 在顶部可以加入搜索统计信息, 搜索要真正生效,后台有一个容易被忽略的开关,进入“系统设置”→“系统参数设置”→“用户设置”,找到“是否开启搜索”,确保选择“是”,搜索时间间隔”建议设置为0或较小值,否则用户连续搜索会被限制。 再到“栏目管理”里,确认你需要被搜索的栏目,其“栏目属性”中的“允许搜索”复选框是勾选状态,不然用户搜不到该栏目下的内容。 保存模板后,去网站前台测试搜索一个你确定存在的关键词,如果出现样式错乱,检查CSS类名是否与你定义的一致,如果出现空白页或报错,多半是模板标签写错,先恢复默认模板再逐步修改。 注意: 搜索结果的SEO优化:搜素结果页往往被搜索引擎忽略,如果你想被收录,可以在搜索结果模板的 分页标签:帝国CMS搜索模板的分页标签是 搜索框提交后跳到系统自带的简陋页面:说明你虽然新建了模板,但没有在“搜索模板管理”中把新模板“设为默认”,或者你复制的是“搜索表单模板”,但“搜索结果模板”仍是原来的,两个都要设默认。 搜索无结果或者结果不完整:检查栏目是否允许搜索,更重要的是检查“系统参数”→“搜索设置”里的“搜索范围”,帝国CMS默认可能只搜索标题,你需要在后台勾选“搜索内容”或“搜索简介”,否则用户搜正文里的关键词找不到。 搜索关键词变成乱码:一般是编码问题,帝国CMS如果是UTF-8版本,你的模板文件也必须保持UTF-8无BOM格式,用记事本修改模板保存时,注意选择编码,如果出现中文乱码,重新以正确编码保存。 搜索页显示“未定义操作”:这是因为搜索表单中缺少必要的隐藏字段,帝国CMS搜索除了 搜索时间限制导致无法测试:系统默认搜索间隔可能设置了60秒,你测试时频繁搜索会提示“操作频繁”,建议在“用户设置”里把“搜索时间限制”改为0。 样式加载不出来:你的自定义搜索模板是嵌套在页面里的,如果页面本身没有定义CSS,你需要在外层页面模板的 搜索结果点不开或链接错误:检查 高亮JS把HTML标签破坏:上面提供的高亮JS只对纯文本节点操作,如果标题里有 完成以上步骤后,请对照检查: 按照这个流程走下来,你的帝国CMS搜索功能就从“能用”升级成了“好用”,搜索模板真正的价值不只是展示结果,更是帮用户快速找到内容、提升网站粘性,把每一步做扎实,你的站点就比大多数帝国CMS网站多一个加分项。[!--list--]的代码块,把内部HTML替换为你想要的结构,不要动外层的[!--list--]和[/!--list--]
<div class="search-info">
您搜索的是“<span style="color:red">[!--keyboard--]</span>”,共找到 [!--totalnum--] 条结果。
</div>
[!--keyboard--]就是用户输入的关键词,[!--totalnum--]是结果总数,这些标签在帝国CMS搜索模板里是内置可用的。第四步:设置搜索页参数
第五步:调试与美化
配置要点(直接影响体验和SEO)
[!--keyboard--]不行,因为无法在列表内部逐个替换,但有一个简单办法:在搜索结果列表模板的头部,用JS给标题和摘要中的关键词加高亮,添加如下代码:<script>
var kw = "[!--keyboard--]";
kw = kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // 转义特殊字符
document.addEventListener('DOMContentLoaded', function(){
var items = document.querySelectorAll('.search-result h3 a, .search-result .summary');
for(var i=0;i<items.length;i++){
var txt = items[i].innerHTML;
txt = txt.replace(new RegExp('('+kw+')','gi'), '<span style="color:red">$1</span>');
items[i].innerHTML = txt;
}
});
</script>
[!--keyboard--]在模板中会被替换成实际搜索词,所以这段JS是可行的,但一定要放在列表标签之后,或者放在页面底部。
<head>区域设置<title>为:“搜索:[!--keyboard--] - 你的网站名”,同时给结果链接加上rel="nofollow"?不建议,因为这样会影响权重传递,正常输出链接即可。[!--page--],记得放在列表下方,同时加上“上一页”“下一页”样式。常见踩坑提醒(新手必看)
keyboard外,还需要提交show或classid等参数,最简单的解决办法:不要完全手写表单,而是从默认搜索表单模板里复制全部代码,然后在上面修改,默认表单里包含了<input type="hidden" name="show" value="title,smalltext,newstext" />之类的参数,缺失就会报错。<style>标签里补充样式,或者引入独立的CSS文件,不要在搜索模板中写<link>引用外部文件容易加载失败,最好内联样式。[!--titleurl--]是否被正确解析,如果你是在列表循环外部使用该标签,当然没数据,确保在[!--list--]循环内部使用。<span>或<em>这样的标签,innerHTML替换可能把标签内的文本也替换,导致样式错乱,更稳妥的方法是只对文本节点操作,但复杂一些,新手可以先接受这个简单版本,只要标题里没有嵌套特殊样式,就没问题。效果验收清单
发表评论