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 に答える