【问题标题】:Why isn't my drupal form submit function being called?为什么我的 drupal 表单提交函数没有被调用?
【发布时间】:2011-03-12 03:44:59
【问题描述】:

呃,这可能很简单,但它让我发疯。我有一个简单的表单(只是一个提交按钮),我使用 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 是否正常?

【问题讨论】:

    标签: php drupal drupal-6 form-api drupal-node-hook


    【解决方案1】:

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

    $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 的函数。知道这很愚蠢。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我无法更改函数名,破折号是函数名中的非法字符。我猜drupal在呈现表单时会将下划线转换为破折号,然后将它们转换回调用函数?但是,是的,“-1”很奇怪……我会进一步研究为什么会出现这种情况。
      • -1 是为了确保 ID 是唯一的,以防同一个表单在一个页面上多次呈现。
      • 答案很有趣 -1
      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多