背景介绍
在现代网站开发中,搜索功能已经成为不可或缺的一部分,织梦(DedeCMS)作为一款流行的内容管理系统,其搜索功能的实现方式也备受关注,本文将详细介绍如何在织梦系统中实现搜索查询,特别是高级搜索和自定义字段的精准搜索。
一、织梦搜索功能
织梦系统提供了多种搜索方式,包括前台搜索和高级搜索,前台搜索是较为简单的一种搜索方式,而高级搜索则提供了更多的筛选条件和自定义选项,织梦还支持自定义字段的搜索,这对于需要根据特定字段进行精准查询的场景非常有用。
二、高级搜索的实现
后台设置
进入模型管理:在织梦后台,点击“核心”>“内容模型管理”。
选择模型:在模型列表中选择一个已有的模型或新建一个模型。
添加字段:在模型管理界面,可以增加需要搜索的字段,例如身份证号码等。
修改模板
找到放大镜图标:在模型管理界面,点击模型后面的放大镜图标,进入高级搜索模板设置。
选择模板:默认使用官方提供的advancedsearch.htm
模板,也可以自定义模板。
修改高级搜索PHP文件
打开文件:修改plus/advancedsearch.php
文件。
修改代码:在大约142行的位置,找到以下代码:
if(isset(${$var}) && trim(${$var})!='') { ${$var} = stripslashes(${$var}); ${$var} = preg_replace("#[|"r t%*?()$;,'%<>]#", "", trim(${$var})); ${$var} = addslashes(${$var}); $where .= " AND addon.$var LIKE '%${$var}%'"; }
修改为精准查询:
if(isset(${$var}) && trim(${$var})!='') { ${$var} = stripslashes(${$var}); ${$var} = preg_replace("#[|"r t%*?()$;,'%<>]#", "", trim(${$var})); ${$var} = addslashes(${$var}); $where .= " AND addon.$var = '${$var}'"; } else { ShowMsg('身份证不能为空,或输入不正确',1,0);exit; }
增加不为空的判断:
else { $sql = urldecode($sql); $query = $sql; } //print_r($sql);exit; $searchinfo2 = $dsql>GetOne($sql); if(!is_array($searchinfo2)) { showmsg('查询的信息不存在,请检查输入','1'); exit(); }
三、前台搜索的实现
搜索表单
创建表单:在前端页面创建一个搜索表单,提交到plus/search.php
。
<form name="form1" method="get" action="{dede:global.cfg_cmsurl}/plus/search.php"> <input type="text" name="sc" id="sc" value="在这里输入关键词..."/> <input type="submit" name="submit" value="搜索"/> </form>
搜索结果模板
修改模板:搜索结果页模板通常为default/search.htm
,可以根据需要自定义显示样式。
<table border="0" cellspacing="0" cellpadding="0" width="90%"> <tr> <td colspan="3"><strong>这里填写关键字进行搜索</strong></td> </tr> <tr> <td width="50%" valign="top"><strong>搜索标题</strong></td> <td width="50%" valign="top"><strong>搜索作者</strong></td> <td rowspan="2" width="30%" valign="middle"><strong>搜索内容</strong></td> </tr> {dede:arclist typeid='son' type='son' row='8'} <tr> <td height="20" align="center">[field:title/]</td> <td height="20" align="center">[field:writer function='strlen(@me)<=10 ? @me : ""' /][field:writer function='strlen(@me)>10 ? substr(@me,0,10).".."." : @me' /]</td> <td><a href='[field:arcurl/]'>[field:description function='cnsubstr(@me,80)'/]</a></td> </tr> {/dede:arclist} </table>
四、自定义字段搜索的实现
新增字段
后台添加字段:在模型管理中添加需要搜索的自定义字段,如证书编号、身份证号等。
修改搜索模板
修改表单:在前端搜索框中添加对应的输入框。
<form action="/plus/zhengshu.php" method="get"> <input type="hidden" name="pagesize" value="1"> <input type="hidden" name="channeltype" value="这里填你的模型ID号"/> <p> <label>姓 名:</label> <input type="text" name="title"/> </p> <p> <label>身份证号:</label> <input type="text" name="shenfenzheng"/> </p> <p> <label>证书编号:</label> <input type="text" name="bianhao"/> </p> <p> <input type="submit" value="搜索"/> </p> </form>
搜索结果模板
创建模板:在模板目录中创建zhengshu.htm
。
<table width="100%" class="table"> <h2>查询结果</h2> <caption></caption> <thead> <tr> <th>证书编号</th> <th>身份证号</th> <th>姓名</th> </tr> </thead> {dede:list titlelen='250'} <tr> <td>[field:bianhao/]</td> <td>[field:shenfenzheng/]</td> <td>[field:title/]</td> </tr> {/dede:list} <tr> <td colspan="9"> {dede:pagelist listsize=1 runphp=yes} @me = (empty(@me) ? "<p >没有相关记录</p>" : ""); {/dede:pagelist} </td> </tr> </table>
五、小编总结与最佳实践
优化搜索速度:对于大量数据,建议使用全文索引或者专门的搜索引擎如Elasticsearch来提高搜索效率。
用户体验:提供实时搜索建议和自动补全功能,提升用户体验。
安全性考虑:对用户输入进行过滤和验证,防止SQL注入等安全问题。
移动端适配:确保搜索功能在移动设备上也能良好运行,采用响应式设计。
六、相关问题与解答
如何修改织梦高级搜索为单条信息查询?
答案:要修改织梦的高级搜索为单条信息查询,需要进行以下几个步骤:
1、后台设置:在模型管理中添加需要搜索的字段,例如身份证号码。
2、修改模板:点击模型后面的放大镜图标,进入高级搜索模板设置,选择或自定义模板。
3、修改高级搜索PHP文件:打开plus/advancedsearch.php
文件,在大约142行的位置,将模糊查询改为精准查询,并增加不为空的判断,具体代码如下:
if(isset(${$var}) && trim(${$var})!='') { ${$var} = stripslashes(${$var}); ${$var} = preg_replace("#[|"r t%*?()$;,'%<>]#", "", trim(${$var})); ${$var} = addslashes(${$var}); //$where .= " AND addon.$var LIKE '%${$var}%'"; //原模糊查询代码 $where .= " AND addon.$var = '${$var}'"; //修改为精准查询代码 } else { ShowMsg('身份证不能为空,或输入不正确',1,0);exit; //增加不为空的判断 }
4、测试效果:保存所有更改后,重新进行搜索测试,确保功能正常。
2.如何在织梦系统中实现自定义字段的精准搜索?
答案:要在织梦系统中实现自定义字段的精准搜索,可以按照以下步骤操作:
1、后台添加字段:在模型管理中添加需要搜索的自定义字段,如证书编号、身份证号等。
2、修改搜索模板:在前端搜索框中添加对应的输入框,并在表单action
属性中指定处理文件,如/plus/zhengshu.php
,示例如下:
<form action="/plus/zhengshu.php" method="get"> <input type="hidden" name="pagesize" value="1"> <input type="hidden" name="channeltype" value="这里填你的模型ID号"/> <p> <label>姓 名:</label> <input type="text" name="title"/> </p> <p> <label>身份证号:</label> <input type="text" name="shenfenzheng"/> </p> <p> <label>证书编号:</label> <input type="text" name="bianhao"/> </p> <p> <input type="submit" value="搜索"/> </p> </form>
3、创建搜索结果模板:在模板目录中创建zhengshu.htm
,定义搜索结果的展示格式,示例如下:
<table width="100%" class="table"> <h2>查询结果</h2> <caption></caption> <thead> <tr> <th>证书编号</th> <th>身份证号</th> <th>姓名</th> </tr> </thead> {dede:list titlelen='250'} <tr> <td>[field:bianhao/]</td> <td>[field:shenfenzheng/]</td> <td>[field:title/]</td> </tr> {/dede:list} <tr> <td colspan="9"> {dede:pagelist listsize=1 runphp=yes} @me = (empty(@me) ? "<p >没有相关记录</p>" : ""); {/dede:pagelist} </td> </tr> </table>
4、测试效果:保存所有更改后,进行搜索测试,确保自定义字段能够被正确查询并显示结果。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/114834.html