我在drupal中创建一个表单来存储数据(对于匿名用户)所以当表单验证时我想保存它以从所有页面访问它但是在这个函数之外不起作用变量是NULL
你可以帮助我或让你有另一种方法继续吗?function myform_form_submit($form, &$form_state) {
....
$GLOBALS ['info'] = $info;
}
答案 0 :(得分:2)
评估Drupal表单时,它会执行任何代码,包括数据库更改。但随后它将用户重定向到一个新页面,该页面丢弃了PHP会话,包括$ GLOBALS等。
更多的Drupally方法是使用持久性变量,这些变量存储在"变量"数据库表。
此处可以使用variable_set功能。所以替换
### $GLOBALS['info'] = $info ### replace with:
variable_set('mymodule_info', $info);
然后当你访问它时,而不是使用$ GLOBALS,只需使用
$info = variable_get('mymodule_info', NULL);
您可以使用任何名称来指定变量。我将NULL作为第二个参数添加到variable_get,以防数据库中没有值。
如果数据与特定用户相关联,您可能需要执行类似
的操作global $user;
variable_set('mymodule_info_uid_' . $user->uid, $info);
然后检索数据使用
global $user;
$info = variable_get('mymodule_info_uid_' . $user->uid, NULL);
编辑:啊,现在我看到你正在与匿名用户打交道。在这种情况下,PHP可以通过提供可以以相同方式使用的会话ID来为您识别匿名用户:
variable_set('mymodule_info_session_' . session_id(), $info);
variable_get('mymodule_info_session_' . session_id(), NULL);
对于匿名用户的浏览会话,这应该是持久的。
这种方法的问题在于,您需要想出一些清除它们的方法。您可能需要在$ info变量中存储时间戳,并有一个cron作业来从变量表中删除过期的条目。