设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 2220|回复: 1
打印 上一主题 下一主题

[dedecms] dedecms自定义搜索如何调用除默认字段外的其他字段

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-28 03:11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dedecms自定义搜索如何调用除默认字段外的其他字段

今日遇到一个小问题,dedecms自定义模型的自定义搜索需要调用除默认字段(标题、日期、点击、描述)外的其他字段,如商品价格等。默认只支持默认字段(标题、日期、点击、描述)等几个字段,如何新增加其他字段呢?

步骤如下:

一、修改advancedsearch.php页面中以下代码(约211行开始)
  1.     {
  2.         $where = str_replace('main.', 'addon.', $where);
  3.         $orderby = str_replace('main.', 'addon.', $orderby);
  4.         $query = "SELECT addon.*, arctype.* FROM $addontable addon
  5.         LEFT JOIN #@__arctype arctype ON arctype.id = addon.typeid
  6.         $where $orderby";
  7.     } else {
  8.         $query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*
  9.     FROM $maintable main
  10.     LEFT JOIN #@__arctype type ON type.id = main.typeid
  11.     LEFT JOIN $addontable addon ON addon.aid = main.id
  12.     $where  $orderby";
  13.     }
  14.     $sql = $query;
  15. }
复制代码
修改为:
  1.     {
  2.         $where = str_replace('main.', 'addon.', $where);
  3.         $orderby = str_replace('main.', 'addon.', $orderby);
  4.         $query = "SELECT addon.*, arctype.* FROM $addontable addon
  5.         LEFT JOIN #@__arctype arctype ON arctype.id = addon.typeid
  6.         $where $orderby";
  7.     } else {
  8.         $query = "SELECT addon.*,main.id AS aid,main.*,main.description AS description1, type.*
  9.     FROM $maintable main
  10.     LEFT JOIN #@__arctype type ON type.id = main.typeid
  11.     LEFT JOIN $addontable addon ON addon.aid = main.id
  12.     $where  $orderby";
  13.     }
  14.     $sql = $query;
  15. }
复制代码
注:主要是
  1. $query = "SELECT addon.*,main.id AS aid,main.*,main.description AS description1, type.* FROM $maintable main
复制代码
这里增加了“addon.*,”

二、修改advancedsearch.htm,在页面中增加需要调用的字段,如{dede:field.brand/},{dede:field.units/}等即可。

至此,修改完成。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖
回复

使用道具 举报

沙发
 楼主| 发表于 2014-1-29 06:30:38 | 只看该作者
dedecms自定义字段搜索教程

之前看到很多人想要自定义字段搜索功能,官方又不给出,而我自己也正需要自定义字段搜索,于是就花了半天时间研究了下DEDE的搜索代码,终于研究出来了,现在分享给大家
5.1版的还没用,原因是之前用5.0的改了很多东西,再升级成5.1量太大了,所以这次写个自定义字段搜索的教程也是适用5.0版,.5.1的也应该类似吧
好了,废话不多说了,具体操作如下

一:打开你的数据库,找到dede_full_search这个表,在里面把你自定义的字段添加进表,这里以我的网站为例,我添加了myskill,myexchange,mygoods,myexgoods,这4个字段

二:打开/member/article_add_action.php,找到"//更新全站搜索索引",在下面的一段代码中插入刚才添加的4个字段, 例:“'myskill'=>$myskill,'myexchange'=>$myexchange,'mygoods'=& gt;$mygoods,'myexgoods'=>$myexgoods”,这里说明一下,前面的'myskill'为你发布文章时添加的自定义字段,后面的为刚才在表dede_full_search中添加的字段(建议在表中添加字段的时候写成跟你之前字定义的字段一样)这里最好写成一样,可以省去很多麻烦

三:打开/include/inc_arcsearch_view.php,搜索titlekeyword,找到如下代码
Copy code
  1. if($this->SearchType != "titlekeyword"){
  2. $kwsqlarr[] = " dede_full_search.title like '%$k%' ";
  3. }else{
  4. $kwsqlarr[] = " dede_full_search.title like '%$k%' ";
  5. $kwsqlarr[] = " dede_full_search.addinfos like '%$k%' ";
  6. $kwsqlarr[] = " dede_full_search.keywords like '%$k%' ";
  7. }
复制代码
分析下代码SearchType != "titlekeyword,搜索类型为titilekeyword,即前台搜索下拉框中的智能模糊搜索,$kwsqlarr[] = " dede_full_search.title like '%$k%' ";为搜索full_search表中的title字段,好了,知道了这段代码的作用,我们就知道该如何添加自己的搜索了下面把我的代码作为例子
Copy code
  1. if($this->SearchType != "skill"){
  2. $kwsqlarr[] = " dede_full_search.myskill like '%$k%' ";
  3. $kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";              
  4. }else{              
  5. $kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
  6. $kwsqlarr[] = " dede_full_search.myskill like '%$k%' ";
  7. }
  8. if($this->SearchType != "goods"){
  9. $kwsqlarr[] = " dede_full_search.mygoods like '%$k%' ";
  10. $kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";         
  11. }else{              
  12. $kwsqlarr[] = " dede_full_search.myexchange like '%$k%' ";
  13. $kwsqlarr[] = " dede_full_search.mygoods like '%$k%' ";

  14. }
复制代码
,因为我的myskill和myexchange2个字段是一起的,而mygoods和myexgoods是一起的,所以我用了2个if else语句

四:修改搜索框代码,代码在哪我就不说了吧,大家都知道在哪,搜索框原代码为
Copy code
  1. <select name="searchtype" id="searchtype">
  2. <option value="titlekeyword" selected>智能模糊搜索</option>
  3. <option value="title">仅搜索标题</option>
  4. </select>
复制代码
这里只需修改上面的代码,修改后的代码为
Copy code
  1. <select name="searchtype" id="searchtype">
  2. <option value="skill" selected>搜技能</option>
  3. <option value="goods">搜物品</option>
  4. </select>
复制代码
value="",这填的是第三步中添加的SearchType后面的,即搜索类型,这个你自己定义

五:还是打开/include/inc_arcsearch_view.php,找到//处理一些特殊字段,把你之前的自定义的字段添加进去,这里还是以我的为例子
在先面添加
Copy code
  1. $row["myskill"] = $this->GetRedKeyWord(cn_substr($row["myskill"],$infolen));
  2. $row["myexchange"] = $this->GetRedKeyWord(cn_substr($row["myexchange"],$infolen));
  3. $row["mygoods"] = $this->GetRedKeyWord(cn_substr($row["mygoods"],$infolen));
  4. $row["myexgoods"] = $this->GetRedKeyWord(cn_substr($row["myexgoods"],$infolen));
复制代码
其实只要添加 $row["myskill"] = $row["myskill"];(另外3个我就不写了,类似)就够了,但是我为什么要这样写呢,这样写的作用就是让你在搜索结果页调用的时候显示关键子为红色

六:最后一步了,打开templets/default/search.htm,这里就是搜索页调用的模版,这里要调用只要[field:你自定义的字段 /],还是以我的网站为例[field:myskill/],这样调用就OK,但是要注意一点,假如你2个字段放一起调用中间最好加个空格或者其他符号,假如[field:myskill/][field:mygoods/]这样连在一起是显示不出来的
好了,写的这么详细,相信大家应该看的懂吧,虽然有点复杂,不过有总比没有好,呵呵

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-5-2 20:02 , Processed in 0.093600 second(s), 26 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表