我只是在注册表单中添加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
答案 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查看所有执行时间的花费。