Drupal 7 - несколько кнопок изображения в одной форме приводят к неправильному значению "clicked_button"
Таким образом, у меня есть форма, которая создает несколько кнопок управления для подтверждения, редактирования или удаления соответствующего элемента. Все кнопки являются кнопками изображений с разными обработчиками отправки, разными именами, идентификаторами и т. Д. Эта форма реплицируется для результатов вызова db_select, поэтому каждая возвращаемая строка имеет элементы управления формы.
Однако независимо от того, какую кнопку я нажимаю в форме, когда я проверяю обработчик отправки и распечатываю кнопку "clicked_button", значение всегда неверно... оно даже находится на неправильном элементе строки. Например, у меня есть row1 и row2, если я нажму кнопку строки два, она будет отображаться в другом обработчике, отличном от кнопки, на которой я нажал (редактировать или подтвердить), и идентификатор будет отображаться как "row1".
Вот код:
function mymodule_admin_controls($form,&$form_state, $row_id, $status){
$form['store']= array(
'#type' => 'value',
'#value' => $row_id,
);
if("PENDING" == $status){
$form['confirm'.$row_id] = array(
'#name' => 'confirm_btn_'.$row_id,
'#type' => 'image_button',
'#src' => 'images/check_16.png',
'#value' => 'Confirm',
'#submit' => array('mymodule_admin_controls_submit_confirm'),
'#attributes' => array('title' => 'Confirm'),
);
$form['edit'.$row_id] = array(
'#name' => 'edit_btn_'.$row_id,
'#type' => 'image_button',
'#src' => 'images/edit_16.png',
'#value' => 'Edit',
'#attributes' => array(
'class' => array('admin-controls'),
'title' => 'Edit'),
'#submit' => array('mymodule_admin_controls_submit_edit'),
);
}
if("PENDING" == $status || "CONFIRMED" == $status){
$form['delete'.$row_id] = array(
'#name' => 'delete_btn_'.$row_id,
'#type' => 'image_button',
'#src' => 'images/delete_16.png',
'#default_value' => 'Cancel',
'#attributes' => array('class' => array('admin-controls'),
'title' => 'Cancel'),
'#submit' => array('mymodule_admin_controls_submit_cancel'),
);
}else{
$form['statuschange_btn'.$row_id] = array(
'#name' => 'statuschange_btn_'.$row_id,
'#type' => 'image_button',
'#src' => 'images/previous_16png.png',
'#default_value' => 'Change Status',
'#attributes' => array(
'class' => array('admin-controls'),
'title' => 'Change Status'),
'#submit' => array('mymodule_admin_controls_submit_status'),
);
}
return $form;
}
В обработчиках отправки я сделал это для каждого
function mymodule_admin_controls_submit_confirm($form, &$form_state) {
$row_id = $form_state['values']['store'];
print '<pre>'; var_dump($row_id); print '</pre>';
print '<pre>'; print "Called mymodule_admin_controls_submit_confirm"; var_dump($form_state); print '</pre>';
exit;
}
Так что, если я нажал "изменить статус" для строки 2, она отобразится как "подтвердить" для строки 1, которая является первой кнопкой в форме. Вот возвращенные результаты от обработчика.
["clicked_button"]=>
array(24) {
["#name"]=>
string(14) "confirm_btn_11"
["#type"]=>
string(12) "image_button"
["#src"]=>
string(59) "images/check_16.png"
["#default_value"]=>
string(7) "Confirm"
["#submit"]=>
array(1) {
[0]=>
string(41) "mymodule_admin_controls_submit_confirm"
}
["#attributes"]=>
array(1) {
["title"]=>
string(7) "Confirm"
}
["#input"]=>
bool(true)
["#button_type"]=>
string(6) "submit"
["#executes_submit_callback"]=>
bool(true)
["#limit_validation_errors"]=>
bool(false)
["#process"]=>
array(1) {
[0]=>
string(17) "ajax_process_form"
}
["#return_value"]=>
bool(true)
["#has_garbage_value"]=>
bool(true)
["#theme_wrappers"]=>
array(1) {
[0]=>
string(12) "image_button"
}
["#defaults_loaded"]=>
bool(true)
["#tree"]=>
bool(false)
["#parents"]=>
array(1) {
[0]=>
string(9) "confirm11"
}
["#array_parents"]=>
array(1) {
[0]=>
string(9) "confirm11"
}
["#weight"]=>
float(0.001)
["#processed"]=>
bool(false)
["#required"]=>
bool(false)
["#title_display"]=>
string(6) "before"
["#id"]=>
string(14) "edit-confirm11"
["#value"]=>
NULL
}
Что я делаю неправильно?