2010-12-08 10 views
1

J'ai créé un petit module pour modifier des formes appelées "form_mods". Le formulaire que je modifie est le "user_profile_form". J'ai ajouté une catégorie pour les champs supplémentaires appelés "Profil". J'ai créé un champ select dans l'admin Drupal appelé "profile_state" et je le modifie dans mon module pour avoir une liste de clés => valeur et ça fonctionne pour moi quand je suis connecté en tant qu'administrateur mais un utilisateur anonyme essaie s'inscrire voit un champ de sélection d'états vides. Y a-t-il un problème de permissions ici? J'ai essayé d'ajouter 'access' => user_access ('access content') au champ mais cela n'a pas fonctionné. Voici mon code:Drupal hook_form_alter utilisateur anonyme ne peut pas voir les champs

function form_mods_form_alter($form, $form_state, $form_id) { 

    switch ($form_id) { 

     ## user_profile_form ################################################################################### 
     case 'user_profile_form': // This is our form ID. 

      //echo '###'.$form['_category']['#value'].'###'; 
      if($form['_category']['#value'] == 'Profile'){ 

       // Modify the states dropdown list 
       $states = load_states_list(); 
       $form['Profile']['profile_state'] = array(
        '#type' => 'select', 
        '#title' => t('State'), 
        '#options' => $states, 
        '#required' => TRUE, 
        '#default_value' => isset($form['Profile']['profile_state']['#default_value']) ? $form['Profile']['profile_state']['#default_value'] : '', 
        '#element_validate' => array('profile_state_validate') 
       ); 

      } 
     #################################################################################### 
     break; 

    } 

} 

function load_states_list() { 

    $states = array('' => '-- Select a state'); // add a default empty value 
    $results = db_query("SELECT * FROM {states_list} ORDER BY name ASC"); 
    while ($state = db_fetch_array($results)) { 
     $states[$state['code']] = $state['name']; 
    } 

    return $states; 

} 

Merci

+0

Pas de déterrer une vieille question, mais si cela est résolu, pouvez-vous marquer la mienne comme la réponse? Il a obtenu plusieurs votes maintenant et a résolu le problème. J'essaie de nettoyer mes réponses suspendues. Merci! – mikesir87

Répondre

3

Tout d'abord, êtes-vous sûr que vous êtes la fonction obtient jamais courir? Ayant la fonction nommée comme vous le faites, je ne pense pas que ce soit le cas. Si le nom du module est « form_mods », votre fonction doit être appelée

function form_mods_form_alter 

Ou ... puisque vous êtes seulement de modifier la forme de user_profile_form, vous pouvez utiliser le nom de la fonction

function form_mods_user_profile_form_alter 

Maintenant, la raison pour laquelle cela ne fonctionne pas est que vous n'avez pas le & devant le formulaire $ dans la liste des paramètres. Le & passe fondamentalement la variable comme référence, et donc toutes les modifications que vous apportez à la variable $ form seront sauvegardées et transmises à la fonction appelante. Ainsi, votre fonction doit ressembler à

function form_mods_form_alter(&$form, &$form_state, $form_id) { 

OU

function form_mods_user_profile_form_alter(&$form, &$form_state) { 

Référence: http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_form_alter/6

-2

Merci mikesir87 pour le lien de référence. J'ai compris mon problème. Il existe 2 formulaires différents qui utilisent les champs que j'ai créés. Ils ont des ID de formulaire différents. Je dois rechercher les ID de formulaire "user_profile_form" et "user_register".

Voici mon nouveau code qui fonctionne:

function form_mods_form_alter($form, $form_state, $form_id) { 

    if((($form_id == 'user_profile_form') && ($form['_category']['#value'] == 'Profile')) || ($form_id == 'user_register')){ 

      // Modify the states dropdown list 
      $states = form_mods_load_states_list(); 
      $form['Profile']['profile_state'] = array(
       '#type' => 'select', 
       '#title' => t('State'), 
       '#options' => $states, 
       '#required' => TRUE, 
       '#default_value' => isset($form['Profile']['profile_state']['#default_value']) ? $form['Profile']['profile_state']['#default_value'] : '' 
      ); 

    } 

} 

grâce

+1

s'il vous plaît mettre à jour votre message original. En outre, il semblerait que vous n'ayez pas renommé correctement votre fonction. si cette fonction se trouve dans le module "form_mods" que vous avez créé, la fonction devrait être appelée form_mods_form_alter() –

+0

Merci Erik. C'est corrigé maintenant. Voulez-vous dire que je mets à jour mon message original avec ma solution au lieu d'y répondre? Merci – EricP

Questions connexes