在Codeigniter中搜索标签

时间:2018-01-05 01:26:25

标签: php codeigniter

大家好,搜索无效。例如,当您搜索Php或Ajax时,标签包含Php,Ajax,HTML 5,但是如果您搜索两个或更多单词,例如HTML 5则没有结果。

我的型号代码:

public function getTagsMatch($limit=null, $tags, $offset=null) {
        $match = $tags;
        $this->db->from('threads');
        $this->db->where('status', 1);
        $search_query_values = explode(' ', $match);
        $counter = 0;
        foreach ($search_query_values as $key => $value) {
        if ($counter == 0) {
            $this->db->like('tags', $value);
        }
            $counter++;
        }
        $this->db->order_by('pin_post', 'DESC');
        $this->db->order_by('id', 'DESC');
        $this->db->limit($limit);
        $this->db->offset($offset);
        $query = $this->db->get();
        return $query->result_array(); 
    } 

2 个答案:

答案 0 :(得分:2)

嗯...

$search_query_values = explode(' ', $match);

此行包含查询值和" explodes"使用空格的字符串。因此,如果您输入" HTML 5",它实际上会搜索像" HTML"等标签。或" 5"。考虑使用不同的角色进行爆炸。

例如:

$search_query_values = explode(',', $match);

函数调用将是这样的:

getTagsMatch(NULL, 'Ajax,HTML 5,PHP', NULL);

还有一些说明:

  1. 默认参数应位于参数列表的末尾(function foo(bar0, bar1=0, bar2='') { ... },而不是随机放置)。
  2. 考虑使用较少的变量。绝对没有理由拥有$tags$match $search_query_values - 一个就足够了。您可能会考虑使用3个变量作为语义优势,但它实际上会使您的代码更难以阅读。

答案 1 :(得分:1)

问题出在我的控制器上,因为。我自定义标签,但事实是我有一个麻烦如何解释这个,因为我不善于解释这样的事情。我将发布一些代码并附上一些解释。

我的代码搜索将基于什么是标签slug,例如website.com/tags/html-5

所以我的控制器代码:

public function tags($tags) {
  $tag = search_title($tags);
  $data['result'] = $this->topic_model->getTagsMatch($tag);
}

和我的search_title功能代码:

function search_title($str, $separator = '&nbsp') {
        $str = ucwords(strtolower($str));

        foreach (array('-', '\'') as $delimiter) {
            if (strpos($str, $delimiter)!==false) 
            {
                $str =implode($delimiter, array_map('ucfirst', explode($delimiter, $str)));
            }
        }
        $str = str_replace('-','&nbsp',$str); 
        $str = str_replace('%20','&nbsp',$str); 
        $str = str_replace('%26','&',$str); 
        $str = str_replace('%27','&nbsp',$str); 
        $str = str_replace('%28','&nbsp',$str); 
        $str = str_replace('%29','&nbsp',$str); 
        return trim(stripslashes($str));
    }

问题就在这一行

$data['result'] = $this->topic_model->getTagsMatch($tag);

所以我将 $ tag 更改为 str_replace(“ - ”,“”,$ tags)