как создать форму drupal 7
Form API Drupal 7 создание форм на Drupal
В прошлых уроках мы познакомились с хуками hook_block_info(), hook_block_view(), hook_menu(), hook_permission() и теперь можем создавать программно сколько угодно страниц и блоков. А в этом уроке мы ознакомимся с Form API Drupal 7 для создания форм. Мы будем создавать форму для администрирования функций модуля и постараемся использовать как можно больше уже известных нам хуков, чтобы закрепить умения.
Для начала мы выведем 3 блока, думаю для вас это не составит труда.
Очищаем кеш, чтобы наши новые блоки появились в админке. Выводим эти блоки в левый сайдбар:
Теперь сделаем страницу в админке, куда потом поместим форму для администрирования этих трех блоков:
Страницу создали, должна появиться такая вот заглушка по адресу admin/config/content/content_blocks:
И еще давайте выставим разрешения для администратора на просмотр этой страницы (для этого мы добавляли hook_permission()).
Теперь будем менять код наших хуков. Для начала создадим форму администрирования. Что мы будем администрировать в этих трех блоках? Я предлагаю заголовок блока и количество отображаемых сущностей (нод, пользователей, терминов).
Во-первых поменяется свойство хука hook_menu ‘page callback’.
Ниже приведу описание функции drupal_get_form():
drupal_get_form($form_id)
Параметры drupal_get_form()
Возвращаемое значение drupal_get_form()
Итак, теперь нам нужно переписать функцию _sitemade_content_block(), чтобы она возвращала массив формы.
В результате форма администрирования должна стать такой:
Мы вывели форму, теперь нужно сделать обработку формы. Для обработки мы будем использовать хуки hook_formID_validate(), hook_formID_submit(), соответственно для проверки и обработки формы.
Генерация форм
Функции доступные для обработки и показа HTML-кода форм в Друпале.
Друпал использует эти функции для обеспечения совместимости обработки и показа форм, для упрощения кода и сокращения количества HTML-кода, который должен быть точно сгенерирован модулями. Главная функция среди используемых для этого в Друпале drupal_get_form(), которая используется для генерации HTML-кода формы. Форма может быть построена программно без участия пользователя с использованием функции drupal_form_submit().
drupal_get_form() принимает, обрабатывает и выводит сгенерированный HTML-код формы для модулей автоматически. Ниже пример как использовать drupal_get_form() и остальные функции для генерации форм.
Или с некоторым числом дополнительных аргументов:
Теперь давайте напишем обработку нашей формы, чтобы значения передаваемые с формы сохранялись в переменных друпала. Установим модуль Devel, который позволит использовать функцию dsm(), распечатывающую любые массивы и объекты. После этого добавим в модуль еще один хук:
Это позволит вывести на экран значения передаваемые с формы:
И теперь можно легко вставить значения в переменные:
Форма готова, после отправки данных формы значения сохраняются в переменные с помощью variable_set(), а потом заполняются дефолтные значения полей с помощью variable_get.
Осталось еще изменить хук hook_block_view(), чтобы заголовки блоков и количество ссылок на сущности в них тоже считывались с помощью variable_get().
Делаем стандартную форму регистрации в Друпал 7 многошаговой на AJAX
Сегодня я покажу, как можно сделать регистрацию пользователей в Друпал 7 пошаговой, используя стандартную форму регистрации. Данный метод не является универсальным, т.к. в нем идет идет привязка к конкретным полям на форме. Для своей формы придется потанцевать с бубном самостоятельно.
Итак, чтобы цвет волос окончательно стал седым, усложним задачу:
Шаг 1. Подготовка
Этот этап нет смысла описывать подробно, поэтому вкратце:
Добавим две дополнительные роли на сайте:
С помощью модуля Auto Assign Role разрешим пользователям выбирать свою роль при регистрации. На форме регистрации должы появится соответствующие радиокнопки.
Установим и настроим модуль Ajax Login/Register.
Установим и настроим модуль Legal. На форме регистрации должны появиться поле с Правилами и чекбокс «Я согласен».
Используя стандартный интерфейс Друпала укомплеектуем форму регистрации необходимыми полями.
Я создал на своей форме следующие дополнительные поля:
Имя поля | Тип | Описание |
---|---|---|
Для роли «Физическое лицо» | ||
field_user_fio | Текстовое поле | Поле для ввода ФИО пользователя |
Для роли «Юридическое лицо» | ||
field_company_name | Текстовое поле | Поле для ввода Названия компании |
field_company_number | Текстовое поле | Поле для ввода Номера свидетельства о регистрации |
Для всех ролей | ||
field_user_tel | Текстовое поле | Поле для ввода Номера телефона |
field_adres_index | Текстовое поле | Поле для ввода Почтового индекса |
field_city | Ссылка на термин | Поле для выбора или ввода города из словаря таксономии |
field_adres_street | Текстовое поле | Поле для ввода Улицы |
field_adres_dom | Текстовое поле | Поле для ввода Номера дома и квартиры |
Естественно, Ваш набор полей будет другим. Но нам главное понять принцип работы.
Шаг 2. Магия
Ну а теперь начинаем делать магию. При помощи hook_form_FORM_ID_alter модернизируем форму регистрации.
Самое время глотнуть слегка остывший кофе и подумать о том, что Мы с Вами сделали:
Шаг 3. Ajax-обработчик формы.
Тут даже комментировать ничего не буду.
Шаг 4. Дополнительный валидатор формы
У формы регистрации есть свой набор функций для проверки введенных значений.
Есть несколько вариантов, как реализовать валидацию формы в данном случае:
Шаг 5. Обработчик формы
Дополнительная функция, которая формирует массив значений полей только для текущего шага.
Шаг 6. Добиваем popup
Теперь ВСЕ! Самое время допить ледяной кофе и спрятать бубен на полку, до следующих танцев (а они наступят совсем скоро).
Drupal 7 для начинающих: Форма обратной связи.
Добавляем форму обратной связи.
На тестовом сайте мы сделали почти весь запланированный фукнционал, и затронули все основные возможности Drupal’a, и даже чутка сверху.
У нас осталось одна очень важная для сайтов деталь — форма обратной связи (контакты). По сути, это можно сделать включив модуль contact из стандартнйо поставки Drupal, но он очень слабенький. Там всего несколько полей и по сути ничего сделать нельзя.
Для этого лучше использовать модуль webform. Он очень распространен, и это не безосновательно. Как я уже написал, стандартная контактная форма почти никуда не годиться, поэтому все используют данный модуль, который позволяет делать неограниченное количество различных форм (не только для контактов), которые могут иметь нужные вам поля (по принципу создания своего типа содержимого), делать рассылку на разные почтовые адреса и генерировать отсылаемый результат, также позволяет хранить результаты формы на сайте и ограничивать доступ к определенным формам.
Итак, установите данный модуль, и было бы неплохо его русифицировать. После установки у вас должен появится новый тип материала Webform (node/add). Поэтому жмем «Добавить содержимое» и создаем новый Webform.
У вас откроется страница добавления webform на которой предложено ввести заголовок и содержимое (оно будет над формой). Давай введем следующие данные:
Прокручиваем страницу до настроек отображения и ставим собственный алиск (ЧПУ / параметры адреса).
Как вы видите, я выключил автоматическую генерацию, чтобы при сохранении он не создал синоним на основе макетов из pathauto, и если вы делаете какое-то обновление в форме, не стоит забывать отключать галочку, так как она автоматически включается каждый раз.
Также я указал синоним contact — будьте внимательны, он является системным синонимом для формы контактов от одноименного модуля (о котором говорится в начале статьи). Поэтому убедитесь что модуль contact выключен. После чего смело жмем кнопку «Сохранить».
Перед вами откроется страница создания формы контактов. Тут необходимо добавлять поля, которые будут присутствовать в форме, тоесть те, которые вам надо.
Я буду описывать как я делаю свою почтовую форму, вы же можете по анологии делать свою.
Для начала добавим поле где опльзователь сможет указать свой E-Mail адрес. Для этого вводим следующие данные:
Как и с полями для типа содержимого, у нас открывается второй этап настройки поля. Разумеется, у каждого поля настройки свои. Но есть те, которые присущи каждому полю и только в пределах webform:
Метка — она выводится в форме над полем. Хоть это и стандартно, я написал чтобы вы не путали её с машинным именем.
Field Key — это ключевое имя, необходимое для идентификации поля и подстановки его как переменной в шаблон письма. Данное машинное имя действует в пределах формы. Тоесть, если вы решили создать еще одну форму, там тоже может быть поле с таким ключем.
Mandatory — делает поле обязательным для заполнения
Показать (также могуть быть и другие значения)
Ширина — ширина поля.
Label display — где будет и будет ли отображаться метка поля.
Отключено — данное поле выключено.
Private — делает данное поле видимым только тем пользователям, у которых есть права на просмотр результатов.
Нам необходимо заполнить описание (на свое усмотрение), установить галочку Mandotary, Unique и сохранить. Наше поле добавиться автоматически. Таким же способом добавьте нужные вам поля. (я добавил приложение типа файл и текст сообщения типа textarea)
После того как вы добавили нужные вам поля, нам необходимо донастроить форму. Для этого вверху есть 3 вкладки.
Переходим на вкладку «Электронные адреса». Вы увдите страницу с настройками электронных адресов. В них указывается куда и какая информация будет отсылаться после отправки формы.
Для начала добавим свой почтовый ящик, тем самым убрав необходимость постоянно заходить на сайт и проверять наличие писем. Для этого в поле Addess вводите свой E-Mail адрес и жмете «Добавить». Вы можете указать несколько адресов, разделяя их запятой.
После добавления вы попадете на настройку писем.
E-Mail template позволяет настроить содержимое письма. Вы можете использовать TOKEN VALUES — различная информация с сайта, либо INCLUDED E_MAIL VALUES, в которых содержатся значения из формы.
Я его заполнил так:
Для подстановки используеются подстановочные шаблоны: %email[field_key]. Используйте их для вставки данных отдельно. Если нужно вставить все без особой нужды в оформлении то используется %email_values.
Теперь переходим в третью вкладку Form settings. В ней можно настроить данную форму еще точнее.
Сохраняйте и смотрите что получилось, для этого переходим по адресу site/contact (или тот алиас который вы указали).
Самое время проверить форму. Для этого заполните нужные поля и нажмитке кнопку «Отправить». После чего письмо будет доставлено на ту почту(ы), которую вы указали на вкладке «Электронные адреса». Вы также можете посмотреть результаты на сайте. Достаточно зайти на страницу формы и нажать «Результаты».
Как создать собственную веб-форму с помощью модуля Drupal webform
Дата публикации: 2017-10-16
От автора: думаете, у читателей вашего сайта не возникают вопросы? Скорее всего, они их не задают, потому что не могут. Чтобы наладить связь со своей публикой, используйте Drupal webform!
Зачем?
В Друпал нет специализированного инструмента для создания веб-форм. А без них любой сайт превращается в «громкоговоритель», который не дает и слова сказать своим читателям. Без обратной связи вы не сможете нормально контактировать с пользователями. Это касается регистрации, процесса покупки-продажи и любого другого варианта взаимодействия.
Исследуемый модуль как раз и предназначен для создания форм всех «мастей». Для начала его нужно скачать по этой ссылке. Затем активировать в админке в разделе «Модули».
Работа с формами
Веб-форма распознается Друпал как одна из структурных единиц. После включения установленного расширения в разделе «Структура» появится новый элемент.
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
В админке Друпал 7 переходим в «Содержимое» и создаем новый материал.
После чего в редакторе указываем его имя, а в «Настройке адресов» — синоним URL, по которому будет находиться форма. Затем сохраняемся.
Теперь заполняем веб-форму полями. Сначала вводим название, а затем во втором столбце из выпадающего списка выбираем тип поля. Здесь их много, в том числе и select options. Но нам нужно обычное текстовое.
Отмечаем флажком, что это обязательное поле. А затем жмем на «Добавить».
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
Затем вводим машинное имя веб-формы. Это обязательный для заполнения параметр. Остальные можно оставить как есть.
Добавляем еще два поля: для «мыла» и сообщения. После чего снова сохраняем изменения. Если перейти во вкладку «Просмотр», то перед нами появляется страница с созданной формой.
Отмечу, что это не единственное расширение для веб-форм. Проверенным вариантом также считается модуль Webform Rules. Он позволяет привязывать к созданной форме событие.
Как блок
Теперь решим проблему отображения созданной веб-формы. Для этого в текущем разделе переходим в настройки.
И в расширенных активируем опцию «Available as block».
После этого веб-форма появится в списке блоков, и ее можно разместить в нужном регионе.
Вот! Теперь вы услышите своего читателя и сможете ответить на возникшие у него вопросы.
Бесплатный курс «Основы создания тем WordPress»
Изучите курс и узнайте, как создавать мультиязычные темы с нестандартной структурой страниц
Формы ввода данных Drupal
На сегодняшний день, поскольку в процессе работы людям приходится принимать и обрабатывать большое количество данных, веб-приложения стали неотъемлемой частью почти всех отраслей экономики.
Получение данных происходит при помощи HTML-форм, которые можно использовать для создания различных типов полей для ввода, например, таких как « текстовые поля », « переключатели » и прочее – для этого используются HTML-теги.
Эти формы трудно сохранять или обновлять, если они записываются непосредственно в HTML-коде. Drupal предлагает отличный способ задавать формы напрямую через PHP-код, а система самостоятельно генерирует конечные формы.
Функция drupal_get_form — генерация форм в Drupal
Создание базовой формы в Drupal
При помощи вышеуказанного кода вы сможете увидеть свой модуль в списке доступных модулей и получите возможность включить его, как это показано на рисунке ниже.
В функции drupalform_form1 мы создаем три текстовых поля: имя ( name ), фамилия ( last name ), адрес электронной почты ( email ) и один блок для выбора страны. В выпадающем окне блока мы указываем варианты стран. Кроме этого, мы добавили кнопку « Отправить », чтобы пользователь сумел, в конце концов, отправить форму.
Теперь, у вас должно получиться зайти в свое меню по адресу: /drupalform/form1 и увидеть форму, которая будет выглядеть следующим образом:
Проверка формы Drupal
В Drupal тяжело использовать правила именования для определения того, какие функции должны быть обращены к каким событиям. Вся система Drupal основана на соглашении в вопросе именования.
Таким образом, для нашей формы функция имени будет выглядеть как:
Таким образом, если мы должны провести проверку нашей формы, функция будет следующей:
На экране пользователя будет отображаться сообщение об ошибке и форма не будет отправлена.
Если вы отправите форму, оставив поле имени пустым, на экране у вас должно появиться следующее сообщение об ошибке:
Отправка форм Drupal
Теперь, если мы заполнили все поля должным образом, то получаем на экране следующее сообщение:
Используя поля, вы можете установить в формах Drupal отдельные элементы.
Иногда, когда форма большого размера, и в ней имеется много полей, может быть полезно разбить её на небольшие секции, чтобы она представлялась пользователю более логичной. Для реализации подобного решения, вы можете сформировать объединения полей (fieldsets) в Drupal, чтобы создать группы полей.
Это позволит создать объединение нескольких полей, как показано ниже:
Различные элементы форм, которые могут быть использованы в формах Drupal
Drupal поддерживает очень много различных типов полей, которые мы можем использовать в наших формах. Я обновлю формы из нашего примера, чтобы использовать некоторые из них, создав еще два объединения полей для более подробного адреса и дополнительных деталей.
Обновленный код приведен ниже:
Вот как будет выглядеть новый набор полей для ввода:
Заключение
Drupal помогает создавать и обрабатывать формы непосредственно внутри вашего модуля. API-интерфейсы Drupal позволяют делать это очень просто – можно сделать дополнение или модификацию вашей формы в виде массива форм. Также можно провести валидацию и отправку в различных функциях.
Такой модульный подход сохраняет код формы внутри вашего модуля чистым и простым в обслуживании. Кроме того, если вы используете форму Drupal API, вам не нужно возиться с HTML-деталями формы: все HTML-коды генерируются автоматически.
Всего вам наилучшего, когда будете создавать следующий список заполняемых форм в вашем Drupal модуле!
Если вы хотите, чтобы мы рассмотрели какой-либо конкретный случай или разъяснили какие-либо нюансы, или же вы просто хотите высказаться — отпишитесь в комментариях.