Drupal:drupal_set_message 不显示消息

Posted

技术标签:

【中文标题】Drupal:drupal_set_message 不显示消息【英文标题】:Drupal: drupal_set_message doesnt display a 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 的。修改我的以使它们相等。

没有任何帮助。

有什么想法吗?

【问题讨论】:

您还在不同的页面/情况下收到其他状态消息吗? 请在 .试试看 【参考方案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

【讨论】:

以上是关于Drupal:drupal_set_message 不显示消息的主要内容,如果未能解决你的问题,请参考以下文章

Drupal输出实数PHP

标准德鲁帕尔

如何从 Drupal 7 向 Drupal 8 贡献一个模块

Drupal 9 | Drupal.org

Drupal 9 | Drupal.org

drupal blog 怎么显示