我想在我的网站上执行搜索功能。这项研究将根据产品名称和卖家的位置显示产品。 我的观点:用两个字段搜索不是强制性的
<?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('Y-m-d 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'])
下,如果我上面发布,但它没有工作(复制粘贴第一,如果和我改变了条件)。 我该怎么办?
谢谢。
感谢您的回复!我试着用插件,我有一个错误:“调用一个非对象成员函数paginate()”在我的控制器中用$ this-> set('products',$ this-> Paginator-> paginate ));' –
而searchCity需要在另一个模型中搜索。可能吗? –
在$组件中添加Paginator,就像我添加了 –