【发布时间】:2010-09-14 00:31:06
【问题描述】:
我的业务目录应用程序需要 3 个链接的选择框,我正在使用 cakephp 来构建这个应用程序。
各部分的层次结构和选择顺序如下:
1 - 业务组
2 - 业务类型
3 - 城市(包括在表客户中)
关系是:
客户 HABTM 业务类型
业务组有多种业务类型
业务类型有一个业务组,HABTM 客户
我已经搜索了有助于解决此问题的 jquery 插件,并找到了一个由 Remy Sharp 提供的插件,但它没有我所拥有的更复杂的关系。 http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/
我想发生的是第一个选择框(业务组)是预先填充的,一旦做出选择,事件侦听器就会发送一条消息来过滤第二个选择框,第三个选择框也是如此。
我不知道的是如何根据事件监听器来构造搜索动作。
有什么建议还是我离谱?
和往常一样,我来井旁寻求帮助。
非常感谢。 保罗
非常感谢尼克,我已经阅读了您的许多帖子,非常感谢您的回复。
我已按照您的指示进行操作,但遇到了问题。我已经尽力解决它们,但还没有弄清楚。
这是我到目前为止所做的:
1) 在 business_type 和 business_directory 中创建“链式”操作(将客户重命名为业务目录,这样更合适。)
业务类型链式操作:
function chained($business_group_id) {
$business_types = $this->BusinessType->find('list', array(
'conditions' => array( 'BusinessType.business_group_id' => $business_group_id)
));
$this->set('business_types', $business_types);
}
企业目录链接操作:
function chained($business_type_id) {
$business_directories = $this->BusinessDirectory->bindModel(array( 'hasOne' => array('business_directories_business_types' )));
$business_directories = $this->BusinessDirectory->find('all', array(
'fields' => array( ' BusinessDirectory.city'),
'conditions' => array( 'business_directories_business_types.business_type_id' => $business_type_id)
));
$this->set('business_directories', $business_directories);
}
我确实发现在 HABTM 关系中,使用 find 'list' 并没有创建连接查询,而 find 'all' 则可以。
2) 然后我在业务目录和相应视图中创建了一个搜索操作。
对于业务组,我创建了一个 getList 操作来填充搜索表单中的选项列表:
function getList() {
return $this->BusinessGroup->find('list');
}
在搜索视图中,我为链选择添加了 javascript:
<script type="text/javascript">
<!--
$(function () {
var group = $('#businessGoup');
var type = $('#businessType');
var city = $('#businessDirectoryCity');
type.selectChain({
target: city,
url: '../business_directories/chained/'+$(this).val(),
data: { ajax: true, anotherval: "anotherAction" }
});
group.selectChain({
target: type,
url: '../business_types/chained/'+$(this).val()
}).trigger('change');
});
//-->
</script>
还有形式:
create('business_directories', array('action'=>'/search_results')); ?> 输入('business_group_id', 数组(“类型”=>“选择”, 'id' => 'businessGoup', 'empty' => '-- 选择业务组 --', '多个' => 真, 'options' => $this->requestAction('/business_groups/getList' ), '标签' => '业务组')); ?> 输入('business_type.id', 数组(“类型”=>“选择”, 'id' => 'businessType', 'empty' => '-- 选择业务类型--', '多个' => 真, '选项' => '未选择', '标签' => '业务类型')); ?> 输入('business_directories.id', 数组(“类型”=>“选择”, 'id' => 'businessDirectoryCity', 'empty' => '-- 选择城市--', '多个' => 真, '选项' => '选项', '标签' => '城市')); ?> end('搜索'); ?>当我测试业务类型链函数 /business_types/chained/1 时,一切正常。
但是当我测试搜索视图时,我收到一个 javascript 警报错误。然后当我检查firebug时,我得到以下两个错误:
警告 (2):缺少 BusinessTypesController::chained() 的参数 1 [APP\controllers\business_types_controller.php,第 71 行]
注意(8):未定义变量:business_group_id [APP\controllers\business_types_controller.php, line 73]
非常感谢任何额外的帮助。
谢谢,保罗
【问题讨论】:
-
看起来您没有在操作中传递变量。即 function chained($business_group_id) 没有参数 $business_group_id 并且第二个错误是后续的。使用 firebug 检查选择元素后触发的 url 是什么。我相信它会类似于:/business_directories/chained/undefined。您的代码中有非常糟糕的做法,但我不会讨论它们。但请务必尝试用控制器中的常规变量替换 requestAction。毕竟这是一个清单。我希望您将响应转换为格式正确的字符串,如演示所示。