Как изменить вес в форме регистрации для поля 'Имя пользователя и пароль' ?

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

Аватар пользователя misterpronin misterpronin 9 ноября 2012 в 20:39

Подскажите пожалуйста как изменить вес заблокированного поля? Нужно чтобы поле "Имя пользователя и пароль" было на самом верху... оно сейчас наоборот... в самом низу!

Использую модули 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;}

Не работает...

Комментарии

Аватар пользователя misterpronin misterpronin 10 ноября 2015 в 11:48

Докопался до информации, что в каждой форме есть скрытые поля, в которых можно узнать ID этой формы... Ещё существует полезный плагин для firefox - drupal for firebug... но я так понял... что работает он только в старых версиях firefox, так как абсолютно ничего подобного, что присутствует на прикреплённом фото я не нашёл... Как им пользоваться? Может есть ещё какие-нибудь варианты, как можно узнать массив элементов формы?

Аватар пользователя misterpronin misterpronin 11 ноября 2012 в 14:21

Вот этот код работал какое-то время как нужно...

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;}

Не работает... Что делать фиг его знает... Никак не улавливаю логики...

Аватар пользователя aimisland aimisland 11 ноября 2012 в 14:33

"misterpronin" wrote:
Не работает... Что делать фиг его знает... Никак не улавливаю логики...

Присоединяюсь, помогите с проблемой!

Аватар пользователя misterpronin misterpronin 11 ноября 2012 в 15:50

"aimisland" wrote:
Присоединяюсь, помогите с проблемой!

Отпишись тогда, если найдёшь решение )) Я уже третий день с этим вожусь )) Жесть просто. Если у меня всё заработает я конечно тоже отпишусь. Жалко помочь никто не может (

Аватар пользователя ser_house ser_house 11 ноября 2012 в 16:29

Вес модуля?

У profile2 он, наверное, 0, и у my_module тоже 0. Но поскольку алфавитный порядок m, ..., p, то profile2_form_user_register_form_alter из profile2 вызывается позже. Попробуйте назвать свой модуль на s, например.

Аватар пользователя misterpronin misterpronin 11 ноября 2012 в 17:02

Нет. Вес поля на форме регистрации. Нужно чтоб поле "Имя пользователя и пароль" было на самом верху... Оно сейчас в самом низу.

Аватар пользователя misterpronin misterpronin 10 ноября 2015 в 11:48

Попробовал. Переименовал модуль... Назвал его 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));

Аватар пользователя ser_house ser_house 11 ноября 2012 в 20:50

Засуньте его в тему:

function MY_THEME_form_user_register_form_alter(&$form, $form_state, $form_id)

Если это вес, то тема всё перекроет. К тому же, если требуется простое перемещение поля на форме, то там этому хуку самое место, имхо.

Аватар пользователя misterpronin misterpronin 11 ноября 2012 в 21:16

Функция 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;
}

Кэши конечно все каждый раз сбрасываю... да и всё кэширование отключено... но результата опять никакого... самое интересное то, что в массиве полю присваивается вес, который по логике должен выталкивать это поле наверх... а этого почему-то не происходит... Просто бл_ть в шоке я уже!

Аватар пользователя ser_house ser_house 11 ноября 2012 в 21:21

)
А в функции темы debug что выводит?

Я к тому, что тема — это последний шанс что-то изменить. Здесь массив формы будет окончательный и после никто уже до него не доберется (скрипты Java в расчет не берём).

Если debug($form) в sfb_form_user_register_form_alter выводит вес поля, какой нужно, то остаются только стили.

Аватар пользователя misterpronin misterpronin 10 ноября 2015 в 11:48

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. сайт авто-тематики для моего города... типо доски объявлений плюс каталог фирм... (понимаю, что это никого не ебёт...)

Аватар пользователя misterpronin misterpronin 11 ноября 2012 в 23:29

Решение найдено! )) В общем указал 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 за помощь! ))