Я пытаюсь реализовать поиск с помощью поиска CakeDC плагин. В этом поиске у меня есть поле, которое имеет 'multiple' => 'checkbox'
установлено. Это поле позволяет пользователю выбрать несколько городов, чтобы они могли фильтровать результаты по городам / городам. Что я сделал в пользу этого, я просто указал 'type' => 'IN'
для этого поля в Searchable
Model
«s $filterArgs
, Но, отметив, что это произошло, он просто ответил всем результатом, но поиск / фильтрация не произошло. Чтобы получить четкое представление о том, что я реализовал, здесь приведены фрагменты кода:
Model.php
public $actsAs = array(
'Search.Searchable'
);
public $filterArgs = array(
'city' => array(
'type' => 'in',
'field' => 'Model.city'
));
search_form.ctp
echo $this->Form->create('Model', array('url' => array('controller' => 'models', 'action' => 'search')));
echo $this->Form->input('city', array(
'multiple' => 'checkbox',
'options' => array(
'city1' => 'city1',
'city2' => 'city2',
'cityn' => 'cityn')
));
echo $this->Form->end('search');
ModelsController.php
public function search() {
$this->layout = 'front_common';
$this->Prg->commonProcess();
$this->Paginator->settings = array(
'conditions' => $this->Model->parseCriteria($this->Prg->parsedParams()),
'limit' => 10
);
$this->set('Data', $this->Paginator->paginate());
}
Также однажды я попытался использовать beforeFilter()
в ModelsController
взорвать city
array()
с (,)
использоваться с IN
но это же все результаты. Я хочу спросить, есть ли какой-либо другой плагин, чтобы сделать это или любой взлом, чтобы сделать это с поисковым плагином cakeDC. Пожалуйста помоги.
Это должно работать нормально, если вы передаете в аргумент parseCriteria()
как простой массив значений.
public $filterArgs = array(
array(
'name' => 'city',
'type' => 'value',
'field' => 'Model.city'
)
);
И вы должны быть в состоянии пройти city:houston|dallas|austin
в URL
Следует разобрать это в массив args => [city => [houston, dallas, austin]]
А также parseCriteria()
переведем это в следующий фрагмент условия: [Model.city => [houston, dallas, austin]]
И CakePHP изначально переводит это в SQL, где фрагмент: IN(houston, dallas, austin)
Используйте DebugKit и следите за своим SQL … вы можете debug()
на любом этапе процесса вы должны получить эти значения.
Вот полные документы по поисковому плагину:
https://github.com/CakeDC/search/tree/master/Docs/Documentation
(Я активно использую его, и мне нравится, как он позволяет мне организовывать все поисковые фильтры)
Других решений пока нет …