Подскажите пожалуйста как изменить вес заблокированного поля? Нужно чтобы поле "Имя пользователя и пароль" было на самом верху... оно сейчас наоборот... в самом низу!
Использую модули Email Registration, Profile 2 и Profile2 Registration Path. На сайте две страницы регистрации... Но думаю это всё не суть важно... ведь должен быть способ универсальный для любых случаев )) Пробую и никак не могу понять как это реализовать средствами hook_form_alter...
Разобрался как узнать id формы - в каждой форме есть скрытые поля, значение 'value' в которых и есть id формы... Можно ещё так:
drupal_set_message($form_id); // print form ID to messages
Понял как вывести массив элементов формы:
drupal_set_message(print_r($form, TRUE)); // print array to messages
Пробовал создать свой модуль:
function my_module_form_user_register_form_alter(&$form, $form_state) {
$form['mail']['#weight'] = -999999999;}
Не работает...
Комментарии
Докопался до информации, что в каждой форме есть скрытые поля, в которых можно узнать ID этой формы... Ещё существует полезный плагин для firefox - drupal for firebug... но я так понял... что работает он только в старых версиях firefox, так как абсолютно ничего подобного, что присутствует на прикреплённом фото я не нашёл... Как им пользоваться? Может есть ещё какие-нибудь варианты, как можно узнать массив элементов формы?
Вот этот код работал какое-то время как нужно...
function my_module_form_user_register_form_alter(&$form, $form_state) {
$form['form-item-mail']['#weight'] = -999999999;}
Т.к. стал использовать Profile2 удалил все созданные ранее поля из стандартного профиля.... и код перестал работать... Воспользовавшись вот этим -
return drupal_set_message(print_r($form, 1));
Нашёл элемент массива -
[mail] => Array
(
[#type] => textfield
[#title] => E-mail адрес
[#maxlength] => 254
[#description] => Существующий адрес электронной почты............
[#required] => 1
[#default_value] =>
)
Попробовал изменить функцию на
function my_module_form_user_register_form_alter(&$form, $form_state) {
$form['mail']['#weight'] = -999999999;}
Не работает... Что делать фиг его знает... Никак не улавливаю логики...
Присоединяюсь, помогите с проблемой!
Отпишись тогда, если найдёшь решение )) Я уже третий день с этим вожусь )) Жесть просто. Если у меня всё заработает я конечно тоже отпишусь. Жалко помочь никто не может (
Вес модуля?
У profile2 он, наверное, 0, и у my_module тоже 0. Но поскольку алфавитный порядок m, ..., p, то profile2_form_user_register_form_alter из profile2 вызывается позже. Попробуйте назвать свой модуль на s, например.
Нет. Вес поля на форме регистрации. Нужно чтоб поле "Имя пользователя и пароль" было на самом верху... Оно сейчас в самом низу.
Я имею в виду вес модуля. Вашего.
Попробовал. Переименовал модуль... Назвал его smodule )) И сразу же заметил, что поле ['mail'] находится внутри ['account'] Что это фиг его знает... наверное группа полей... В итоге код модуля получился такой:
function smodule_form_user_register_form_alter(&$form, $form_state, $form_id) {
$form['account']['#weight'] = -99999;
$form['account']['mail']['#weight'] = -99999;
}
И... Небольшой прогресс всё-таки есть.. параметр ['#weight'] наконец добавился туда, куда нужно... я даже удивился )) :
[mail] => Array
(
[#type] => textfield
[#title] => Электронная почта
[#maxlength] => 254
[#description] => Существующий адрес электронной почты..
[#required] => 1
[#default_value] =>
[#weight] => -99999
)
И... вроде всё смотрится так, что должно работать... Но поле mail по прежнему в самом низу... Ебаническое количество девяток после минуса тоже не помогает... Мне уже кажется что я не смогу поверить глазам, если всё заработает )) Кто-нибудь догадывается в чём может быть проблема? Намекните хотя бы пожалуйста.
На всякий случай прикрепил код массива формы, выведенный функцией drupal_set_message(print_r($form, TRUE));
Засуньте его в тему:
Если это вес, то тема всё перекроет. К тому же, если требуется простое перемещение поля на форме, то там этому хуку самое место, имхо.
а Вы этот дамп (который form.txt) где делаете?
Функция drupal_set_message(print_r($form, TRUE)); Для того, чтобы всё смотрелось более-менее обволакиваю вывод $form в тег < pre >.
Попробовал засунуть функцию в тему. Тему я создал на основе Omega. Назвал её sfb. В корневой папке темы есть файл template.php. В него засунул вот это:
function sfb_form_user_register_form_alter(&$form, $form_state, $form_id) {
$form['account']['#weight'] = -9999;
$form['account']['name']['#weight'] = -9999;
$form['account']['mail']['#weight'] = -9999;
}
Кэши конечно все каждый раз сбрасываю... да и всё кэширование отключено... но результата опять никакого... самое интересное то, что в массиве полю присваивается вес, который по логике должен выталкивать это поле наверх... а этого почему-то не происходит... Просто бл_ть в шоке я уже!
)
А в функции темы debug что выводит?
Я к тому, что тема — это последний шанс что-то изменить. Здесь массив формы будет окончательный и после никто уже до него не доберется (скрипты Java в расчет не берём).
Если debug($form) в sfb_form_user_register_form_alter выводит вес поля, какой нужно, то остаются только стили.
function sfb_form_user_register_form_alter(&$form, $form_state, $form_id) {
$form['account']['#weight'] = -9999;
$form['account']['name']['#weight'] = -9999;
$form['account']['mail']['#weight'] = -9999;
debug($form);
}
Дебаг говорит, что всё должно быть ништяк:
'mail' =>
array (
'#type' => 'textfield',
'#title' => 'Электронная почта',
'#maxlength' => 254,
'#description' => 'Существующий адрес электронной...',
'#required' => true,
'#default_value' => '',
'#weight' => -9999,
),
Но я ему не верю. Фото прикрепил.
p.s. сайт авто-тематики для моего города... типо доски объявлений плюс каталог фирм... (понимаю, что это никого не ебёт...)
Не знаю, что ещё можно придумать...
Решение найдено! )) В общем указал weight группам полей:
function sfb_form_user_register_form_alter(&$form, $form_state, $form_id) {
$form['account']['#weight'] = 0;
$form['profile_organization']['#weight'] = 4;
$form['profile_individual_person']['#weight'] = 4;
}
Хорошо что догадался попробовать указывать разные веса этим группам полей... т.е. если указать группе ['profile_organization'] вес равный 3, то он с какого-то пиздеца всё равно наверх лезет не смотря на то, что ['account'] имеет вес 0... В общем ебать эту шизанутую логику во все её программные места... главное что всё теперь работает )) Спасибо господин ser house за помощь! ))
Спасибо, помогло!