dedecms自定义字段搜索教程

dedecms模板中心做过很多 dedecms企业模板 ,经常碰到很多人想要自定义字段搜索功能,官方又不给出,而我自己也正需要自定义字段搜索,于是就花了半天时间研究了下DEDE的搜索代码,终于研究出来了,现在分享给大家 5.5版的还没用,原因是之前用5.3的改了很多东西,

       dedecms模板中心做过很多dedecms企业模板,经常碰到很多人想要自定义字段搜索功能,官方又不给出,而我自己也正需要自定义字段搜索,于是就花了半天时间研究了下DEDE的搜索代码,终于研究出来了,现在分享给大家
5.5版的还没用,原因是之前用5.3的改了很多东西,再升级成5.5量太大了,所以这次写个自定义字段搜索的教程是适用5.6版

   好了,废话不多说了,具体操作如下

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

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

    三:打开/include/inc_arcsearch_view.php,搜索titlekeyword,找到如下代码
Copy code

    if($this->SearchType != “titlekeyword”){
                    $kwsqlarr[] = ” dede_full_search.title like ‘%$k%’ “;
                }else{
                    $kwsqlarr[] = ” dede_full_search.title like ‘%$k%’ “;
                    $kwsqlarr[] = ” dede_full_search.addinfos like ‘%$k%’ “;
                    $kwsqlarr[] = ” dede_full_search.keywords like ‘%$k%’ “;
                }
    分析下代码SearchType != “titlekeyword,搜索类型为titilekeyword,即前台搜索下拉框中的智能模糊搜索,$kwsqlarr[] = ” dede_full_search.title like ‘%$k%’ “;为搜索full_search表中的title字段,好了,知道了这段代码的作用,我们就知道该如何添加自己的搜索了下面把我的代码作为例子
Copy code

    if($this->SearchType != “skill”){
                    $kwsqlarr[] = ” dede_full_search.myskill like ‘%$k%’ “;
                    $kwsqlarr[] = ” dede_full_search.myexchange like ‘%$k%’ “;             
                }else{             
                    $kwsqlarr[] = ” dede_full_search.myexchange like ‘%$k%’ “;
                    $kwsqlarr[] = ” dede_full_search.myskill like ‘%$k%’ “;
                }
                if($this->SearchType != “goods”){
                    $kwsqlarr[] = ” dede_full_search.mygoods like ‘%$k%’ “; 
                    $kwsqlarr[] = ” dede_full_search.myexchange like ‘%$k%’ “;         
                }else{             
                    $kwsqlarr[] = ” dede_full_search.myexchange like ‘%$k%’ “;
                    $kwsqlarr[] = ” dede_full_search.mygoods like ‘%$k%’ “; 
             
                }

,因为我的myskill和myexchange2个字段是一起的,而mygoods和myexgoods是一起的,所以我用了2个if else语句

    四:修改搜索框代码,代码在哪我就不说了吧,大家都知道在哪,搜索框原代码为
Copy code

    <select name=”searchtype” id=”searchtype”>
            <option value=”titlekeyword” selected>智能模糊搜索</option>
            <option value=”title”>仅搜索标题</option>
          </select>
    这里只需修改上面的代码,修改后的代码为
Copy code

    <select name=”searchtype” id=”searchtype”>
            <option value=”skill” selected>搜技能</option>
            <option value=”goods”>搜物品</option>
          </select>
value=”",这填的是第三步中添加的SearchType后面的,即搜索类型,这个你自己定义

    五:还是打开/include/inc_arcsearch_view.php,找到//处理一些特殊字段,把你之前的自定义的字段添加进去,这里还是以我的为例子
在先面添加
Copy code

    $row[”myskill”] = $this->GetRedKeyWord(cn_substr($row[”myskill”],$infolen));
              $row[”myexchange”] = $this->GetRedKeyWord(cn_substr($row[”myexchange”],$infolen));
              $row[”mygoods”] = $this->GetRedKeyWord(cn_substr($row[”mygoods”],$infolen));
              $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/]这样连在一起是显示不出来的
好了,写的这么详细,相信大家应该看的懂吧,虽然有点复杂,不过有总比没有好,呵呵



 

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

一般在做织梦模板的时候为了避免垃圾文件,所以对测试文章不加以备份(也就是不含数据),这样的话就需要客户在安装好模板在后台添加自己需要的栏目,但是对于没有接触过的朋友会感觉有一定的难度,所以我来给大家讲解一下织梦后台栏目添加的步骤:
今天我简要地说一下怎么调用频道栏目下文章总数,也就是实现一个文章的数目的统计
我在卖模板的过程发现了一个小问题,今天特意记载下来供广大的朋友们参考。是什么问题呢? 就是有好多不懂dedecms的朋友购买了模板 我们直接把模板发给他,他不知道怎么替换原有的模板。其实这个问题对稍微懂织梦的来说很简单,可是对没有接触过的也是一个问
今天做网站的时候要求要好多分类,每个分类下边需要有文章,可是在考虑到用户体验方面。我就想如果加上当前栏目下边的条数 会让读者一幕了然; 所以我特意查了一下资料,在这分享给大家: 第一种方法 打开include/common.func.php文件 在最后的?之前加上 //