2011-03-12 3 views
2

Ugh, c'est probablement quelque chose de simple, mais ça me rend fou. J'ai un formulaire simple (juste un bouton soumettre) que j'insère dans un noeud en utilisant hook_nodeapi(). Il est inséré correctement, et la page s'actualise lorsque je l'envoie, mais elle n'atteint jamais la fonction form_submit(). Voici le code:Pourquoi ma fonction de soumission de formulaire drupal n'est-elle pas appelée?

function fantasy_stocks_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    $form = drupal_get_form('fantasy_stocks_buy_me_form', $node); 
    switch ($op) { 
    case 'view': 
     $node->content['body']['#value'] .= $form; 
     break; 
    } 
} 

function fantasy_stocks_buy_me_form(&$form_state, $node) { 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('Buy') . ' ' . $node->title, 
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'), 
    '#value' => t('Buy') . ' ' . $node->title, 
    '#submit' => TRUE 
); 
    $form['node_added'] = array(
    '#type' => 'hidden', 
    '#value' => $node->nid 
); 
    $form['#submit'][] = 'fantasy_stocks_buy_me_form_submit'; 
    return $form; 
} 


function fantasy_stocks_buy_me_form_submit($form, &$form_state) { 
    $message = 'You have submitted the ' . $form_id . ' form which contains the following data:<pre>' . print_r($form_values,true) . '</pre>'; 
    drupal_set_message(t($message)); 
} 

J'ai essayé d'ajouter un écho et mourir() dans la fonction d'envoi, il est certainement pas appelé. J'ai également essayé de quitter la déclaration $ form ['# submit'], car la valeur par défaut devrait en prendre soin, mais en vain. Je sais que je dois manquer quelque chose de stupide. Des idées?

De plus, une chose qui semblait bizarre est que la forme se rend avec la balise suivante:

<form action="/MLMBid/node/5" accept-charset="UTF-8" method="post" id="fantasy-stocks-buy-me-form-1"> 

Est-ce normal, d'avoir le « -1 » annexée au formulaire id?

Répondre

-1

J'aurais tendance à penser que le "-1" sur le formulaire id est la racine de votre problème. Cependant, pas seulement le "-1" pourquoi l'id de formulaire est rendu avec "-" au lieu de "_" comme est référencé dans le reste du code. Résolvez cela et votre problème devrait être résolu.

Malheureusement, je n'ai pas encore utilisé Drupal (juste Joomla). Je voudrais essayer de changer le code pour correspondre à ce que l'ID de formulaire est rendu (fantasy-stock-buy-me-form-1) au lieu de ce que vous avez actuellement.

+1

Je ne peux pas changer les noms des fonctions, les tirets sont un caractère illégal dans un nom de fonction. Je suppose que drupal convertit les traits de soulignement en tirets quand il rend le formulaire, puis les convertit en retour pour appeler la fonction? Mais oui, le "-1" est bizarre ... Je vais regarder plus en détail pourquoi cela apparaît. – SenorPuerco

+0

Le -1 est là pour s'assurer que l'ID est unique au cas où le même formulaire pourrait être rendu plusieurs fois sur une page. –

+3

assez drôle la réponse a obtenu -1 – B2F

5

Enfin compris. La partie qui a été crée le bouton d'envoi:

$form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('Buy') . ' ' . $node->title, 
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'), 
    '#value' => t('Buy') . ' ' . $node->title, 
    '#submit' => TRUE 
); 

Je copié des parties de ce à partir d'un tutoriel, et apparemment la ligne

'#submit' => TRUE 

ne devrait pas être là. Il remplaçait le gestionnaire de soumission de formulaire, ce qui faisait que drupal tentait de rechercher une fonction appelée TRUE. Savait que c'était quelque chose de stupide.

Questions connexes