В API формы Drupal 7 - Как мне создать ввод типа «кнопка» (не «отправить»)? - PullRequest
10 голосов
/ 03 января 2011

Я пытаюсь получить кнопку, которая не является типом кнопки "submit", а скорее является типом "button", используя api форм drupal 7, но, похоже, я не могу ее получить.

Я пробовал много вещей, таких как установка #type на 'button', установка #button_type на 'button', но независимо от того, что я делаю, drupal всегда создает кнопку типа "submit".

Ответы [ 6 ]

12 голосов
/ 26 апреля 2011

Вы можете использовать:

"#executes_submit_callback" => FALSE

Чтобы отключить шаг "submit".

Если вы хотите отключить только шаг "validate", используйте:

"#limit_validation_errors" => array()
3 голосов
/ 21 января 2015

В Drupal 7 это можно сделать, добавив:

'# attribute' => array ('onclick' => 'return (false);'),

к вашей кнопкеопределение.Например:

$form['my_form'] = array(
 '#type' => 'button',
 '#attributes' => array('onclick' => 'return (false);'),
 '#value' => t('My Button'),
 '#prefix' => t('<div class="myButton">'),
 '#suffix' => t('</div>')
);

Это сработало для моего приложения.

Ссылка: https://www.drupal.org/node/283065 в Отключение и переопределение кнопок

2 голосов
/ 21 февраля 2012

Очень простой побочный шаг в вашей форме:

$form['your-form-element'] = array(
    '#type' => 'button',
    '#name' => 'any-name',
    '#value' => t('Button Text'),
);

И в шаблоне вашей формы:

print str_replace('type="submit"', 'type="button"', drupal_render($form['your-form-element']));
2 голосов
/ 06 января 2011

Вы можете проверить эту проблему для некоторого фона и затем рассмотреть этот обходной путь . Вы также можете использовать # markup , чтобы вставить его вручную.

1 голос
/ 05 августа 2011

Добавьте следующую функцию в файл template.php вашего шаблона.

function templatename_button($variables) {
  $element = $variables['element'];
  $type = strtolower($element['#button_type']);
  switch($type){
    case 'submit':
    case 'reset':
    case 'button':
      break;
    default:
      $type = 'submit';
      break;
  }
  $element['#attributes']['type'] = $type;

  element_set_attributes($element, array('id', 'name', 'value'));

  $element['#attributes']['class'][] = 'form-' . $element['#button_type'];
  if (!empty($element['#attributes']['disabled'])) {
    $element['#attributes']['class'][] = 'form-button-disabled';
  }

  return '<input' . drupal_attributes($element['#attributes']) . ' />';
}

и в вашей форме

  $form['mybutton'] = array(
    '#type'  => 'button',
    '#value' =>  t('mytext'),
    '#button_type' => 'button',
  );
0 голосов
/ 02 апреля 2013

Иногда нам нужно определить кнопку по умолчанию для отправки формы, но все элементы кнопки (#type=button, submit) в drupal, атрибут TYPE всегда равен "submit", поэтому необходимо изменить этот атрибут на "button", которые указывают нужную нам кнопку по умолчанию.

  1. Визуализация элемента формы и замена атрибута TYPE.

    echo strtr(drupal_render($form['btn']), array('type="submit"' => 'type="button"'));

  2. Изменить определение формы.

    form['btn']['#attributes'] = array('onclick' => 'this.type="submit"');

...