DropDown内容取决于多个其他DropDown值

时间:2014-05-15 10:57:54

标签: atk4 agiletoolkit

我又来了。我见过许多线程询问,如何根据其他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 '颜色'选项(例如,小'和'黑')的包。 我想,我需要一种方法来实现下拉列表dd1dd2中的值,并将其放入“重新加载字段”中。 $ _GET参数。然后从$ _GET中提取它并应用2个条件。但我还没有找到办法。谁能帮我?感谢。

...再见

1 个答案:

答案 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(),
   )
)