Извлекаем ID всей формы

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

Аватар пользователя XDmitry XDmitry 28 августа 2010 в 13:07

Как узнать ID конкретной формы? В сети все разбросано и нет конкретной инструкции. Сам весь вечер искал решение. Поэтому я попробую просто привести конкретный пример извлечения ID формы.
Сразу уточню, что будем извлекать ID всей формы, а не отдельного ее элемента. Идентификатор отдельного элемента формы можно извлечь с помощью Firebug (плагин к Firefox).
Материал взят с: http://api.drupal.ru/api/function/hook_form_FORM_ID_alter/6 первый комментарий. Если установлен модуль Devel, то можно и по второму комментарию.
Создаем свой модуль, а это всего два файла: extract_id_forms.info и extract_id_forms.module.
В первом файле прописывем:

; $Id$
name = Extract ID forms
description = "Retrieves and displays the ID of an entire form"
package = Custom
core = 6.x

Во втором файле (extract_id_forms.module):

<?php
// $Id$
/**
 * file
 *
 */

function extract_id_forms_form_alter(&$form, $form_state, $form_id) {
        global $user;
        if ($user->uid==1) {
                $form['showformid']=array(
                        '#type' => 'markup',
                        '#value' => t('Form ID: ').$form_id,
                        '#weight' => -10
                );     
        }
}

Оба файла ложим в папку custom. Эту папку размещаем там, где лежат все модули вашего сайта. Как правило это: /sites/all/modules. Далее включаем наш модуль на странице администрирования /admin/build/modules. Это будет группа «Собственная» («Custom»). Активируем модуль. После чего открываем нужную нам форму и смотрим в самом вверху появившуюся запись типа: Form ID: «здесь id формы». Например, если зайти в /node/add/page («Создать page»), то сразу под заголовком «Создать page» увидим запись Form ID: page_node_form. Это и есть идентификатор всей формы. Узнали идентификатор, и теперь можно удалить наш кастомный модуль, т.к. больше он не нужен.

На истину не претендую. Удачи в делах!

Комментарии

Аватар пользователя glu2006 glu2006 28 августа 2010 в 13:39

Для таких вещей достаточно давно существует модуль devel, это раз.
А еще есть firefox + firebug Smile в котором тоже можно посмотреть form_id.
В хтмл это выглядит примерно так:

<form id="user-login-form" method="post" accept-charset="UTF-8" action="/home?destination=node%2F7">
<--! FORM ID как раз и есть ID user-login-form только надо вместо - писать _ -->
<div><div id="edit-name-wrapper" class="form-item">
 <label for="edit-name">Имя пользователя: <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="text" class="form-text required" value="" size="15" id="edit-name" name="name" maxlength="60">
</div>
<div id="edit-pass-wrapper" class="form-item">
 <label for="edit-pass">Пароль: <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="password" class="form-text required" size="15" maxlength="60" id="edit-pass" name="pass">
</div>
<input type="submit" class="form-submit" value="Вход" id="edit-submit" name="op">
<div class="item-list"><ul><li class="first"><a title="Создать новую учетную запись пользователя." href="/user/register">Регистрация</a></li>
<li class="last"><a title="Получить новый пароль на e-mail." href="/user/password">Забыли пароль?</a></li>
</ul></div><input type="hidden" value="form-83ef6d809263ddff2fe76c76c1c8293a" id="form-83ef6d809263ddff2fe76c76c1c8293a" name="form_build_id"> <--! FORM BUILD ID значение VALUE -->
<input type="hidden" value="user_login_block" id="edit-user-login-block" name="form_id"> <--! FORM ID значение VALUE -->
</div></form>
Аватар пользователя XDmitry XDmitry 28 августа 2010 в 13:45

glu2006 wrote:
Для таких вещей достаточно давно существует модуль devel, это раз.
А еще есть firefox + firebug Smile в котором тоже можно посмотреть form_id.
В хтмл это выглядит примерно так:

<form id="user-login-form" method="post" accept-charset="UTF-8" action="/home?destination=node%2F7">
<--! FORM ID как раз и есть ID user-login-form только надо вместо - писать _ -->
<div><div id="edit-name-wrapper" class="form-item">
 <label for="edit-name">Имя пользователя: <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="text" class="form-text required" value="" size="15" id="edit-name" name="name" maxlength="60">
</div>
<div id="edit-pass-wrapper" class="form-item">
 <label for="edit-pass">Пароль: <span title="Обязательное поле" class="form-required">*</span></label>
 <input type="password" class="form-text required" size="15" maxlength="60" id="edit-pass" name="pass">
</div>
<input type="submit" class="form-submit" value="Вход" id="edit-submit" name="op">
<div class="item-list"><ul><li class="first"><a title="Создать новую учетную запись пользователя." href="/user/register">Регистрация</a></li>
<li class="last"><a title="Получить новый пароль на e-mail." href="/user/password">Забыли пароль?</a></li>
</ul></div><input type="hidden" value="form-83ef6d809263ddff2fe76c76c1c8293a" id="form-83ef6d809263ddff2fe76c76c1c8293a" name="form_build_id"> <--! FORM BUILD ID значение VALUE -->
<input type="hidden" value="user_login_block" id="edit-user-login-block" name="form_id"> <--! FORM ID значение VALUE -->
</div></form>

Просто в firebug ID всей формы (с полями CCK) не узнать, по крайней мере я не смог найти. ID конкретного элемента, да. Во-вторых, если просто задать вопрос "как узнать ID всей формы?", ничего конкретного кроме "насмешили и т .п." - не увидишь. Не все ставят Devel и firebug, верно? А в нашем случае спровоцировано много конкретных и дельных вариантов Smile Значит есть из чего выбирать.

Аватар пользователя glu2006 glu2006 28 августа 2010 в 14:10

XDmitry wrote:
Просто в firebug ID всей формы (с полями CCK) не узнать, по крайней мере я не смог найти. ID конкретного элемента, да. Во-вторых, если просто задать вопрос "как узнать ID всей формы?", ничего конкретного кроме "насмешили и т .п." - не увидишь. Не все ставят Devel и firebug, верно? А в нашем случае спровоцировано много конкретных и дельных вариантов Smile Значит есть из чего выбирать.

1. Плохо искали. в друпале у любой формы построенной через formAPI есть скрытые поля в которых хранится информация об ID формы и не только.
2. Разработчики сайтов которые не пользуются девелом или фаербагом ассоциируются у меня с автослесарем без инструментов.
Какой же он тогда на хрен автослесарь? Вы бы подпустили такого к своей машине? Я лично выгнал бы его в зашей.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 августа 2010 в 14:11

"glu2006" wrote:

2. Разработчики сайтов которые не пользуются девелом или фаербагом ассоциируются у меня с автослесарем без инструментов.

+1
Devel
Form Builder
Module Builder
наше всё

Аватар пользователя I_CaR I_CaR 17 июня 2013 в 22:27

А я ищу проще:
HTML > поиск: accept-charset="UTF-8"
Чуть далее заветный ID
Остаётся только заменить "-" на "_"
P.S. Хотя можно и залезть в .tpl и там глянуть как работает код.
И сделать вывод его на страницу в процессе сборки\наладки\отладки.