Как определить разницу между несколькими кнопками изображения в одной и той же форме?
Используя FORMAPI для создания простого набора из трех кнопок image_buttons, в обработчике form_submit нет значения "op", установленного в $form_state, и поэтому невозможно определить, какая кнопка image_button была нажата. Является ли это ограничением кнопок image_buttons?
Вот что я использовал для создания формы, и это простой обработчик отправки, который не показывает никакой информации, сообщающей мне, какая кнопка была нажата:
function cex_dash_top_icons_block_form( $form_state ) {
$form = array();
global $base_url;
$projects_icon_path = '/'.drupal_get_path('module','cex_dash').'/Projects-icon-med.jpg';
$reporting_icon_path = '/'.drupal_get_path('module','cex_dash').'/Reporting-icon-med.jpg';
$help_icon_path = '/'.drupal_get_path('module','cex_dash').'/Help-icon-med.jpg';
$form['projects'] = array(
'#type' => 'image_button',
'#value' => 'Projects Dash',
'#src' => $projects_icon_path,
);
$form['reports'] = array(
'#type' => 'image_button',
'#value' => 'Analytics Dash',
'#src' => $reporting_icon_path
);
$form['help'] = array(
'#type' => 'image_button',
'#value' => 'Documentation Dash',
'#src' => $help_icon_path
);
return $form;
}
function cex_dash_top_icons_block_form_submit($form_id, &$form_state) {
_devReport( 'cex_dash_top_icons_block_form_submit: form_state is "'.print_r($form_state,1).'"' );
}
И независимо от того, какая кнопка нажата, $form_state['значения'] выглядит так это:
[values] => Array( [projects] => Projects Dash [reports] => Analytics Dash [help] => Documentation Dash [form_build_id] => form-b6c762d22d0fd2360d1804ef19043c7d [form_token] => 4f0ce5275cc923e8fb27c305b57bf414 [form_id] => cex_dash_top_icons_block_form )
Теперь в большем массиве $form_state
есть массив "clicked_button", но в нем всегда есть только информация для последней кнопки image_button.
Нужно ли создавать одну мини-форму для каждой кнопки image_button?
2 answers
Если вам просто нужно знать, какая кнопка была нажата, чтобы выполнить необходимое действие, то вам следует назначить другой обработчик отправки для каждой кнопки; см. Кнопки формы могут определять пользовательские обработчики #отправки и #проверки для получения более подробной информации.
Начиная с Drupal 6, элемент "op" в значениях формы, соответствующий кнопке, нажатой, когда в форме в Drupal 5.x их несколько, больше не следует полагаться и может отсутствовать; смотрите, что сообщается в элемент "op" в значениях формы устарел, и на него не следует полагаться.