Как определить разницу между несколькими кнопками изображения в одной и той же форме?


Используя 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?

 1
Author: kiamlaluno, 2011-05-07

2 answers

Этот вопрос о drupal.org может помочь.

 1
Author: Dipen, 2011-05-07 00:53:57

Если вам просто нужно знать, какая кнопка была нажата, чтобы выполнить необходимое действие, то вам следует назначить другой обработчик отправки для каждой кнопки; см. Кнопки формы могут определять пользовательские обработчики #отправки и #проверки для получения более подробной информации.
Начиная с Drupal 6, элемент "op" в значениях формы, соответствующий кнопке, нажатой, когда в форме в Drupal 5.x их несколько, больше не следует полагаться и может отсутствовать; смотрите, что сообщается в элемент "op" в значениях формы устарел, и на него не следует полагаться.

 1
Author: kiamlaluno, 2011-05-07 02:35:09