FAQ #50
Question: How do I implement a fulltext search?
Answer: Pass the fulltext subquery as a conditions array element.
Example:
<?php
class SearchController extends AppController {
var $uses=array('Link');
function index(){
$this->set('title_for_layout',"Search results");
$query=(isset($this->data['Search']['q']))?$this->data['Search']['q']:'';
if(!$query) $query=(isset($this->params['url']['q']))?$this->params['url']['q']:'';
if(!$query){
$this->Session->setFlash(__("Invalid or empty search string",true));
}
else{
App::import('Sanitize');
$this->set('query',$query);
$query=Sanitize::escape($query);
$this->paginate = array(
'conditions' => array('Link.status'=>1,
"MATCH(Link.title,Link.description) AGAINST('$query' IN BOOLEAN MODE)"
),
'recursive'=>-1,
'limit'=>10,
);
$this->set('links', $this->paginate('Link'));
}
}
} //end of class
/*EOF*/
class SearchController extends AppController {
var $uses=array('Link');
function index(){
$this->set('title_for_layout',"Search results");
$query=(isset($this->data['Search']['q']))?$this->data['Search']['q']:'';
if(!$query) $query=(isset($this->params['url']['q']))?$this->params['url']['q']:'';
if(!$query){
$this->Session->setFlash(__("Invalid or empty search string",true));
}
else{
App::import('Sanitize');
$this->set('query',$query);
$query=Sanitize::escape($query);
$this->paginate = array(
'conditions' => array('Link.status'=>1,
"MATCH(Link.title,Link.description) AGAINST('$query' IN BOOLEAN MODE)"
),
'recursive'=>-1,
'limit'=>10,
);
$this->set('links', $this->paginate('Link'));
}
}
} //end of class
/*EOF*/
Warning:
The example above is insufficient to implement a real search function, as Cake's pagination functionality does not have built-in support for passing query strings to the next page. For such purposes, you need to add a bit of code to your view to make pagination work correctly. See the full search example in FAQ #51 (link below)
Related Faq:How do I add a search engine on my Cakephp site?
Category:Controller
2nd Category:Model