Содержание DropDown в зависимости от нескольких других значений 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
будут заполнены пакетами, которые соответствуют "размеру" ИЛИ опции "цвета". Но мне нужно, чтобы выпадающий dd3
будет заполнен пакетами, которые соответствуют параметрам "size" и "color" (например, "small" и "black"). Я думаю, мне нужен способ достижения значений из обоих выпадающих dd1
а также dd2
и поместите его в аргумент $_GET 'reloadField'. Затем извлеките его из $_GET и примените 2 условия. Но я еще не нашел способ. Может кто-нибудь мне помочь? Благодарю.
До свидания...
1 ответ
Описание
Параметры для atk4_form
являются следующие:
->atk4_form($js_method, $param1, $param2, $param3, ...)
Как результат метод JS $js_method
от ui.atk4_form.js
будет называться так:
->$js_method($param1, $param2, $param3, ...)
Если метод, который вы используете $js_method = 'reloadField'
тогда вы можете иметь следующие параметры:
reloadField: function(field_name, url, fn, notrigger, arg)
Таким образом, вы можете передавать аргументы URL одним (или обоими) двумя способами - используя url
параметр или использование arg
параметр.
Решение
Поэтому одно из этих решений должно работать на вас.
Передайте параметры URL, уже включенные в URL (используя 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(),
))
)
или сгенерируйте URL динамически, используя JS (это правильный путь):
->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(),
)
)