当用户在我的网站上注册时,我似乎无法从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';
var_dump
变量的$_SESSION
会显示状态消息,drupal_set_message
不会显示,所以看起来也不错。
我已经卸载了所有模块,只有核心遗骸,现在使用Garland作为主题。
此外,我已经安装了一个新的Drupal安装,在那里它给了我一个很好的状态信息。
然后我从全新安装中比较了我的.htaccess和Drupal。修改我的使它们相等。
没有任何帮助。
有什么想法吗?
答案 0 :(得分:11)
我们刚解决了。显然,用户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。
答案 1 :(得分:10)
很好地找到了原因 - 几周前我就遇到了同样的问题。
现在,原因是:
Drupal会话通过ID号链接(您可以在数据库中的会话表中看到这一点,如果您查看)给用户。 Drupal还拥有自己的会话处理功能,其中之一是检查当前会话是否与有效用户帐户相关联 - 对于匿名用户,即用户0 - (如果多个会话则无关紧要)每个用户都是开放的 - 这肯定是当很多匿名用户访问您的网站时会发生的事情。)
如果Drupal没有找到当前会话的有效用户,则会重新重新生成会话 - 这意味着之前的信息会丢失。
编辑:
最近的评论促使我为答案添加了更多深度,因为我发现了导致错误的最可能原因。
基本上,匿名用户使用ID 0。如果将一个0值插入MySQL中的自动递增字段,该值实际上将成为序列中的下一个可用值(因此,自动递增字段设置为10的表将INSERT为11而不是0)。 / p>
我们遇到了这个问题,因为我们在开发过程中使用MySQL转储来导出和导入备份。
答案 2 :(得分:4)
另一个问题可能是您的主题不会在模板中打印$ message。
答案 3 :(得分:2)
即使在执行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']);
}
?>
希望能有所帮助。
答案 4 :(得分:1)
我发现这一点很长一段时间,这是因为您安装的其他模块会影响这一点 如果使用linux,可以在控制台的phpmyadmin中应用此代码。
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);