Как переделать 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. Я не исключаю опечаток и т.п., т.к. код восстановил по памяти. На этом собственно все.





© 2012-2014 Druweb.ru. Вы можете спокойно копировать любые материалы сайта только при наличии обратной ссылки.