Как отображать результаты поиска только при необходимости в cakephp? - PullRequest
0 голосов
/ 02 ноября 2011

У меня следующая ситуация, когда я хочу отображать результаты поиска только тогда, когда пользователь что-то ищет. В настоящее время, когда я захожу на свою страницу поиска, отображаются все результаты поиска, и если пользователь ищет определенную вещь, он отображает это соответственно. Ниже приведен код в моем контроллере поиска. Я добавил нумерацию страниц для разбивки на страницы. function simple_search () {

        $this->User->recursive = 1; 
        $this->Passion->recursive = 1; 
        $this->User->unBindModel(array('hasMany' => array('Topic','Post')),false); 

        $conditions = array(); 
        $options; 

        $or_conditions = array(); 
        $final_conditions = array(); 
        $search_fields = array('User.firstName', 'User.lastName', 'User.email', 'User.displayName'); //fields to search 'Video.tags','Video.desc' 
        $this->layout = "mainLayout"; 

        $value=''; 

         if(!empty($this->params["url"]["value"])){ 
            $value = $this->params["url"]["value"]; 
        } 

        $searches = explode(" ", $value); 
        foreach ($search_fields as $f) { 
            array_push($conditions, array("$f Like" => "$value%")); 
            for ($i = 0; $i < count($searches); $i++) { 
                if ($searches[$i] != "") { 
                    array_push($conditions, array("$f Like" => "$searches[$i]%")); 
                } 
            } 

            array_push($or_conditions, array('OR' => $conditions)); 
            $conditions = array(); 
        } 
        $final_conditions = array('OR' => $or_conditions); 
       $users = $this->User->find('all', $final_conditions); 
       $this->paginate = array( 
            'conditions' => $final_conditions, 
            'limit' => 10 
        ); 
        $users = $this->paginate('User'); 
        $this->set('search_fields', $users); 
    } 

1 Ответ

1 голос
/ 02 ноября 2011

Почему вы делаете поиск («все»)?Через несколько строк paginate () переопределяет результат.

пусто ($ this-> params ['url'] ['value'] отметьте это и установите свои результаты в представление только в том случае, если оно не пустое.

Следуйте стандарту кодирования для CakePHP и используйте имена переменных camelCased вместо подчеркивания. http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html

Также вам может понадобиться взглянуть на это. https://github.com/CakeDC/search

И при этом (показывая поиск кустума с помощью поискового плагина) https://github.com/CakeDC/users/blob/master/controllers/users_controller.php#L316 https://github.com/CakeDC/users/blob/master/models/user.php#L557

...