Drupal 7 Drupal 7:由允许的用户编辑时不保存用户信息

Drupal 7 Drupal 7:由允许的用户编辑时不保存用户信息,drupal-7,Drupal 7,我目前正在为一个艺术家组织开发一个新网站。允许管理员角色创建帐户和其他一些节点内容,创建的帐户具有相同的默认角色artisan。管理员也是工匠。工匠可以创建和编辑自己的内容。管理员和artisan都应该能够为admin编辑所有用户配置文件,仅为artisan编辑自己的用户配置文件。事实上,管理员可以创建一个用户,但除了user1之外,没有人可以在编辑后保存用户配置文件,但它对其他节点非常有效。权限已被扫描多次。我到处找都没找到,我错过了什么?我做了很少的更改,我编写的唯一相关代码如下: <

我目前正在为一个艺术家组织开发一个新网站。允许管理员角色创建帐户和其他一些节点内容,创建的帐户具有相同的默认角色artisan。管理员也是工匠。工匠可以创建和编辑自己的内容。管理员和artisan都应该能够为admin编辑所有用户配置文件,仅为artisan编辑自己的用户配置文件。事实上,管理员可以创建一个用户,但除了user1之外,没有人可以在编辑后保存用户配置文件,但它对其他节点非常有效。权限已被扫描多次。我到处找都没找到,我错过了什么?我做了很少的更改,我编写的唯一相关代码如下:

 <?php
function canardesign_system_form_alter(&$form, &$form_state, $form_id){
global $user;
    switch ($form_id){
    case 'oeuvre_node_form':
            $form['actions']['submit']['#submit'][] = 'canardesign_system_oeuvre_redirect';
                if (in_array('artisan', array_values($user->roles))){
                    $form['field_auteur']['#type']= 'hidden';
                    $form['field_auteur']['und']['#default_value']= $user->uid;
                }
        break;
    case 'user_profile_form':
    if (in_array('artisan', array_values($user->roles))){
            $form['actions']['submit']['#submit'][] = 'canardesign_system_user_profile_form_submit';
        }
        break;
    }
}
function canardesign_system_oeuvre_redirect($form, &$form_state) {
    $type=$form['#node']->type;
    if(isset($type))
    {
         $node = node_load($form_state['nid']);
        $uid=field_get_items('node', $node, 'field_auteur')[0]['target_id'];
        $form_state['redirect'] = 'oeuvres/'.$uid;
    }
  }
function canardesign_system_user_profile_form_submit($form, &$form_state) {
  drupal_goto('artisans');
}
/*default role when administrator (who is artisan as well) creates an account*/
function canardesign_system_user_insert(&$edit, $account, $category) {
    global $user;
    if (in_array('artisan', array_values($user->roles))){
      $account->role = 'artisan';
  }
}
?>

谢谢你的帮助

我不确定这是否是问题的原因,但在提交钩子中调用drupal_goto肯定是有问题的。它本质上缩短了表单的处理

这可能是由于阻止执行其他必要的代码而导致问题

相反,您应该将$form_state的重定向键设置为希望用户最终到达的目标

表单处理完成后,Drupal会将用户发送到那里

function canardesign_system_user_profile_form_submit($form, &$form_state) {
  $form_state['redirect'] = 'artisans';
}

你说得对,一旦我删除了drupal,就转到了按预期保存的配置文件。然而,没有发生重定向。因此,我最终创建了一个新规则,它带来了添加微调条件和反应的好处,而无需任何编码。非常感谢。