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 不显示消息的主要内容,如果未能解决你的问题,请参考以下文章