我使用CakePHP 2.1和cakedc搜索插件。
事情是我不能把它粘起来。 也得到了:
Notice (8): Indirect modification of overloaded property ProjectsController::$paginate has no effect [APP\Controller\ProjectsController.php, line 48]
其次cakedc教程,但有些事情在失踪了! 简单的搜索就不会过滤嘴。
我想通过名称字段进行过滤。
我的项目模型
public $actsAs = array('Search.Searchable');
var $name = 'Project';
public $filterArgs = array(
array('name' => 'name', 'type' => 'like'),
array('name' => 'filter', 'type' => 'query', 'method' => 'orConditions'),
);
public function orConditions($data = array()) {
$filter = $data['filter'];
$cond = array(
'OR' => array(
$this->alias . '.name LIKE' => '%' . $filter . '%',
//$this->alias . '.body LIKE' => '%' . $filter . '%',
));
return $cond;
}
在我的控制器:
public $components = array('Search.Prg');
public $presetVars = array(
array('field' => 'name', 'type' => 'value')
);
指数函数更新为使用index.ctp(不使用查找功能)
public function index() {
$this->Prg->commonProcess();
$this->Project->recursive = 0;
// next line causes
// Notice (8): Indirect modification of overloaded property ProjectsController::$paginate has no effect [APP\Controller\ProjectsController.php, line 48]
//$this->paginate['conditions'] = $this->Project->parseCriteria($this->passedArgs);
$this->set('projects', $this->paginate());
}
并添加搜索表单到view.ctp
echo $this->Form->create('Project', array('url' => array_merge(array('action' => 'index'), $this->params['pass'])));
echo $this->Form->input('name', array('div' => false));
echo $this->Form->submit(__('Search', true), array('div' => false));
echo $this->Form->end();
我知道这一定是我的一部分了一些明显的错误,请多多包涵。 任何人都可以帮忙吗?
非常感谢 !
我很高兴让人们知道,我发现我的方式来使用cakedc搜索插件。
首先,我不得不密切关注本教程为1.3(起初我以为它不会做2.1,但它的作品般的魅力。)
http://www.youtube.com/watch?v=FAVuLXFVaCw
并下载1.3示例代码cakedc http://cakedc.com/eng/downloads/view/cakephp_search_plugin
制作视频教程的感觉。 (试图运行它下面的自述文件说明,但得到的错误致命错误:类“调度”用C未找到:\ WAMP \ WWW \搜索\ webroot的\的index.php上线83所以选择了刚刚获得的代码片段,并让他们在工作2.1)
回到我的项目:
从cakedc 1.-下载搜索2.1版https://github.com/CakeDC/search ,
文件CakeDC-search-2.1-0-g834f79f.zip。
2:上放置/插件/搜索/文件夹中的所有文件
3 .-添加
CakePlugin::load('Search');
到/Config/bootstrap.php底部
4.-在我的控制器,宣称该组件并presetVars(我使用一个域名为名称)
public $components = array('Search.Prg');
public $presetVars = array(
array('field' => 'name', 'type' => 'value'),
array('field' => 'pr_status', 'type' => 'value'),
);
5.-和更新我的索引功能:
public function index() {
$this->Prg->commonProcess();
$this->paginate = array(
'conditions' => $this->Project->parseCriteria($this->passedArgs));
$this->set('projects', $this->paginate());
}
6.-在我的模型,添加
public $actsAs = array('Search.Searchable');
public $filterArgs = array(
array('name' => 'name', 'type' => 'query', 'method' => 'filterName'),
array('name' => 'pr_status', 'type' => 'value'),
);
public function filterName($data, $field = null) {
if (empty($data['name'])) {
return array();
}
$nameField = '%' . $data['name'] . '%';
return array(
'OR' => array(
$this->alias . '.name LIKE' => $nameField,
));
}
// Built a list of search options (unless you have this list somewhere else)
public function __construct($id = false, $table = null, $ds = null) {
$this->statuses = array(
'' => __('All', true),
0 => __('Bid', true),
1 => __('Cancelled', true),
2 => __('Approved', true),
3 => __('On Setup', true),
4 => __('Field', true),
5 => __('Closed', true),
6 => __('Other', true));
parent::__construct($id, $table, $ds);
}
7.-最后,创建了index.ctp搜索表单,右表标签上方
<div><?php
echo $this->Form->create('Project', array(
'url' => array_merge(array('action' => 'index'), $this->params['pass'])
));
echo $this->Form->input('name', array('div' => false, 'empty' => true)); // empty creates blank option.
echo $this->Form->input('pr_status', array('label' => 'Status', 'options' => $statuses));
echo $this->Form->submit(__('Search', true), array('div' => false));
echo $this->Form->end();
?>
</div>
我也学会了不即使我使用的2.1〜1.3丢弃教程和文档。 下一步是日期和一个更好的搜索表单进行过滤。
祝你好运大家。
卡洛斯