10 шагов к постижению форм в Друпале

28 января 2009 в 13:14
Аватар пользователя neochief neochief 0 30


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

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

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

  1. Создать новую директорию в sites/all/modules, например my_module
  2. Создать файл my_module.info в директории my_module, содержащий это:
  3. name = My module
    description = Module for form api tutorial
    core = 6.x
  4. Создать файл my_module.module. Полностью скопировать отсюда первый пример и вставить в my_module.module.
  5. Включить модуль "My module" на странице модулей (admin/build/modules).
  6. Перейти на страницу my_module/form для запуска кода.
  7. Далее вам предстоит провести для каждого примера, полную замену содержимого my_module.module на код последующего примера. Не забывайте после этого переходить на страницу my_module/form для того, чтобы увидеть результаты своей работы.

А дальше огромная куча кода »

Комментарии

Заранее извиняюсь за то, что не привожу полную статью прямо здесь, тому есть объективные причины. Надеюсь вам не составит особого труда кликнуть по ссылке.

Хабравчане могут заплюсовать этот топик — топик на хабре.

28 января 2009 в 14:15

Отметил в закладки. То, что полная статья на тематическом сайте, а здесь только её часть не вижу ничего страшного. Спасибо интересную заметку

28 января 2009 в 14:04

Сам хотел подобную заметку осилить, но недосуг. Очень хорошо.

Одно замечание - нет необходимости повторять в каждом примере один и тот же код, например реализацию hook_menu и вызов формы.

Лучше писать только существенные дополнения в каждом примере

29 января 2009 в 7:32

Спасибо за большую статью! К сожалению, не нашел ответа на свой простой вопрос: как получить данные, введенные с формы.

У меня есть страница со сниппетом, который выводит данные при помощи запроса. Затем понадобилось параметризировать запрос. Я создал форму, в обработчике submit вижу значения переменных формы, но не могу ими воспользоваться кроме как сообщить по drupal_set_message. После нажатия на "submit", попадаю на ту же страницу, значения полей меняются на дефолтные и дальше непонятно...

29 января 2009 в 14:04

@Химический Али, да я б с радостью дал, если бы он был. Там же инвайты не бесконечные, а более того, дефицитные. У меня за прошлые статьи давали по одному, я их и тратил сразу же. А за эту даже ничего не дали.

29 января 2009 в 17:48

"Goodboy" wrote:
для данного решения нужно создавать отдельный модуль

Ну кагбэ первая часть статьи об этом и утверждает.

30 января 2009 в 12:36

Да, я видел. Только не понял: это обязательное условие или просто так удобнее приводить примеры.
Если мне понадобится форма, я должен под нее создавать отдельный модуль?

Я использовал формы на чистом PHP, использовал на Друпале (отправлял email). Немножко имею представление, но чувствую, что плаваю в друпаловской специфике работы с формами. Поэтому схватился за вашу статью. Она ведь написана для таких, как я, не так ли? Но вот не удалось ничего почерпнуть из нее.

30 января 2009 в 12:59

Нет, через блоки может и быстрее (минуты на две), но никак не правильнее и не лучше. Вы теряете многое с таким подходом.

Goodboy, в создании своих модулей для нужд сайта нет вообще ничего зазорного и гепер-сложного. Именно так и надо делать почти со всем в мире Друпала.

30 января 2009 в 17:54

Собирался написать подобную статью после того, как смогу довести до ума свой модуль с реализацией form_alter. Теперь вот думаю, нужна ли будет моя статья после такого подробного и пошагового описания действий.

31 января 2009 в 2:11

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
как смогу довести до ума свой модуль с реализацией form_alter
Нужна, конечно. form_alter все-таки несколько другое дело, хотя и использует то же самое API

31 января 2009 в 4:07

"direqtor" wrote:
Нужна, конечно. form_alter все-таки несколько другое дело, хотя и использует то же самое API

Да, пожалуй, так и есть. Тогда всё же напишу после разбирательств с темизацией -)

31 января 2009 в 14:14

Спасибо, вчера прочитал, сегодня дали на доделку модуль с формой, как раз двухстраничность добавить, ну и по мелочи функционал закончить)

3 февраля 2009 в 19:34

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
Смотрите form_alter

Не совсем понял, как пользоваться хуками. Вы не могли бы для примера код вставить (замена кода function my_module_menu() {...} в примере?
И в блок то как форму?

14 февраля 2009 в 7:27
Аватар пользователя VVS VVS 0

Подскажите, как сделать на мультистраничной форме кнопку "Назад"?

<?php
    $form
['back'] = array(
      
'#type' => 'button',
      
'#value' => 'Назад',
      
'#attributes' => array('onClick' => 'history.go(-1)'),
    );
?>

Кнопка добавляется вида:
<input type="submit" class="form-submit" onclick="history.go(-1)" value="Назад" id="edit-back" name="op">
и при нажатии на неё происходит валидация и отправка формы, правда неизвестно чего...

В API написано
#button_type
Used by: button, image_button, submit
Description: Adds a CSS class to the button, in the form form-[button_type_value]. Note that this does NOT set the HTML attribute type of the button.

В русском переводе этого ВООБЩЕ нет!

10 декабря 2010 в 13:17