Этот урок создан специально для начинающих и средне-продвинутых Друпал-разработчиков. Он должен быстро дать понятие об азах Forms API, а также показать возможность создаия более сложных вещей на примере пошаговых форм.
Когда я только начинал подготовку этого урока, у меня был соблазн поставить под каждым куском кода ссылку для скачивания готового примера, но в послествии, я отказался от этого. Будет намного полезнее, если вы сами будете вставлять код в свои модули, тестируя и набираясь опыта в реальных условиях.
И прежде чем начать, я расскажу вам как все-таки заставить любой из этих кусков кода работать. Предположим, вы уже имеете установленный тестовый сайт на Друпал 6. Вам прийдется проделать следующие действия:
- Создать новую директорию в sites/all/modules, например my_module
- Создать файл my_module.info в директории my_module, содержащий это:
- Создать файл my_module.module. Полностью скопировать отсюда первый пример и вставить в my_module.module.
- Включить модуль "My module" на странице модулей (admin/build/modules).
- Перейти на страницу my_module/form для запуска кода.
- Далее вам предстоит провести для каждого примера, полную замену содержимого my_module.module на код последующего примера. Не забывайте после этого переходить на страницу my_module/form для того, чтобы увидеть результаты своей работы.
name = My module
description = Module for form api tutorial
core = 6.x
Комментарии
Заранее извиняюсь за то, что не привожу полную статью прямо здесь, тому есть объективные причины. Надеюсь вам не составит особого труда кликнуть по ссылке.
Хабравчане могут заплюсовать этот топик — топик на хабре.
Отметил в закладки. То, что полная статья на тематическом сайте, а здесь только её часть не вижу ничего страшного. Спасибо интересную заметку
Спасибо! Буду практиковаться.
Достойный труд, спасибо. То что надо после FORM API.
Плюсанул на Хабре. Для меня это самое то. Спасибо
Сам хотел подобную заметку осилить, но недосуг. Очень хорошо.
Одно замечание - нет необходимости повторять в каждом примере один и тот же код, например реализацию hook_menu и вызов формы.
Лучше писать только существенные дополнения в каждом примере
direqtor, нет, все нормально) Нам то понятно, а тем кто начинает в самый раз
Спасибо!
Спасибо за большую статью! К сожалению, не нашел ответа на свой простой вопрос: как получить данные, введенные с формы.
У меня есть страница со сниппетом, который выводит данные при помощи запроса. Затем понадобилось параметризировать запрос. Я создал форму, в обработчике submit вижу значения переменных формы, но не могу ими воспользоваться кроме как сообщить по drupal_set_message. После нажатия на "submit", попадаю на ту же страницу, значения полей меняются на дефолтные и дальше непонятно...
АПИ может пригодиться
Спасибо! Но, как я понимаю, для данного решения нужно создавать отдельный модуль. (или нет?)
Я нашел приемлемое решение на http://www.lullabot.com/articles/drupal_5_making_forms_that_display_thei...
Пользуясь случаем, хочу снова попросить инвайт на хабр. Если не считаете меня достойным - так и скажите, я пойму
@Химический Али, да я б с радостью дал, если бы он был. Там же инвайты не бесконечные, а более того, дефицитные. У меня за прошлые статьи давали по одному, я их и тратил сразу же. А за эту даже ничего не дали.
Эх, будем искать
Ну кагбэ первая часть статьи об этом и утверждает.
Да, я видел. Только не понял: это обязательное условие или просто так удобнее приводить примеры.
Если мне понадобится форма, я должен под нее создавать отдельный модуль?
Я использовал формы на чистом PHP, использовал на Друпале (отправлял email). Немножко имею представление, но чувствую, что плаваю в друпаловской специфике работы с формами. Поэтому схватился за вашу статью. Она ведь написана для таких, как я, не так ли? Но вот не удалось ничего почерпнуть из нее.
Создаем блок, разрешаем в нем PHP и пихаем туда код в виде
и все будет работать
Нет, через блоки может и быстрее (минуты на две), но никак не правильнее и не лучше. Вы теряете многое с таким подходом.
Goodboy, в создании своих модулей для нужд сайта нет вообще ничего зазорного и гепер-сложного. Именно так и надо делать почти со всем в мире Друпала.
Ясно, значит буду дерзать в создании модулей.
Спасибо, очень вовремя, сам с формами начал разобраться.
Большое спасибо! Лично для меня Ваши «10 шагов» подоспели как никогда вовремя.
Собирался написать подобную статью после того, как смогу довести до ума свой модуль с реализацией form_alter. Теперь вот думаю, нужна ли будет моя статья после такого подробного и пошагового описания действий.
Да, пожалуй, так и есть. Тогда всё же напишу после разбирательств с темизацией -)
Описание супер ! спасибо !
сейчас разбираюсь )
Спасибо, вчера прочитал, сегодня дали на доделку модуль с формой, как раз двухстраничность добавить, ну и по мелочи функционал закончить)
А как сделать так, чтобы форма добавилась к элементам на уже существующей странице?
И в блок как ее засунуть?
Смотрите form_alter
Не совсем понял, как пользоваться хуками. Вы не могли бы для примера код вставить (замена кода function my_module_menu() {...} в примере?
И в блок то как форму?
Подскажите, как сделать на мультистраничной форме кнопку "Назад"?
<?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.
В русском переводе этого ВООБЩЕ нет!