参考链接:http://www.e7cms.com/article/myblog/20101221/3145.html
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; |
至此,就大功告成了。这可是我折腾了两天才搞定的,里面有几处出乎意料的错误,现在看起来都很简单,呵呵~
希望对有些朋友有用~