【问题标题】:Drupal: drupal_set_message doesnt display a messageDrupal:drupal_set_message 不显示消息
【发布时间】:2009-10-03 09:18:19
【问题描述】:

当用户在我的网站上注册时,我似乎无法从 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;
      }
    }
    ...

}

它打印'xxxxx';

$_SESSION 变量的 var_dump 提供状态消息,drupal_set_message 不显示,所以看起来也不错。

我已经卸载了所有模块,只剩下核心,现在使用 Garland 作为主题。

此外,我安装了全新的 Drupal 安装,它给了我一个很好的状态消息。

然后我比较了全新安装的 .htaccess 和 Drupal 的。修改我的以使它们相等。

没有任何帮助。

有什么想法吗?

【问题讨论】:

  • 您还在不同的页面/情况下收到其他状态消息吗?
  • 请在 .试试看

标签: drupal


【解决方案1】:

我们刚刚解决了它。显然,用户 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 有什么关系。

【讨论】:

  • 谢谢,谢谢,谢谢 - 我整天都在努力寻找解决方案。我永远不会拿起它。很久以前就忘记了,我出于某种奇怪的原因从用户那里删除了记录 0。祝福你。
【解决方案2】:

很好地找到了原因 - 几周前我遇到了同样的问题。

现在,原因:

Drupal 会话通过 ID 号(如果您查看,您可以在数据库的会话表中看到)链接到用户。 Drupal 也有自己的会话处理功能,其中之一是检查当前会话是否与有效用户帐户相关联 - 对于匿名用户,即用户 0 - (多个会话无关紧要对每个用户开放 - 当有这么多匿名用户访问您的网站时肯定会发生这种情况)。

如果 Drupal 没有为当前会话找到有效用户,则重新生成会话 - 这意味着先前的信息丢失。

编辑:

最近的一条评论促使我在答案中增加一点深度,因为我已经找到了最可能导致错误的原因。

基本上,匿名用户使用 ID 0。如果您在 MySQL 中的自动递增字段中插入 0 值,该值实际上将成为序列中的下一个可用值(因此,自动递增字段设置为 10 的表将在 11 处插入而不是 0)。

我们遇到了这个问题,因为我们在开发过程中使用 MySQL 转储来导出和导入备份。

【讨论】:

  • 这也花费了我很多时间。谢谢你把它放在这里。
【解决方案3】:

另一个问题可能是您的主题没有在模板中打印 $message。

【讨论】:

  • 不,如原帖所述,我们首先切换到花环以排除这种情况。之后我们删除了一个又一个模块。我们通过添加缺少的用户 0 来解决它。
  • 仍有可能,如果您更改了主题或意外删除了它。还发布了更多作为对第二个人或将来可能出现的其他人的回应,因为大多数评论问题,它 $message 已从模板中删除。另一件事是,当您删除匿名用户(uid 0)时,只会影响显示给未登录用户的消息,因为消息保存在会话中。所以它仍然适用于已登录的用户。
【解决方案4】:

即使在执行 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']);
            }

        ?>

希望对某人有所帮助。

【讨论】:

  • 感谢兄弟,它成功了!但你找到真正的原因了吗?
【解决方案5】:

我发现这个问题很长时间了,这是因为您安装的其他模块会影响这个 如果您使用 linux,则可以在控制台中的 phpmyadmin o 中应用此代码。

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

【讨论】:

    【解决方案6】:

    drupal_set_message($msg, $type = 'status'); 让您设置一条消息,它将自动显示在用户访问的下一个(或当前)页面上。

    查看文档:http://api.drupal.org/api/function/drupal_set_message/6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-03
      • 2023-03-03
      • 2021-12-12
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多