Drupal 7-如何将用户重定向到某个页面,直到他们更改该页面上的设置为止?

Drupal 7-如何将用户重定向到某个页面,直到他们更改该页面上的设置为止?,drupal,redirect,drupal-7,Drupal,Redirect,Drupal 7,我如何强制Drupal 7将用户重定向到某个页面(其中包含一个表单),无论用户在登录后在何处单击该站点,直到他们填写该表单 一旦用户到达该站点,他们就可以随意浏览。 一旦他们登录/注册,我想显示一个页面(带有表单)并且不允许 在他们填写表格之前,他们可以去其他任何地方 此解决方案必须与缓存页面一起使用,因此无法使用hook_init()。 hook_boot()似乎是个好主意,但加载太早,很多必需的include无法加载 此外,解决方案必须检查页面请求是否是实际的表单提交(否则他们将无法提交表单

我如何强制Drupal 7将用户重定向到某个页面(其中包含一个表单),无论用户在登录后在何处单击该站点,直到他们填写该表单

一旦用户到达该站点,他们就可以随意浏览。 一旦他们登录/注册,我想显示一个页面(带有表单)并且不允许 在他们填写表格之前,他们可以去其他任何地方

此解决方案必须与缓存页面一起使用,因此无法使用hook_init()。 hook_boot()似乎是个好主意,但加载太早,很多必需的include无法加载

此外,解决方案必须检查页面请求是否是实际的表单提交(否则他们将无法提交表单)


有什么想法和建议吗?

好的,看来hook_init()是解决方案,问题是由$user对象引起的。诀窍是,您必须重新加载$user对象,因为全局对象不包含字段值

非常简单的示例代码:

function mymodule_init(){
    global $user;

    if($user->uid && $user->uid != 1){

        $account = user_load($user->uid);
        $account = entity_metadata_wrapper('user', $account);

        $destination = drupal_get_destination();

        if(!$account->field_setup_completed->value()){
            drupal_set_message('Setup incomplete.', 'error');

            if($destination['destination'] != 'setup-page' && $destination['destination'] != 'user/logout'){
                drupal_set_message('Redirecting to setup', 'error');
                drupal_goto('setup-page');
            }
        }
    }
}

为什么不能在缓存页面上使用hook_init?一旦清除缓存挂钩,init将是一个完美的选择。感谢您检查并发布解决方案。我必须问一下……您是否出于任何特殊原因使用
实体\u元数据\u包装器()
?这是一个不必要的额外步骤,因为一旦调用
user\u load()
,您就可以测试
$account->field\u setup\u completed[$user->language][0]['value']
。我问这个问题的原因是因为我以前从未见过它以这种方式使用,我想知道你的推理:)克莱夫,你是对的,在那里转换它没有意义,我只是习惯了它,因为我主要处理实体。(另外,我打算稍后使用$account对象对用户进行更改,但这不是示例的一部分)