drupal 7注册表格alter submit

时间:2013-12-20 11:54:36

标签: drupal drupal-7

我只是在注册表单中添加user_type元素。我想在user_roles表中插入该user_type。

获取错误

  

致命错误:超过30秒的最长执行时间

function bartik_form_alter(&$form, &$form_state, $form_id) {
  $result = db_query("SELECT name, rid FROM role where rid > 3");
  foreach ($result as $row){
    $option[$row->rid] = $row->name;
  }

  if ($form_id == 'user_register_form') {
    $form['user_type'] = array(
      '#type'=>'select',
      '#title' => t('User Type'),
      '#options' => $option,
      '#multiple' => false,
      '#attributes'=>array('size'=>0),
      '#required' => TRUE,
    );
    $form['#submit'][] = 'bartik_form_alter_submit'
  }
}

/**
 * Additional handler for user_login form submit.
 */



function  bartik_form_alter_submit($form, &$form_state) {
    if (isset($form_state['values']['user_type'])){
        $LastCreatedUsername = $form_state['values']['name'];
        $fetch_uid_arr = db_select('users', 'u')
                ->fields('u', array('uid'))
                ->condition('name', $LastCreatedUsername, '=')
                ->execute()
                ->fetchAssoc();

        $uid = $fetch_uid_arr['uid'];
        $rid = $form_state['values']['user_type'];
        $nid = db_insert('users_roles') 
               ->fields(array('uid' => $uid,'rid' => $rid,))
               ->execute();
    }   
}

更新状态:根据@Ben建议,我修改了代码片段,在注册页面中选择的角色更新为表格。

请提供您对我的更新代码的建议/反馈。是将角色插入drupal表的正确方法。

我在新安装的drupal应用程序中尝试了上面的代码片段。保存单身形式系统需要将近4分钟。 Drupal版本7.24

1 个答案:

答案 0 :(得分:1)

我不会认为它会使您的网站减慢30秒,但您的代码的一个明显问题是您正在为每个表单构建角色。您应该首先执行表单ID检查:

<?php
function bartik_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register_form') {
    $result = db_query("SELECT name, rid FROM role where rid > 3");
    foreach ($result as $row){
      $option[$row->rid] = $row->name;
    }

    $form['user_type'] = array(
      '#type'=>'select',
      '#title' => t('User Type'),
      '#options' => $option,
      '#multiple' => false,
      '#attributes'=>array('size'=>0),
      '#required' => TRUE,
    );
  }
}

您也可以使用针对该特定表单的bartik_form_user_register_form_alter(&$form, &$form_state)

我还建议使用Devel和Xhprof查看所有执行时间的花费。