2014-06-06 5 views
0

제 문제는 등록 양식에 선택 드롭 다운을 추가하여 사용자 유형을 선택하고 싶습니다. 그러나이 코드는 프런트 엔드에 양식 요소를 표시하지 않습니다. 누군가가 코드를보고 해당 코드의 문제점을 알려주십시오. 이 요소를 포함하지만 등록 양식에 표시되지 않는 배열을 볼 수 있습니다. 아래에있는 내 코드는 여기에서 확인하십시오 :Drupal 사용자 정의 등록 폼 요소가 프런트 엔드에 표시되지 않습니다.

<?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

그것에 변경 사항이 당신의 hook_form_alter 구현의 호출자에 다시 전달되지 않습니다, 그래서 당신은 참조로 $form 변수를 전달하지 않는가.

변경 :

function registration_role_dropdown_form_alter($form, &$form_state, $form_id) 

참고 $form 매개 변수 앞에 앰퍼샌드의 추가

function registration_role_dropdown_form_alter(&$form, &$form_state, $form_id) 

합니다.

사이드 노트 : Drupal의 규칙은 이 아니며은 모듈 파일의 <?php 태그를 닫습니다.

+0

우수! 당신의 똑똑한 대답에 감사드립니다. –

관련 문제