Работая над одним проектом столкнулся с такой ситуацией
Имеется форма с тремя кнопками "SEARCH" и для каждой кнопки прописана своя callback функция
Но какую бы я кнопку не нажимал, всегда выполняется последний callback
Пример кода:
/**
* @param $form
* @param $form_state
*/
function sm_multisubmit_form($form, &$form_state) {
$form['text'] = array(
'#type' => 'textfield',
'#title' => t('Search keyword'),
'#description' => t('Input search keys'),
);
$form['submit_1'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_form_submit_1')
);
$form['submit_2'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_form_submit_2')
);
$form['submit_3'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_form_submit_3')
);
return $form;
}
/**
* @param $form
* @param $for_state
*/
function sm_multisubmit_form_submit_1(&$form, &$form_state) {
dpm($form_state, 'Выполнен обработчик: ' . __FUNCTION__);
}
/**
* @param $form
* @param $for_state
*/
function sm_multisubmit_form_submit_2(&$form, &$form_state) {
dpm($form_state, 'Выполнен обработчик: ' . __FUNCTION__);
}
/**
* @param $form
* @param $for_state
*/
function sm_multisubmit_form_submit_3(&$form, &$form_state) {
dpm($form_state, 'Выполнен обработчик: ' . __FUNCTION__);
}
Результат работы видно на этом изображении.
поэекспериминтировать можно тут
Не буду томить, расскажу секрет. Он прост - необходимо для каждого поля типа submit задать параметр #name и о чудо все заработает. Готовый кусок кода ниже, рабочий пример по ссылке
function sm_multisubmit_real_form($form, &$form_state) {
$form['text'] = array(
'#type' => 'textfield',
'#title' => t('Search keyword'),
'#description' => t('Input search keys'),
);
$form['submit_1'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_real_form_submit_1'),
'#name' => 'submit_2',
);
$form['submit_2'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_real_form_submit_2'),
'#name' => 'submit_2',
);
$form['submit_3'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#submit' => array('sm_multisubmit_real_form_submit_3'),
'#name' => 'submit_2',
);
return $form;
}

