2

うーん、これはおそらく単純なことですが、それは私を夢中にさせています。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));
}

submit 関数に echo と die() を追加しようとしましたが、絶対に呼び出されません。$form['#submit'] 宣言を省略しようとしましたが、デフォルトで処理されるはずですが、役に立ちませんでした。私は何かばかげたことを見逃しているに違いないことを知っています。何か案は?

また、奇妙に思われることの 1 つは、フォームが次のタグでレンダリングされることです。

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

フォームIDに「-1」を追加するのは正常ですか?

4

2 に答える 2

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 という関数を探していました。それが愚かなことだと知っていた。

于 2011-03-12T04:46:33.233 に答える
-2

フォーム ID の「-1」が問題の原因であると考える傾向があります。ただし、「-1」だけでなく、フォーム ID が「_」ではなく「-」でレンダリングされる理由は、コードの残りの部分で参照されているようです。それを解決すれば、問題は解決するはずです。

残念ながら、私はまだ Drupal を使ったことがありません (Joomla だけです)。現在持っているものではなく、フォーム ID が (fantasy-stock-buy-me-form-1) としてレンダリングされているものと一致するようにコードを変更してみます。

于 2011-03-12T04:08:07.837 に答える