В API формы Drupal 7. Как создать кнопку ввода типа (не отправлять)?

Я пытаюсь иметь кнопку, которая не является кнопкой «отправить», а скорее обычным типом «кнопки», используя формы API drupal 7, но я не могу ее получить.

Я пробовал много вещей, например, установить #type на «кнопку», установить #button_type на «кнопку», но независимо от того, что я делаю, drupal всегда создает кнопку типа «отправить».


person Doron    schedule 03.01.2011    source источник
comment
Это не работает? api.drupal.org/api/drupal/   -  person Kevin    schedule 03.01.2011
comment
Неа. Цитата со страницы: при нажатии кнопки форма будет отправлена ​​​​в Drupal, где она проверяется и перестраивается.   -  person Doron    schedule 03.01.2011
comment
Ой. Я предполагаю, что его поведение по умолчанию состоит в том, чтобы сделать кнопку действием, а не просто кнопкой.   -  person Kevin    schedule 03.01.2011


Ответы (6)


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

person Matt V.    schedule 06.01.2011

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

"#executes_submit_callback" => FALSE

Чтобы отключить шаг «отправить».

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

"#limit_validation_errors" => array()
person J. Costa    schedule 26.04.2011
comment
Это было такое простое и эффективное решение! - person Professor Falken; 24.02.2012

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

'#attributes' => 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 в разделе Отключение и Переопределение кнопок

person Susanne    schedule 21.01.2015

Очень простой побочный шаг - это следующее в вашей форме

$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']));
person badzilla    schedule 21.02.2012
comment
Чтобы добавить к моему предыдущему примеру - это версия Drupal 6. В Drupal 7 измените drupal_render на render - person badzilla; 27.09.2012

Добавьте следующую функцию в файл 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',
  );
person Vincent    schedule 04.08.2011

Иногда нам нужно определить кнопку по умолчанию для отправки формы, но все элементы кнопки (#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"');

person user2235510    schedule 02.04.2013