При сабмите пользовательской формы drupal_set_message отрабатывает, а при сабмите формы регистрации не выводится сообщение из drupal_set_message.
В чем может быть соль?
но, я же не использую drupal_goto ... или фишка в том что в форме в actions задан один урл, обработчик сабмита ф-я и в ней указан drupal_set_message и $form_state['redirec'] = '', а message хочет выводится на странице указанной в actions....
.. или фишка в том что в форме в actions задан один урл, обработчик сабмита ф-я и в ней указан drupal_set_message и $form_state['redirec'] = '', а message хочет выводится на странице указанной в actions...
Ну да, об этом и речь. Ну, как возможная причина.
Попробуйте установить $form['#redirect'] = FALSE в функции конструктора формы.
И всё же мне кажется, что RxB ближе всех к истине.
Форма регистрации же вроде не отображается для залогиненных пользователей. Только как форма редактирования данных пользователя.
anzebra, если нужно всего лишь вывести состояние каких-то переменных, то в случае с сабмитом формы регистрации просто воспользоваться print $some_my_data;
посмотрю что там с правами для юзера....но я вроде не замечала .... что то типа "отображение drupal_set_message" .... если такое и реализовано, то не понимаю зачем
Самое интересное что я уже практически не трогаю лично своими руками форму регистрации, только модуль User registration password(для отображения полей ввода пароля), а мессаги ... нехорошие.
В результате экспериментов и ковырялок в ядре обнаружено: что если в модуле user.modue написать $form['redirect'] = FALSE,
<?php function user_register_submit($form, &$form_state) { .... // Administrator approval required. else { _user_mail_notify('register_pending_approval', $account); drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your e-mail address.')); $form_state['redirect'] = false; //руками нацарапали! } } ?>
тогда мессага есть.
У кого есть какие идеи как это сделать на основе хуки или в чем причина, хотя редирект фальсе, тоже не выход...
У кого есть какие идеи как это сделать на основе хуки или в чем причина, хотя редирект фальсе, тоже не выход...
Где-то читал, что $form[#redirect] вроде как имеет приоритет над $form_state['redirect'].
И ещё, как вариант, можно как-то так:
сделать редирект на собственный адрес после удачного сабмита, в которой и выводить drupal_set_message('...конгратс, чувак.... Ты успешно бла..бла..бла..', 'status');
То есть установить form_state['redirect'] на другой (отличный) адрес. Соответственно и создать процедуру вывода страницы в hook_menu.
И ещё, как вариант, можно как-то так:
сделать редирект на собственный адрес после удачного сабмита, в которой и выводить drupal_set_message('...конгратс, чувак.... Ты успешно бла..бла..бла..', 'status');
То есть установить form_state['redirect'] на другой (отличный) адрес. Соответственно и создать процедуру вывода страницы в hook_menu.
Добавила 0 юзера, после регистрации появился зелёный message но почему то без текста, а если нажать f5, то вот такой error:
Notice: Undefined offset: 0 в функции theme_status_messages()(строка 1348 в файле /home/logistautoru/data/www/anzebra.logistauto.ru/logistauto/includes/theme.inc).
Соовщения drupal_set_message() хранятся в сессии. Друпал имеет свой обработчик сессий, все данные о сессиях хранятся в БД. Если в таблице {users} нет записи для uid = 0, то для анонимов не получится загрузить сессию. Но почему у кого-то эта запись для uid = 0 пропадает, для меня загадка.
В общем, судя по всему, помимо создания пользователя user 0 нужно ещё и установить ему роль. В примере по ссылке выше ему привязывается роль анонима (1).
<?php INSERT INTO users (uid, name, mail) VALUES ('0', '', ''); INSERT INTO users_roles (uid, rid) VALUES (0, 1); ?>
В общем, нужно просто любым способом добавить новую запись в таблицу users_roles (с uid = 0 и rid = 1).
Соовщения drupal_set_message() хранятся в сессии. Друпал имеет свой обработчик сессий, все данные о сессиях хранятся в БД. Если в таблице {users} нет записи для uid = 0, то для анонимов не получится загрузить сессию. Но почему у кого-то эта запись для uid = 0 пропадает, для меня загадка.
Прицепились к анонимусу. Вот сижу с обычной формой (не авторизации, D6) и опять же если $form['#redirect']=FALSE, то прописанный в функции сабмита drupal_set_message выводится, но без редиректа. А если $form['#redirect']='node/1' (например) - редиректится, но без мессаг. Аналогично и с $form_state['redirect'].
Если не брать во внимание нулевые uid'ы, а рассматривать просто форму, то можно по form['#action'] перейти на какую-либо страницу, а там в функции (по hook_menu) уже мессагить, обрабатывать пришедший $_POST и переходить (drupal_goto) куда надо.
Только не догоняю как после заполнения и обработки формы возвращаться на страницу из которой форма была вызвана.
Туманно? Криво? Этажно? С удовольствием выслушаю критику.
Конечно. Трабла в девеловских выводах. Строчки типа drupal_set_message(krumo_ob($form_state, true)); мешали. Углубляться не стал, закомментировал и получил редирект после сабмита с выводом сообщений.
Комментарии
Поставила модуль user_registrationpassword его сообщения после удачной регистрации тоже не отображаются
Возможно, form['#redirect'] ?
А вообще - откуда (из какой процедуры) вызываете drupal_set_message ? (validate, submit, etc...)?
Соль может быть в том что сообщение выводится на той странице которую Вы уже покинули.
но, я же не использую drupal_goto ... или фишка в том что в форме в actions задан один урл, обработчик сабмита ф-я и в ней указан drupal_set_message и $form_state['redirec'] = '', а message хочет выводится на странице указанной в actions....
"бред по модулю"
Ну да, об этом и речь. Ну, как возможная причина.
Попробуйте установить $form['#redirect'] = FALSE в функции конструктора формы.
Монитор только протереть не предлагают.
Юзера нулевого смотрите
А, да, верно!
Сообщения могут не отображаться для анонимов.
Ага а он только под ними и смотрит
И всё же мне кажется, что RxB ближе всех к истине.
Форма регистрации же вроде не отображается для залогиненных пользователей. Только как форма редактирования данных пользователя.
anzebra, если нужно всего лишь вывести состояние каких-то переменных, то в случае с сабмитом формы регистрации просто воспользоваться print $some_my_data;
С формой регистрации идут корные мессаджи, о том что направлено письмо нa email и бла, бла ... Они тоже не выводятся ?
Да месаджи о том что направлено письмо нa email и бла, бла ... не выводятся
Тоже верно.
Тогда - копать код, разбираться.
посмотрю что там с правами для юзера....но я вроде не замечала .... что то типа "отображение drupal_set_message" .... если такое и реализовано, то не понимаю зачем
Самое интересное что я уже практически не трогаю лично своими руками форму регистрации, только модуль User registration password(для отображения полей ввода пароля), а мессаги ... нехорошие.
Нехорошие - это что значит - не на русском, с подвохом, с матюками ... ?
это издержки перевода с украинского)))
значит плохие
погані ?
так)
А что значит Юзера нулевого посмотреть??? Как?
И кстати если кто-то скажет что $messages в темплейте не выводится, посмотрела много раз ... есть
В результате экспериментов и ковырялок в ядре обнаружено: что если в модуле user.modue написать $form['redirect'] = FALSE,
<?php
function user_register_submit($form, &$form_state) {
....
// Administrator approval required.
else {
_user_mail_notify('register_pending_approval', $account);
drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your e-mail address.'));
$form_state['redirect'] = false; //руками нацарапали!
}
}
?>
тогда мессага есть.
У кого есть какие идеи как это сделать на основе хуки или в чем причина, хотя редирект фальсе, тоже не выход...
А сейчас вообще интересно.
В abpcoretheme_form_user_register_form_alter добавила дополнительный обработчик сабмита - usr_regstr_sbm().
В usr_regstr_sbm() написала
<?php
$form_state['redirect'] = false;
?>
Сообщение вернулось...но редирект тоже нужен.
Где-то читал, что $form[#redirect] вроде как имеет приоритет над $form_state['redirect'].
И ещё, как вариант, можно как-то так:
сделать редирект на собственный адрес после удачного сабмита, в которой и выводить drupal_set_message('...конгратс, чувак.... Ты успешно бла..бла..бла..', 'status');
То есть установить form_state['redirect'] на другой (отличный) адрес. Соответственно и создать процедуру вывода страницы в hook_menu.
В таблице users есть запись для uid = 0?
Так и делаю но не работает
uid = 0 нет
Тогда слушайте спецов дальше, ога
Добавила 0 юзера, после регистрации появился зелёный message но почему то без текста, а если нажать f5, то вот такой error:
Можешь рассказать в чём дело?
Ну пожалуйста, не томи.
А то прям какой-то загадочный user 0 получился.
Типа мифического персонажа.
Соовщения drupal_set_message() хранятся в сессии. Друпал имеет свой обработчик сессий, все данные о сессиях хранятся в БД. Если в таблице {users} нет записи для uid = 0, то для анонимов не получится загрузить сессию. Но почему у кого-то эта запись для uid = 0 пропадает, для меня загадка.
Поставьте http://drupal.org/project/anonymous_user
anzebra
Вот здесь ещё кое-что нашлось:
http://drupal.org/node/264132
В общем, судя по всему, помимо создания пользователя user 0 нужно ещё и установить ему роль. В примере по ссылке выше ему привязывается роль анонима (1).
<?php
INSERT INTO users (uid, name, mail) VALUES ('0', '', '');
INSERT INTO users_roles (uid, rid) VALUES (0, 1);
?>
В общем, нужно просто любым способом добавить новую запись в таблицу users_roles (с uid = 0 и rid = 1).
[quote="deb"]
как там говорят ... "Умом Россию не понять ..."
Не знаю че там в 7-ке происходит, но 1-е что приходит на ум, так это запрос DELETE FROM sessions WHERE uid = 0, если сайт на локалхосте.
Прицепились к анонимусу. Вот сижу с обычной формой (не авторизации, D6) и опять же если $form['#redirect']=FALSE, то прописанный в функции сабмита drupal_set_message выводится, но без редиректа. А если $form['#redirect']='node/1' (например) - редиректится, но без мессаг. Аналогично и с $form_state['redirect'].
Масса подобных начатых веток и все без решений.
Если не брать во внимание нулевые uid'ы, а рассматривать просто форму, то можно по form['#action'] перейти на какую-либо страницу, а там в функции (по hook_menu) уже мессагить, обрабатывать пришедший $_POST и переходить (drupal_goto) куда надо.
Только не догоняю как после заполнения и обработки формы возвращаться на страницу из которой форма была вызвана.
Туманно? Криво? Этажно? С удовольствием выслушаю критику.
В форме создаю hidden-элемент с referer-ссылкой:
$explode_referer = explode(
$_SERVER['SERVER_NAME'] . '/',
$_SERVER['HTTP_REFERER']
);
$form['redirect_page'] = array(
'#type' => 'hidden',
'#value' => $explode_referer[1],
);
И этот элемент появляется в массиве $_POST.
Может лучше разобраться почему drupal_set_message() не работает?
Конечно. Трабла в девеловских выводах. Строчки типа drupal_set_message(krumo_ob($form_state, true)); мешали. Углубляться не стал, закомментировал и получил редирект после сабмита с выводом сообщений.
Все проще, ребята.
Нужно добавить в шаблон темы строчку для вывода сообщений:
<?php print $messages; ?>