Работая над одним проектом столкнулся с такой ситуацией
Имеется форма с тремя кнопками "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; }