【发布时间】:2015-11-03 09:07:19
【问题描述】:
我想在我的网站上做一个搜索功能。这项研究将根据产品名称和卖家位置显示产品。 我的看法:
<?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 下再做一个if(!empty($this->request->query['searchCity']),但它没有用(复制粘贴第一个 if 并且我更改了条件)。
我该怎么办?
谢谢。
【问题讨论】: