Как получить список полей формы

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

Аватар пользователя HSV HSV 5 апреля 2012 в 21:53

Здравствуйте.
Есть 2 вопроса:
1. Можно ли в своем модуле получить список всех форм сайта (id, название и т.п.)?
2. Как можно в своем модуле получить список полей формы имея ее id?

Буду очен благодарен за любую помощь

Комментарии

Аватар пользователя Orion76 Orion76 5 апреля 2012 в 22:15

1.Список ВСЕХ форм, наверное только поиском по коду(функция drupal_get_form)...
можно "собрать" список форм хуком hook_form_alter...
можно проанализировать параметры меню (page_callback == drupal_get_form, page arguments == array(FORM_ID))
...короче... нудное это дело...
проще найти другое решение..
2.Анализировать массив формы на наличие элементов: textarea, textfield,select и т.д.

Аватар пользователя HSV HSV 5 апреля 2012 в 22:44

1. Я впринципе догадывался что нудное дело, так как не смог ничего подходящего нагуглить.
2. По второму вопросу - как мне получить этот масив формы, имея только id? Дальше я уже с ним разберусь Smile

Аватар пользователя brokleg brokleg 5 апреля 2012 в 23:01

1. насколько мне известно - информация о всех формах нигде централизованно не хранится. Но можно самому сформировать такой список, цепляясь за,например, hook_forms(), правда список этот будет неполный.
2. drupal_get_form() выдаст исчерпывающую информацию о полях формы

возможно, существуют более изящные способы получения этой информации

Аватар пользователя brokleg brokleg 6 апреля 2012 в 0:02

Да и поиском по строке drupal_get_form и анализом hook_menu список всех форм тоже не получить. Простейший пример - форма редактирования ноды, для каждого типа ноды своя форма со своим id, и их прямых вхождений в коде не найти.

Аватар пользователя Orion76 Orion76 6 апреля 2012 в 10:03

Ну все... любопытство сильнее меня.....-))
А зачем нужен список всех форм с полями?
Может можно придумать другой подход, для решения этой задачки?

Аватар пользователя HSV HSV 6 апреля 2012 в 12:08

orion76 wrote:
Ну все... любопытство сильнее меня.....-))
А зачем нужен список всех форм с полями?
Может можно придумать другой подход, для решения этой задачки?

Мне нужно сделать модуль который будет перехватывать отправку формы и делать дополнительные действия, но не при отправке всех форм, а только те которые отметит админ. Пока сделал текстовое поле куда можно вводить ID нужных форм.

Потом по имеющимся ID форм нужно вывести список полей с настройками для каждого.

Пробовал метод drupal_get_form($formid) но он возвращает отрендеренный html формы, а мне нужен масив или объект (если это возможно).

Аватар пользователя Orion76 Orion76 6 апреля 2012 в 13:38

"HSV" wrote:
Мне нужно сделать модуль который будет перехватывать отправку формы и делать дополнительные действия,

Что..Всех форм?... или создания-редактирования материала?

Аватар пользователя HSV HSV 6 апреля 2012 в 16:13

Создание-редактирование материала, форма регистрации, вэбформы ну и все наверное.

Через метод drupal_retrieve_form($form_id, &$form_state) получить масив формы тоже не получилось. Возвращает только те элементы которыя я выше сам добавил в масив $form

Аватар пользователя HSV HSV 7 апреля 2012 в 22:20

Список форм впринципе уже не нужен, будут вводиться вручную.
Может кто подскажет как получить масив с полями формы имея ее ID?

Аватар пользователя Orion76 Orion76 7 апреля 2012 в 22:37

Если drupal_get_form на входе получает ИД формы ,а на выходе выдает сгенерированный HTML, то наверное где-то в ней "засела" функция, которая собирает массив $form...

логично?-))

http://api.drupal.ru/api/function/drupal_get_form/6

Аватар пользователя HSV HSV 8 апреля 2012 в 18:33

Логичнее некуда Smile
Туда и смотрел. Просто там не так все просто, думал может есть варианты попроще

Аватар пользователя HSV HSV 9 апреля 2012 в 12:05

так и пробовал. но там нужно еще 1-2 функции скопировать и кастрировать подправить. Так и буду делать.
Всем спасибо за ответы