Як переробити input type=’submit’ в button на Drupal або переноси рядків в Opera
Отже, почну з короткою передісторії. Переробити кнопки в деяких формах Drupal на елементах типу <input type=’submit’ value=’Наступне питання’ name=’nex_question’ /> на <button name=”next_question”>Наступне питання</button> мене змусило те, що в заголовках кнопок реалізованого проекту текст міг бути досить довгим, а сабміт у всю ширину екрану мене не влаштовував (точніше веб-дизайнер надіслав такий PSD-макети).
Плюс виявилося дуже неприємним сюрпризом таке явище, як перенесення рядка: в инпутах він не працював в браузері Opera.
Стандартно баттони, – цікава справа в цій CMS не були передбачені в якості елементів Form API, а писати новий елемент не мало ніякого сенсу. У результаті вийшло ось таке рішення, дивимося нижче:
<?php
/**
* Реалізація THEME_button():
*/
function druwebru_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 (isset($element[‘#buttontype’]) && $element[‘#buttontype’] == ‘button’) {
$value = $element[‘#value’];
unset($element[‘#attributes’][‘value’]);
return ‘<button’ . drupal_attributes($element[‘#attributes’]) . ‘>’ . $value . ‘</button>’;
} else {
return $element[‘#prefix’] . ‘<input ‘ . drupal_attributes($element[‘#attributes’]) . ‘/>’ . $element[‘#suffix’];
}
}
?>
Отже, вийшло наступне: до ипуту я додав нову властивість #buttontype при заповненні, якого елемент стає нормальним баттоном. Приклад використання з новим властивістю дивимося трохи нижче:
<?php
$form[‘actions’][‘question_blablabla’] = array(
‘#buttontype’ => ‘button’,
‘#type’ => ‘submit’,
‘#value’ => $answer->answer,
// …
);
?>
P. S. Я не виключаю помилок і т. п., т. к. код відновив по пам’яті. На цьому, власне, все.