我又来了。我见过许多线程询问,如何根据其他Dropdown值创建内容下拉列表。这些逻辑也适用于我。但现在我遇到了问题,下拉列表的内容取决于其他2个下拉列表的选择/值。依赖于一个Dropdown的代码如下所示:
$form = $crud->form;
$dd1 = $form->addField('dropdown', 'color', 'Color');
$dd1->setValueList(array('1' => 'white', '2' => 'black'));
$dd1->setEmptyText('all');
$dd2 = $form->addField('dropdown', 'size', 'Size');
$dd2->setValueList(array('1' => 'small', '2' => 'normal', '3' => 'large'));
$dd2->setModel('Size');
$dd3 = $form->getElement('packaging_id');
if ($_GET['color']) {
$dd3->model->addCondition('color', $_GET['color']);
}
if ($_GET['size']) {
$dd3->model->addCondition('size', $_GET['size']);
}
$dd1->js('change',
$form->js()->atk4_form('reloadField', 'packaging_id',
array($this->api->url(), 'color' => $dd1->js()->val())
)
);
$dd2->js('change',
$form->js()->atk4_form('reloadField', 'packaging_id',
array($this->api->url(), 'size' => $dd2->js()->val())
)
);
使用这些代码,下拉列表dd3
将填充与“' size”匹配的软件包。 或'颜色'选项。但我需要的是,下拉列表dd3
将填充包,这些包与“' size' AND '颜色'选项(例如,小'和'黑')的包。
我想,我需要一种方法来实现下拉列表dd1
和dd2
中的值,并将其放入“重新加载字段”中。 $ _GET参数。然后从$ _GET中提取它并应用2个条件。但我还没有找到办法。谁能帮我?感谢。
...再见
答案 0 :(得分:2)
atk4_form
的参数如下:
->atk4_form($js_method, $param1, $param2, $param3, ...)
结果,来自$js_method
的JS方法ui.atk4_form.js
将被调用如下:
->$js_method($param1, $param2, $param3, ...)
如果您使用的方法是$js_method = 'reloadField'
,那么您可以使用以下参数:
reloadField: function(field_name, url, fn, notrigger, arg)
所以你可以用两种方式中的一种(或两种)传递URL参数 - 使用url
参数或使用arg
参数。
因此,其中一个解决方案应该适合您。
传递已包含在网址中的网址参数(使用PHP,错误的方法):
->atk4_form(
'reloadField',
'packaging_id',
$this->api->url(null, array( /* base URL + additional parameters, formatted by PHP */
'color' => $dd1->js()->val(),
'size' => $dd2->js()->val(),
))
)
或使用JS动态生成URL(这是正确的方式):
->atk4_form(
'reloadField',
'packaging_id',
$this->api->url(), /* base URL */
null,
null,
array( /* additional parameters formatted by JS */
'color' => $dd1->js()->val(),
'size' => $dd2->js()->val(),
)
)