帝国 CMS 搜索表单怎么建
学完这篇,你能在帝国CMS 7.5 的站点上从零搭出一个真正能用的站内搜索表单,并且知道每个参数写错之后会出什么毛病。下面按顺序做,十分钟内能跑通。
第一步:先拿到「搜索结果模板 ID」,这是表单的钥匙
搜索框本身只是一段 HTML,点击搜索后由 /e/search/index.php 负责查询,它需要一个参数告诉它「用哪个模板渲染结果页」,这个参数就是 tempid。所以第一步是去后台把这个 ID 找出来。
登录后台,左侧菜单依次点:「模板」→「搜索模板」。列表里会看到「普通搜索表单模板」「高级搜索表单模板」「搜索结果模板」等条目,每行最左边有一列「模板 ID」。记住「搜索结果模板」那一行的数字,比如 1、2 或你自己新建的编号,这就是后面 tempid 的值。
注意:如果你从没动过搜索模板,默认模板可能已经被删或被改乱。此时点该行右侧的「修改」,随便改一个不影响渲染的字符再保存,就能确认它还能正常保存;报错就先点「恢复默认」。
第二步:在首页模板里插入表单代码
打开「模板」→「公共模板」→「首页模板」(或你要放搜索框的那个模板),在合适位置粘贴下面这段:
<form action="/e/search/index.php" method="post" name="searchform" id="searchform">
<input type="hidden" name="tbname" value="news">
<input type="hidden" name="show" value="title,smalltext,newstext">
<input type="hidden" name="tempid" value="1">
<input type="text" name="keyboard" id="keyboard" size="20" placeholder="输入关键词">
<input type="submit" name="Submit" value="搜索">
</form>
保存后点「更新缓存」,再到「生成」→「更新首页」重新生成一次首页,搜索框就出现在页面上了。
注意:把
tempid的1换成你上一步记下的真实 ID;如果首页是静态页且站点有多个域名,action建议写成[!--news.url--]e/search/index.php,让帝国自动补全站点地址。
第三步:搞懂四个隐藏字段,改错了搜索就是没结果
这一步决定搜索能不能搜到东西,逐个说清楚。
tbname:要搜索的数据表名,填系统模型对应的表。想看表名,去「系统」→「数据表与系统模型」→「管理数据表」,列表里「数据表名」那一列就是,新闻是 news,下载是 download,图库是 photo。搜文章就填 news。
show:参与匹配的字段,多个用英文逗号隔开,不能有空格。title 是标题,smalltext 是简介,newstext 是正文。字段名必须和数据表里完全一致,把 smalltext 写成 smalltexts,搜索结果直接为空。
tempid:第一步拿到的搜索结果模板 ID。
keyboard:用户输入关键词的输入框,name 必须叫 keyboard,改成别的(比如 keyword)后台收不到值,会提示没输入关键字。
注意:
show里加newstext会让搜索变慢,因为要全表扫描正文。数据量上万条时建议只留title,smalltext。
第四步:测试并排查常见问题
保存并生成后,在前台输入一个你确定文章标题里有的词,点搜索。正常结果是跳到 /e/search/index.php 并列出匹配文章。
搜不到时按顺序查三件事:一看 tbname 是不是写成了栏目名;二看 show 字段名有没有拼错;三看目标文章是否已经生成过(未生成的信息在搜索里通常查不到)。
页面空白或报数据库错误,去「系统」→「系统参数设置」→「前台搜索参数设置」,检查搜索开关和间隔时间设置是否被人关掉或设得过大。
注意:搜索表单用 POST,用户刷新结果页时浏览器会弹「是否重新提交表单」。想避免这个提示,可以在搜索表单上改用
method="get",帝国CMS 的/e/search/index.php同样能接收 GET 参数。
小结
- 搜索表单三件套:
action="/e/search/index.php"、tempid(搜索结果模板 ID)、keyboard(输入框名)。 tbname填数据表名,show填字段名,两者都要和后台实际名称逐字对应。- 表单改完必须「更新缓存」+ 重新生成前台页面,否则看到的还是旧页面。
- 搜索无结果先查字段名和表名,再查文章是否已生成。
- 正文参与搜索(
newstext)会拖慢速度,数据量大时只搜标题和简介。
原文链接:https://www.gj0.com/thread-156.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。