您当前的位置 » 主页 > 文章中心 > 我的博客 > 升级DEDE搜索功能,将搜索功能扩展到附加表的内
21/12
HIT:

[上一篇] [下一篇] 升级DEDE搜索功能,将搜索功能扩展到附加表的内

发布:2010-12-21 10:55 | 分类: 我的博客 | 评论: | 来源:未知

dede的高级搜索也只能搜索各个模块的标题,关键字,内容摘要等主表字段。对于附加表中的字段却搜索不到,比如文章的内容等附加表中的字段。由于dede默认搜索范围只限制在主表中,要想将文章、商品、分类信息等模块的内容也添加到搜索范围以内,仅凭原有的高级搜索也是无能为力。我的方法是将主表与各个附加表连表查询,从而获取附加表中的信息进行匹配。

思路其实很简单,只是在实际操作过程中还是会遇到种种问题,以至于摸索了一个小周末,才将整个功能拓展出来,所以也是为了供参考,让更多的朋友不走弯路。有需要搜索文章内容的朋友可以看下~
以5.6为例,打开搜索类/include/arc.searchview.class.php第178行
 

 $kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords) like '%$k%' ";
 

此行是关键字匹配。
然后是493行

 //搜索 
$query = "Select arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath from `{$this->AddTable}` arc left join `sq_arctype` act on arc.typeid=act.idwhere {$this->AddSql} $ordersql limit $limitstart,$row"; 

此段是查询。
要查文章的内容,就要将手伸到附加表中,即将主表与附加表连表查询。
先链表,即将搜索功能代码替换为

  //搜索
$query = "Select arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath,addart.body,addsho.body,addser.body from `{$this->AddTable}` arc
left join `sq_arctype` act on arc.typeid=act.id
left join `sq_addonarticle` addart on arc.id=addart.aid
left join `sq_addonshop` addsho on arc.id=addsho.aid
left join `sq_addonservice` addser on arc.id=addser.aid
where {$this->AddSql} $ordersql limit $limitstart,$row";

我这里是查询文章、商品及自定义模型服务表的内容,大家根据各自需求连相应的附加表。
表链好后就是关键字查询了,这里将178行代码改为

 $kwsqls[] = " CONCAT(arc.title,' ',arc.description,' ',addart.body,' ',arc.keywords) like '%$k%' OR CONCAT(arc.title,' ',arc.description,' ',addsho.body,' ',arc.keywords) like '%$k%' OR CONCAT(arc.title,' ',arc.description,' ',addser.body,' ',arc.keywords) like '%$k%'";

到这里还没完,运行的话会提示sql语句错误。原因是321行处也有个搜索关键字语句
 

 $cquery = "Select * From `{$this->AddTable}` arc where ".$this->AddSql;

这里也要对应的改为

$cquery = "Select arc.*,addart.body,addsho.body,addser.body From `{$this->AddTable}` arc
left join `sq_addonarticle` addart on arc.id=addart.aid
left join `sq_addonshop` addsho on arc.id=addsho.aid
left join `sq_addonservice` addser on arc.id=addser.aid
where ".$this->AddSql;

至此,就大功告成了。这可是我折腾了两天才搞定的,里面有几处出乎意料的错误,现在看起来都很简单,呵呵~
希望对有些朋友有用~

TAG:  
 上一篇: 解决DEDE图集上传图片时跳出302错误
 下一篇: DeDeCMS图片集上传图片出错(FIELID:*)的解决办法
发表评论 进入详细评论页>>
用户名:  验证码:点击我更换图片



  作品展示文章中心站内下载艺术设计案例中心服务内容业务流程留言咨询
COPYRIGHT @ 2009-2012 MartinStudio ALL RIGHTS RESERVED. Powered by DEDECMS 沪ICP备12028012号-1 网站安全检测平台