Модификация форм в Drupal

Главные вкладки

Аватар пользователя neochief neochief 15 августа 2008 в 8:46

Друпал содержит множество всевозможных форм. Иногда, не все они выглядят так, как бы вам хотелось. Изменение друпаловских форм это тема, которую многие разработчики встречают дружными стонами неудовольствия и непонимания. Между тем, достаточно уяснить всего два метода их изменения и все становится намного яснее и проще.

Краткое содержание:

  1. Аспекты изменение формы через систему темизации
  2. Изменение формы в модулях
  3. Применение Forms API
  4. Примеры для обоих веток Друпала

Модификация форм в Drupal (осторожно, много кода).

Хабрассылка для хабраплюсов Smile

Комментарии

Аватар пользователя gorr gorr 15 августа 2008 в 11:39

Мне нравятся формы вида:
label поля |САМО ПОЛЕ|
label второго поля |САМО ВТОРОЕ ПОЛЕ|
- - - - - - - - - - - - - - - - - - - -
label последнего |САМО ПОСЛЕДНЕЕ|
короче табличный вид, так вот поодиночке переделывать формы друпала в такой вид достаточно просто, а вот чтобы как-то скопом...тут посложнее, так как друпал генерирует формы из массивов элементов, рекурсивно пробегаясь по каждому- такое не пробовали делать? Было бы интересно почитать.

Аватар пользователя vikeng vikeng 16 августа 2008 в 8:24

gorr wrote:
Мне нравятся формы вида:
label поля |САМО ПОЛЕ|
label второго поля |САМО ВТОРОЕ ПОЛЕ|
- - - - - - - - - - - - - - - - - - - -
label последнего |САМО ПОСЛЕДНЕЕ|

Я сделал такое с помощью CSS. Переопределил label внутри нужной формы.
Примерно так:

form.class1 label {
float:left;
text-align:left;
width:170px;
}
Аватар пользователя neochief neochief 15 августа 2008 в 16:55

Если вам нужна именно таблица, то массово сделать такое автоматическое преобразование очень накладно и чревато багами. Объясню почему. Если с полями все ясно — метку засунуть в одну ячейку, инпут во вторую, то с кнопками все не так прозрачно как кажется на первый взгляд. Ведь многие кнопки привязаны к конкретным инпутам (вспомните форму перевода). В этом случае, корректно разобрать форму можно только лишь под личным контролем разработчика.

Аватар пользователя gorr gorr 15 августа 2008 в 17:23

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

Аватар пользователя gorr gorr 16 августа 2008 в 15:38

Я тоже делал так и внешне все нормально было, но при клике по полям не хотел устанавливаться фокус на поле в каком-то из браузеров, а при клике в области лэйбла устанавливался, что не есть интуитивно понятным для посетителей...

Аватар пользователя vikeng vikeng 16 августа 2008 в 17:12

А подробностей не вспомнишь: какие поля и в каких браузерах?
Я правда использовал только поля textfield. Сейчас проверил в Firefox 2 и 3, IE 7, Opera 9.2. Проблем никаких. Фокус ввода меняется при щелчке и по самому полю, и по label.

Аватар пользователя vikeng vikeng 16 августа 2008 в 19:16

Интересно. Я тут сайт заканчиваю - как раз с такой реализацией. Вот будет прикол если работать не будет.
И IE-6 под рукой нет - проверить. Smile

Аватар пользователя vikeng vikeng 16 августа 2008 в 19:55

Спасибо!
Вот ссылка с формой: http://www.mnemonica.ru/assoc/2/test. Форма многостраничная, два раза нажать "Отправить", и на третьей странице собственно сам та форма, которую с CSS делал. На первых двух страницах данные можно не вводить - с настройками по умолчанию до третьей страницы дойдет.

Сайт еще не готов. Программирование почти закончено, а так текст еще нужно загонять.

Аватар пользователя gorr gorr 16 августа 2008 в 21:17

Потестил, все работает нормально, правда в ИЕ-6 на втором этапе кнопка сначала слева показалась, а потом скакнула вправо. Видимо у меня тогда еще что-то сыграло.

Аватар пользователя Wincert Wincert 16 октября 2008 в 16:06

Что с вашим сайтом? Очень надо...
Если у кого нибудь есть пример темизации формы поиска для шестерки, выложите пожалуйста.