Здравствуйте.
Есть 2 вопроса:
1. Можно ли в своем модуле получить список всех форм сайта (id, название и т.п.)?
2. Как можно в своем модуле получить список полей формы имея ее id?
1.Список ВСЕХ форм, наверное только поиском по коду(функция drupal_get_form)...
можно "собрать" список форм хуком hook_form_alter...
можно проанализировать параметры меню (page_callback == drupal_get_form, page arguments == array(FORM_ID))
...короче... нудное это дело...
проще найти другое решение..
2.Анализировать массив формы на наличие элементов: textarea, textfield,select и т.д.
1. Я впринципе догадывался что нудное дело, так как не смог ничего подходящего нагуглить.
2. По второму вопросу - как мне получить этот масив формы, имея только id? Дальше я уже с ним разберусь
1. насколько мне известно - информация о всех формах нигде централизованно не хранится. Но можно самому сформировать такой список, цепляясь за,например, hook_forms(), правда список этот будет неполный.
2. drupal_get_form() выдаст исчерпывающую информацию о полях формы
возможно, существуют более изящные способы получения этой информации
Да и поиском по строке drupal_get_form и анализом hook_menu список всех форм тоже не получить. Простейший пример - форма редактирования ноды, для каждого типа ноды своя форма со своим id, и их прямых вхождений в коде не найти.
Ну все... любопытство сильнее меня.....-))
А зачем нужен список всех форм с полями?
Может можно придумать другой подход, для решения этой задачки?
Мне нужно сделать модуль который будет перехватывать отправку формы и делать дополнительные действия, но не при отправке всех форм, а только те которые отметит админ. Пока сделал текстовое поле куда можно вводить ID нужных форм.
Потом по имеющимся ID форм нужно вывести список полей с настройками для каждого.
Пробовал метод drupal_get_form($formid) но он возвращает отрендеренный html формы, а мне нужен масив или объект (если это возможно).
Создание-редактирование материала, форма регистрации, вэбформы ну и все наверное.
Через метод drupal_retrieve_form($form_id, &$form_state) получить масив формы тоже не получилось. Возвращает только те элементы которыя я выше сам добавил в масив $form
Если drupal_get_form на входе получает ИД формы ,а на выходе выдает сгенерированный HTML, то наверное где-то в ней "засела" функция, которая собирает массив $form...
Комментарии
1.Список ВСЕХ форм, наверное только поиском по коду(функция drupal_get_form)...
можно "собрать" список форм хуком hook_form_alter...
можно проанализировать параметры меню (page_callback == drupal_get_form, page arguments == array(FORM_ID))
...короче... нудное это дело...
проще найти другое решение..
2.Анализировать массив формы на наличие элементов: textarea, textfield,select и т.д.
1. Я впринципе догадывался что нудное дело, так как не смог ничего подходящего нагуглить.
2. По второму вопросу - как мне получить этот масив формы, имея только id? Дальше я уже с ним разберусь
1. насколько мне известно - информация о всех формах нигде централизованно не хранится. Но можно самому сформировать такой список, цепляясь за,например, hook_forms(), правда список этот будет неполный.
2. drupal_get_form() выдаст исчерпывающую информацию о полях формы
возможно, существуют более изящные способы получения этой информации
пока руки дошли написать, меня уже опередили
спасибо, буду пробовать
Да и поиском по строке drupal_get_form и анализом hook_menu список всех форм тоже не получить. Простейший пример - форма редактирования ноды, для каждого типа ноды своя форма со своим id, и их прямых вхождений в коде не найти.
Ну все... любопытство сильнее меня.....-))
А зачем нужен список всех форм с полями?
Может можно придумать другой подход, для решения этой задачки?
Мне нужно сделать модуль который будет перехватывать отправку формы и делать дополнительные действия, но не при отправке всех форм, а только те которые отметит админ. Пока сделал текстовое поле куда можно вводить ID нужных форм.
Потом по имеющимся ID форм нужно вывести список полей с настройками для каждого.
Пробовал метод drupal_get_form($formid) но он возвращает отрендеренный html формы, а мне нужен масив или объект (если это возможно).
Сорри, чтобы получить массив с элементами формы надо делать drupal_retrieve_form()
А вообще загляни сюда http://api.drupal.org/api/drupal/includes!form.inc/6 и сюда http://api.drupal.org/api/drupal/developer!hooks!core.php/6
Что..Всех форм?... или создания-редактирования материала?
Создание-редактирование материала, форма регистрации, вэбформы ну и все наверное.
Через метод drupal_retrieve_form($form_id, &$form_state) получить масив формы тоже не получилось. Возвращает только те элементы которыя я выше сам добавил в масив $form
Список форм впринципе уже не нужен, будут вводиться вручную.
Может кто подскажет как получить масив с полями формы имея ее ID?
Если drupal_get_form на входе получает ИД формы ,а на выходе выдает сгенерированный HTML, то наверное где-то в ней "засела" функция, которая собирает массив $form...
логично?-))
http://api.drupal.ru/api/function/drupal_get_form/6
Логичнее некуда
Туда и смотрел. Просто там не так все просто, думал может есть варианты попроще
еще проще... скопипастить drupal_get_form
дать ей другое имя и
кастрироватьудалить drupal_render_form -))так и пробовал. но там нужно еще 1-2 функции скопировать и
кастрироватьподправить. Так и буду делать.Всем спасибо за ответы