2014-12-01 4 views
0

Я использую плагин поиска cakeDC в своем приложении. can; t похоже на то, почему результаты пустые, если я не передаю значение в поле имени пользователя, которое я ищу, но у вас есть фильтр типа учетной записи, установленный либо администратором, либо пользователем. Для записи, когда фильтр установлен для всех с помощью пустое поле пользователя выводит всех пользователей в системе, пытаясь реплицировать поведение поисков, у которых фильтр типа учетной записи установлен на все с пустым полем поиска имени пользователя, для того, чтобы фильтр типа учетной записи устанавливался либо на 2 пользовательских типа.фильтрация cakedc результаты поиска

соответствующий код, если это необходимо:

контроллер

public $components = array('Paginator', 'Session','Search.Prg'); 
public $presetVars = array(
array('field' => 'username', 'type' => 'value'), 
array('field' => 'account_type', 'type' => 'value')); 
public function admin_index() { 
    $this->Prg->commonProcess(); 
    $this->paginate = array(
     'conditions' => $this->User->parseCriteria($this->passedArgs)); 
    $this->set('users', $this->Paginator->paginate(),'session',$this->Session); 

модель

public $actsAs = array('Search.Searchable'); 

    public $filterArgs = array( array('name' => 'username', 'type' => 'query', 'method' => 'filterName'), 
     array('name' => 'account_type', 'type' => 'value'), 
    ); 

    public function filterName($data, $field = null) { 

     $nameField = '%' . $data['username'] . '%'; 
     return array(
      'OR' => array(
       $this->alias . '.username LIKE' => $nameField, 
       )); 
    } 

вид формы поиска

<div><?php echo $this->Form->create('User', array(
     'novalidate' =>true,'url' => array_merge(array('action' => 'index','admin'=> true), $this->params['pass']) 
     )); ?> 
    <?php 
    $account_types = array(
       '' => __('All', true), 
       0 => __('admin', true), 
       1 => __('user', true),); 
    echo $this->Form->input('username', array('div' => false, 'empty' => true)); // empty creates blank option. 
    echo $this->Form->input('account_type', array('label' => 'account_type', 'options' => $account_types)); 
    echo $this->Form->submit(__('Search', true), array('div' => false)); 
    echo $this->Form->end(); 
?></div> 
+0

«OR» в ваших возвращенных условиях не имеет большого смысла, так как есть только 1 проверка (имя пользователя LIKE). – Oldskool

ответ

0

Попытка поставить 'пустой' и allowEmpty в имя пользователя и ACCOUNT_TYPE так:

public $filterArgs = array( array('name' => 'username', 'type' => 'query', 'method' => 'filterName', 'empty'=>true, 'allowEmpty'=>true), 
    array('name' => 'account_type', 'type' => 'value','empty'=>true, 'allowEmpty'=>true), 
); 

Я имел такого рода поведение, а также от CakeDC/search, и эти две конфиги спасли меня, надеюсь, что это сработает и для вас.

Рекомендуется также проверять выполняемые запросы, используя DebugKit.Toolbar.

Смежные вопросы