Drupal → Использование в формах элемента

17.11.2015

Как уже писал ранее, в Form API доступны три вида кнопок:

<input type="submit" />
<input type="button" />
<input type="image" />

Если же в форме нужно использовать элемент <button type="submit">...</button>, то можно поступить так:

1. Определить шаблон button_button:

/**
 * Implements hook_theme().
 */
function THEMENAME_theme() {
  return array(
    'button_button' => array(
      'render element' => 'element',
    ),
  );
}

/**
 * Button theme function.
 * @see theme_button().
 */
function THEMENAME_button_button($variables) {
  $element = $variables['element'];
  $element['#attributes']['type'] = 'submit';
  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';
  }

  if (empty($element['#text'])) {
    $element['#text'] = $element['#value'];
  }

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

2. В форме добавить кнопке свойство '#theme_wrappers' => array('button_button'):

/**
 * Form builder.
 */
function mymodule_myform($form, &$form_state) {
  ...
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Add') . ' <span class="icon icon-add"></span>',
    '#theme_wrappers' => array('button_button'),
  );
  ...
}
Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Гость
17.11.2015, 20:13

Огромная благодарность за науку, но можно хотя бы намек когда нам это может пригодиться. Спасибо.

в примере есть намёк - вывод иконки в тексте кнопки

Гость
17.11.2015, 22:50

если использовать bootstrap в качестве base theme, этот функционал подключается автоматом.

как по мне, таки удобнее button чем input.

Для вывода иконки достаточно сделать так:

$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Add'),
    '#attributes'=> array('class'=>array('pay-button'))
  );

И CSS:

.pay-button{
  background-image:url(../credit_card.png);
  background-repeat:no-repeat;
  background-position: left center;
  height:52px;
  padding-left:52px;
}

ничёси, а в бустрапе то не знают, что можно выводить иконки в бэкграунде

THEMENAME и mymodule какая связь?
Код модуля с перекрытой формой работать будет только в 1й теме?

федор
11.11.2019, 14:15

Здравствуйте, сделал кнопку, но она не срабатывает для самой формы почему то, просто идете перезагрузка страницы.

function concut_form_webform_client_form_20_alter(&$form, &$form_state, $form_id) {
//убрал старую кнопку
	$form['actions']['submit']  = array();
//добавил новую
	$form['submit'] = array(
    '#type' => 'submit',
    '#text' => 'Заказать звонок',
	'#class' => 'whiteButton',
    '#theme_wrappers' => array('button_button'),
	);
} 

все равно светится старая кнопка в дебагере:

[actions] => Array
        (
            [#type] => actions
            [#weight] => 1000
            [#pre_render] => Array
                (
                    [0] => webform_pre_render_remove_id
                )

            [submit] => Array
                (
                    [#type] => submit
                    [#value] => Заказать звонок
                    [#weight] => 10
                    [#attributes] => Array
                        (
                            [class] => Array
                                (
                                    [0] => webform-submit
                                    [1] => button-primary
                                )

                        )

                    [#pre_render] => Array
                        (
                            [0] => webform_pre_render_remove_id
                        )

                )

        )

Добавить комментарий