Я хотел бы выполнить функцию поиска на своем веб-сайте. В этом исследовании будут показаны продукты, основанные на названии продукта и его местонахождении. Мой взгляд :
<?php echo $this->Form->create('Product', array('type' => 'GET')); ?> <div class="col col-sm-4"> <?php echo $this->Form->input('search', array('label' => false, 'div' => false, 'class' => 'form-control', 'autocomplete' => 'off', 'value' => $search)); ?> </div> <div class="col col-sm-2"> <?php echo $this->Form->input('searchCity', array('label' => false, 'div' => false, 'class' => 'form-control', 'autocomplete' => 'off')); ?> </div> <div class="col col-sm-3"> <?php echo $this->Form->button('Search', array('div' => false, 'class' => 'btn btn-sm btn-primary')); ?> </div> <?php echo $this->Form->end(); ?>
Два поля поиска: одно для имени и второе для местоположения.
Мой контроллер (работал только для одного поля поиска):
if(!empty($this->request->query['search']) || !empty($this->request->data['name'])) { $search = empty($this->request->query['search']) ? $this->request->data['name'] : $this->request->query['search']; $search = preg_replace('/[^a-zA-Z0-9 ]/', '', $search); $terms = explode(' ', trim($search)); $terms = array_diff($terms, array('')); $conditions = array( 'Brand.active' => 1, 'Product.active' => 1, 'Product.date_discount >' => date('Ymd H:i:s') ); foreach($terms as $term) { $terms1[] = preg_replace('/[^a-zA-Z0-9]/', '', $term); $conditions[] = array( 'OR' => array( array('Product.name LIKE' => '%' . $term . '%'), //array('Brand.city LIKE' => '%' . $this->request->query['searchCity'] . '%') ) ); } $products = $this->Product->find('all', array( 'recursive' => -1, 'contain' => array( 'Brand' ), 'conditions' => $conditions, 'limit' => 200, )); if(count($products) == 1) { return $this->redirect(array('controller' => 'products', 'action' => 'view', 'slug' => $products[0]['Product']['slug'])); } $terms1 = array_diff($terms1, array('')); $this->set(compact('products', 'terms1')); }
Никакие поля поиска не являются обязательными. Если используется только поле поиска имени, оно отображает все продукты на основе имени продукта независимо от местоположения. Если только поле поиска города, оно покажет все продукты в местоположении. Если и то, и другое, он отобразит все продукты на основе имени и местоположения.
Я не знаю, что изменить, чтобы сделать это. Я попытался сделать еще один if(!empty($this->request->query['searchCity'])
если я разместил выше, но это не сработало (скопируйте вставьте первые, если и я изменил условия). Я делаю?
Благодарю.