0

我已经尝试了每一个简单的 cakedc 搜索设置,并按照之前帖子中的代码示例进行了操作,但它似乎对我不起作用。我不确定,但从我在数据库上运行的查询日志来看,似乎没有使用搜索字符串生成任何搜索查询。

当我尝试从 /books/search 搜索时,我没有得到关于我知道在数据库中的标题的结果,并且 URL 更改为 /books/index/title:sweet(我不确定这是否相关)。

任何帮助将非常感激。

模型

public $actsAs = array('Search.Searchable');
public $primaryKey = 'isbn13';

public $hasMany = array(
    'Contributor' => array (
        'className' => 'Contributor',
        'foreignKey' => 'isbn13'
        ),
    'Override' => array (
        'className' => 'Override',
        'foreignKey' => 'isbn13'
        )

);

public $filterArgs = array(
        'title' => array('type' => 'query', 'method' => 'filterTitle'),
         'main_desc' => array('type' => 'value')
);

public function filterTitle($data, $field = null) {
        if (empty($data['title'])) {
            return array();
        }
        $titleField = '%' . $data['title'] . '%';
        return array(
            'OR' => array(
                $this->alias . '.title LIKE' => $titleField,
                ));
}

控制器

class BooksController extends AppController {
public $helpers = array ('Html', 'Form');
public $paginate = array();
public $components = array('Search.Prg');
public $presetVars = true; 

public function index() {
    //get books
    $this->set('books', $this->Book->find('all'));

    //search
   /* $this->Prg->commonProcess();
    $this->paginate['conditions'] = $this->Book->parseCriteria($this->Prg->parsedParams());
    $this->set('books');
   */
}

 public function search($books = NULL) {
    $this->Prg->commonProcess();
    $this->paginate['conditions'] = $this->Book->parseCriteria($this->passedArgs);
    $this->set('books', $this->paginate());
}

看法

<h1>Search Results</h1> 
<?php
     echo $this->Form->create('Book'   , array(
        'url' => array_merge(array('action' => 'search'), $this->params['pass'])
        ));

    echo $this->Form->input('title', array('div' => false, 'empty' => true)); // empty       creates blank option.

    echo $this->Form->submit(__('Search', true), array('div' => false));
    echo $this->Form->end();

路线

Router::connect('/', array('controller' => 'books', 'action' => 'index'));

Router::connect('/index/*', array('controller' => 'books', 'action' => 'search'
 )); 

Router::connect('/view/:url', array('controller' => 'books', 'action' => 'view', array('url' => '[\w\W]*')
 ));
Router::connect('/edit/:url', array('controller' => 'books', 'action' => 'edit', array('url' => '[\w\W]*')
 ));
Router::connect('/whatsnew/*', array('controller' => 'books', 'action' => 'whatsnew'
 ));
Router::connect('/search/*', array('controller' => 'books', 'action' => 'search'
 )); 

我已将 search-master 文件夹重命名为 Search 并将其放在我的插件目录中,并在我的 bootstrap.php 中加载了插件

CakePlugin::load('Search');  
4

1 回答 1

0

固定的!需要

$this->set('books', $this->paginate($this->Book->parseCriteria($this->passedArgs)));' 

代替

$this->set('books', $this->paginate());'

在控制器中。虽然不知道为什么..

于 2013-09-27T14:32:25.780 回答