搜索功能是DEDECMS建站系统极为重要的功能之一,程序默认的搜索功能比较单一,想要实现有个性特色的功能就要用到二次开发了,92建站网在开发过程中积累了很多这方面的经验,现在发布于此,希望这篇织梦DEDECMS搜索功能使用心得总结能够给有需要的朋友带去帮助。
搜索功能是DEDECMS建站系统极为重要的功能之一,程序默认的搜索功能比较单一,想要实现有个性特色的功能就要用到二次开发了,92建站网在开发过程中积累了很多这方面的经验,现在发布于此,希望这篇织梦DEDECMS搜索功能使用心得总结能够给有需要的朋友带去帮助。
1 站内搜索增加个仅搜索当前频道功能
其实自己有搜索框加一个栏目选择的项就行了,系统不必要自动去生成
高级搜索里可选的条件,你全都可以用
Quote:
<selectname="channeltype"id="channeltype"style="width:100">
<optionvalue="0"selected>--不限--</option>
<optionvalue='4'>Flash</option>
<optionvalue='3'>软件</option>
<optionvalue='2'>图片集</option>
<optionvalue='1'>普通文章</option>
</select>
如果不想用户选择,你直接加
<inputtype='hidden'name='channeltype'value="{dede:fieldname='channeltype'/}">
这样也行
2 最新5.1随便搜索一串数字出错
提示信息如下:
YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserver
versionfortherightsyntaxtousenear')limit500'atline1-ExecuteQueryFalse!
Selectaidfromdede_full_searchwherearcrank>-1and()limit500
因搜索未过滤html标签,导致用户可以在搜索出注入html代码,该补丁修改该问题和utf-8版tag标签找不
到以及部分用户尾部丢0的问题
覆盖补丁后请在后台内容维护搜索关键词管理处删除不正常的关键词。
解决方法:官方已经出补丁了
下载补丁包下载地址(GBK/UTF8请按版本选择里面的文件)
http://www.dedecms.com/upimg/soft/2008/patch20080407.zip
非5.1版请打开plus/search.php文件
找到
Copycode$keyword=ereg_replace("[\|\"\r\n\t%\*\?\(\)\$;,'%-]","",trim($keyword));
替换为
Copycode$keyword=ereg_replace("[\|\"\r\n\t%\*\?\(\)\$;,'%<>]","",trim($keyword));
3 文章关键字自动对应搜索的办法
{dede:fieldname='keywords'runphp='yes'}
if(!empty(@me)){
$kws=explode('',@me);
@me="";
foreach($kwsas$k){
@me.="<ahref='/cms/plus/search.php?keyword=".urlencode($k)."'>$k</a>";
}
@me=str_replace('+','',trim(@me));
}
{/dede:field}
列表页中的关键字自动连接对应办法
关键字:
[field:keywordsrunphp='yes']
if(!empty(@me)){
$kws=explode('',@me);
@me="";
foreach($kwsas$k){
@me.="<ahref='/cms/plus/search.php?keyword=".urlencode($k)."'>$k</a>";
}
@me=str_replace('+','',trim(@me));
}
[/field:keywords]
4 在文章列表页和搜索结果页调用来源
1,改include目录下的inc_arclist_view.php
查找
$query="Selectarc.ID,arc.title,arc.iscommend,arc.color,
arc.typeid,arc.ismake,arc.money,arc.description,arc.shorttitle,
arc.memberid,arc.writer,arc.postnum,arc.lastpost,
arc.pubdate,arc.senddate,arc.arcrank,arc.click,arc.litpic,
tp.typedir,tp.typename,tp.isdefault,tp.defaultname,
tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl
$addField
在arc.writer,后面加上arc.source,
(感谢cms2009分享)
2,改inc_arcsearch_view.php
查找:arctype.siteurl
添加:archives.source
5 调用当天搜索关键字,并过滤色情关键字0
Copycode
{dede:looptable='dede_search_keywords'sort='lasttime'row='40'if='TO_DAYS(NOW())=TO_DAYS
(FROM_UNIXTIME(lasttime))andkeywordregexp"性|黄色|成人|色"=0'}
<aclass="tag"href="/plus/search.php?keyword=[field:keyword/]">[field:keyword/]</a>
{/dede:loop}
过滤的关键字可以自已加
这个应该明白是什么吧
sort='lasttime'
sort='count'
TO_DAYS改成其它MYSQL时间函数还可调用一周内的关键字等,请自行修改!
6 大大提高搜索准确度的方法
原来的模板的请将
<formaction="{dede:fieldname='phpurl'/}/search.php"name="formsearch">
<inputtype="hidden"name="kwtype"value="0">
改成
<formaction="{dede:fieldname='phpurl'/}/search.php"name="formsearch">
<inputtype="hidden"name="kwtype"value="1">
即0改成1
采用“仅搜索标题”的搜索方式,
<optionvalue="title"selected>搜索标题</option>
可将这个设为默认,或者干脆删除下面的智能模糊,那个太不准。
<optionvalue="titlekeyword">智能搜索</option>
高级搜索中,可以将模板中的“与”改成默认
<inputtype="radio"name="kwtype"value="1"checked="checked"/>
与
<inputname="kwtype"type="radio"value="0"/>
或
“与”应该就是value="1"的意思,下面的同样采用“仅搜索标题”的方式
总的说来就是“与”(value="1")+“仅搜索标题”=准确
7 如何设置让搜索条可以搜一个汉字
需要修改2个地方
打开 /plus/search.php
if($keyword==""||strlen($keyword)<1){
ShowMsg("关键字不能小于1个字节!","-1");
exit();
}
打开 /include/inc_arcsearch_view.php
codeif(strlen($k)<2)continue;
上面就是DEDECMS搜索心得的介绍,若有疑问可以找小编进一步探讨交流~