Drupal: drupal_set_message не отображает сообщение - PullRequest
6 голосов
/ 03 октября 2009

Я не могу получить сообщение от drupal_set_message, когда пользователь регистрируется на моем сайте. Я использую Drupal 6.14.

Добавление распечатки в user.module:

function user_register_submit($form, &$form_state) {
  ...
      if ($notify) {
        ...
      }
      else {
        drupal_set_message(t('Your password and further instructions have been sent to your e-mail address.'));
        print 'xxxxxx';
        $form_state['redirect'] = '';
        return;
      }
    }
    ...

}

Он печатает «ххххх»;

A var_dump переменной $_SESSION выдает сообщение о состоянии, которое drupal_set_message не отображается, так что оно также выглядит нормально.

Я удалил все свои модули, осталось только ядро, и теперь использую Garland в качестве темы.

Кроме того, я установил свежую установку Drupal, и там она дает мне хорошее сообщение о состоянии.

Затем я сравнил мой .htaccess и Drupal из свежей установки. Модифицированный мой, чтобы сделать их равными.

Ничего не помогает.

Есть мысли?

Ответы [ 6 ]

11 голосов
/ 03 октября 2009

Мы только что решили это. Видимо, пользователь 0 отсутствовал, кто-то удалил его или какой-то модуль сделал это. Вставив его в базу данных, мы снова получили наши сообщения.

Вот что вам нужно сделать:

INSERT INTO `users` (`uid`, `name`, `pass`, `mail`, `mode`, `sort`, `threshold`, `theme`, `signature`, `signature_format`, `created`, `access`, `login`, `status`, `timezone`, `language`, `picture`, `init`, `data`) VALUES
(0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);

И после этого установите uid в 0, потому что uid является автоинкрементом !!

До сих пор не знаю, как этот беспорядок с drupal_set_message.

10 голосов
/ 05 октября 2009

хорошо покончили с поиском причины - у меня была точно такая же проблема пару недель назад.

Теперь по причине:

Сессии Drupal связаны с ID номером (вы можете увидеть это в таблице сессий в базе данных, если вы посмотрите) для пользователя. Drupal также имеет свои собственные функции обработки сеансов, и одной из них является проверка, чтобы увидеть, связан ли текущий сеанс с действительной учетной записью пользователя - и для анонимных пользователей, то есть пользователя 0 - (не имеет значения, если несколько сеансов открыты для каждого пользователя - что, безусловно, происходит, когда на сайт заходит так много анонимных пользователей).

Если Drupal не находит действительного пользователя для текущего сеанса, тогда сеанс восстанавливается заново - это означает, что предыдущая информация потеряна.

Edit:

Недавний комментарий побудил меня добавить в ответ немного больше глубины, поскольку с тех пор я нашел наиболее вероятную причину ошибки.

По сути, это использование идентификатора 0 для анонимного пользователя. Если вы вставите значение 0 в поле с автоинкрементом в MySQL, оно станет следующим доступным значением в последовательности (поэтому таблица с полем с автоинкрементом, равным 10, будет вставлять значение 11, а не 0).

Мы столкнулись с проблемой, потому что мы использовали дампы MySQL для экспорта и импорта резервных копий во время разработки.

4 голосов
/ 03 октября 2009

Другая проблема может заключаться в том, что ваша тема не печатает сообщение $ в шаблонах.

2 голосов
/ 10 февраля 2010

Мне не удалось отобразить сообщения, даже если они выполняли theme_get_messages () или echo $ messages и т. Д.

Поэтому мне пришлось получить его из $ _SESSION ['messages'].

есть:

<?php 
            // we aren't getting messages, get them manually
            if (isset($_SESSION['messages'])) {
                echo '<div class="messages">';
                foreach($_SESSION['messages'] as $type=>$messages) {
                    echo "<p class=\"$type\">".implode("</p><p class=\"$type\">", $messages)."</p>";
                }
                echo '</div>';
                unset($_SESSION['messages']);
            }

        ?>

Надеюсь, это кому-нибудь поможет.

1 голос
/ 19 ноября 2015

я нахожу то же самое в течение длительного времени, это причина для других устанавливаемых вами модулей, которые влияют Вы можете применить этот код в phpmyadmin o в консоли, если вы используете Linux.

INSERT INTO `users` (`uid`, `name`, `pass`, `mail`, `theme`, `signature`, `signature_format`, `created`, `access`, `login`, `status`, `timezone`, `language`, `picture`, `init`, `data`) VALUES
(0, '', '', '', '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
0 голосов
/ 05 декабря 2016

drupal_set_message($msg, $type = 'status'); позволяет установить сообщение, оно будет автоматически отображаться на следующей (или текущей) странице, которую посещает пользователь.

См. Документы: http://api.drupal.org/api/function/drupal_set_message/6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...