为什么我的drupal表单提交函数不被调用?

时间:2011-03-12 03:44:59

标签: php drupal drupal-6 form-api nodeapi

嗯,这可能很简单,但它让我发疯。我有一个简单的表单(只是一个提交按钮),我使用hook_nodeapi()插入节点。它被正确插入,并在我提交时刷新页面,但它永远不会访问form_submit()函数。这是代码:

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));
}

我尝试在提交函数中添加一个echo和die(),它绝对不会被调用。我也尝试不使用$ form ['#submit']声明,因为默认应该处理它,但无济于事。我知道我一定会错过一些愚蠢的东西。有什么想法吗?

另外,有一件事看起来很奇怪,表单会使用以下标记进行渲染:

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

是否正常,将“-1”附加到表单ID?

2 个答案:

答案 0 :(得分:5)

终于明白了。创建提交按钮的部分:

$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
  );

我从教程中复制了部分内容,显然是

'#submit' => TRUE

不应该在那里。它覆盖了表单提交处理程序,它使drupal尝试查找名为TRUE的函数。知道这是愚蠢的事。

答案 1 :(得分:-1)

我倾向于认为表单id上的“-1”是问题的根源。但是,不仅仅是“-1”,为什么表单id用“ - ”而不是“_”呈现,就像在其余代码中引用一样。解决这个问题,你的问题应该得到解决。

不幸的是,我还没有使用过Drupal(只是Joomla)。我会尝试更改代码以匹配表单ID呈现为(fantasy-stock-buy-me-form-1)而不是您目前拥有的内容。