2009-10-15 7 views
4

J'ai d'abord commencé cette question dans un autre thread, mais ce thread était sorta, un peu répondu, et maintenant je veux surtout savoir comment spécifier une autre action de formulaire ... J'ai essayé d'utiliser le code ci-dessous, , reste inchangé, même si en regardant le print_r($form), il est correctement changé ... Pourquoi est-il pas ramasser?Comment remplacer une action de formulaire dans Drupal?

function mytheme_user_profile_form($form) { 
     global $user; 
     $uid = $user->uid; 
     //print '<pre>'; print_r($form); print '</pre>'; 
    $category = $form['_category']['#value']; 

    switch($category) { 
      case 'account': 
       $form['#action'] = '/user/'.$uid.'/edit?destination=user/'.$uid; 
         break; 
     case 'education': 
         $form['#action'] = '/user/'.$uid.'/edit/education?destination=user/'.$uid; 
         break; 
     case 'experience': 
         $form['#action'] = '/user/'.$uid.'/edit/experience?destination=user/'.$uid; 
         break; 
      case 'publications': 
         $form['#action'] = '/user/'.$uid.'/edit/publications?destination=user/'.$uid; 
         break; 
     case 'conflicts': 
         $form['#action'] = '/user/'.$uid.'/edit/conflicts?destination=user/'.$uid; 
         break; 
    } 

     //print '<pre>'; print_r($form); print '</pre>'; 
     //print $form['#action']; 
     $output .= drupal_render($form); 
     return $output; 
+0

sorta/kinda? ;) déf. laissez-moi savoir si vous avez besoin de plus d'aide. – mikewaters

+0

Si vous voulez éditer l'action url, j'ai trouvé cet article qui m'a aidé: http://actionscript-flash-guru.com/blog/47-exposed-form-in-block-change-the-action-url- -drupal-6 - views - hookformalter –

Répondre

7

hook_form_alter() est probablement le chemin à parcourir. Voici quelques liens nous espérons utiles:

Form Theming: How do I set $form['action']?

Modifying Forms in Drupal 5 and 6

hook_form_alter

EDIT: Répondre au commentaire n ° 1 ci-dessous:

Comment mettre en œuvre hook_form_alter():

Vous devez créer un module (vous ne pouvez pas utiliser template.php). C'est plus facile que ça en a l'air.

Pour un module nommé « formstuff », vous devez créer formstuff.info et formstuff.module et les mettre dans les deux sites/all/modules ou sites/yoursitename/modules. Mettre en place les fichiers .info et .module par the instructions, puis il suffit de créer la fonction suivante dans votre fichier .module:

function formstuff_form_alter(&$form, $form_state, $form_id) { 
    // do stuff 
} 

Cette fonction est un crochet parce qu'il est nommé correctement (c.-à remplacer le mot « crochet » avec le nom de votre module), et il correspond à la signature de la fonction hook_form_alter (c'est-à-dire qu'il prend les mêmes paramètres).

Ensuite, il suffit d'activer votre module dans l'admin de votre site et le crochet devrait faire de la magie.

Notez que hook_form_alter fait référence au formulaire; Cela vous permet de le modifier sur place.

+0

J'ai essayé d'utiliser form_alter, mais cela n'a pas fonctionné. Bien que, j'ai mis le code dans mon fichier template.php. Est-ce correct? – n00b0101

1

Vous devez placer la fonction form_alter dans un module, puis utiliser if ou switch pour vérifier l'ID de formulaire. Si l'ID du formulaire est celui que vous voulez modifier, donnez au formulaire une propriété d'action

$form['someID'] = array(
'#action' => 'path/you/want', 
); 
+0

J'ai essayé ceci, l'ai ajouté à mon my.module et ai vidé les caches, etc., mais ne fonctionnait toujours pas:

 function user_profile_form_alter(&$form, $form_state, $form_id) { \t switch($form_id) { \t \t case 'user_profile_form': \t \t if(arg(0) == 'user' && is_int(arg(1))) { \t \t \t if($form['_category']['#value'] == 'education') { \t \t \t \t $form['#action'] = 'user/'.arg(1).'/edit/education'; \t \t \t } \t \t } break; \t } } 
n00b0101

+0

Le nom de fonction devrait être "my_module_form_alter". Pour éviter l'instruction switch, vous pouvez utiliser "my_module_form_user_profile_form_alter", en supposant que l'ID de formulaire est correct. – Grayside

Questions connexes