我的问题是,我想在注册表单中添加一个选择下拉列表来选择用户类型。但是这段代码没有在前端显示表单元素。有人可以看看代码并告诉我该代码有什么问题。我可以看到包含此元素但未在注册表单中显示的数组。 请在这里查看我的代码:
<?php
function registration_role_dropdown_form_alter($form, &$form_state, $form_id){
if ($form_id == 'user_register_form') {
/*$query = db_select('role', 'r');
$query->addTag('translatable');
$query->fields('r', array('rid', 'name'));
$query->orderBy('weight');
$query->orderBy('name');
if (!empty($permission)) {
$query->innerJoin('role_permission', 'p', 'r.rid = p.rid');
$query->condition('p.permission', $permission);
}
$result = $query->execute();*/
$form['account']['roles']= array(
'#type' => 'select',
'#title' => t('Register As'),
'#options' => array(
registration_role_dropdown_user_roles()
),
'#description' => t('Select the <em>User type</em> from the dropdown.'),
);
}
}
function registration_role_dropdown_user_roles($membersonly = FALSE, $permission = NULL) {
$query = db_select('role', 'r');
$query->addTag('translatable');
$query->fields('r', array('rid', 'name'));
$query->orderBy('weight');
$query->orderBy('name');
if (!empty($permission)) {
$query->innerJoin('role_permission', 'p', 'r.rid = p.rid');
$query->condition('p.permission', $permission);
}
$result = $query->execute();
$roles = array();
foreach ($result as $role) {
switch ($role->rid) {
// We only translate the built in role names
case DRUPAL_ANONYMOUS_RID:
if (!$membersonly) {
$roles[$role->rid] = t($role->name);
}
break;
case DRUPAL_AUTHENTICATED_RID:
$roles[$role->rid] = t($role->name);
break;
default:
$roles[$role->rid] = $role->name;
}
}
return $roles;
}
?>
答案 0 :(得分:1)
您没有通过引用传递$form
变量,因此您对它的更改永远不会传递回hook_form_alter
实现的被调用方。
变化:
function registration_role_dropdown_form_alter($form, &$form_state, $form_id)
到
function registration_role_dropdown_form_alter(&$form, &$form_state, $form_id)
请注意在$form
参数之前添加&符号。
附注:Drupal的约定是不关闭模块文件中的开始<?php
标记。