2011-03-12 121 views
2

呃,这可能很简单,但是这让我发疯。我有一个简单的表单(只是一个提交按钮),我使用hook_nodeapi()插入节点。它被正确插入,并且当我提交时刷新页面,但它永远不会触及form_submit()函数。代码如下:为什么我的drupal表单提交函数没有被调用?

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?

回答

-1

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

不幸的是,我还没有使用Drupal(只是Joomla)。我会尝试更改代码以匹配表单标识正在呈现为(幻想股票买我表-1),而不是你现在拥有的。

+1

我无法更改函数名称,破折号是函数名称中的非法字符。我猜drupal在渲染窗体时将下划线转换为破折号,然后将它们转换回来调用函数?但是,是的,这个“-1”很奇怪......我会更加关注为什么会出现。 – SenorPuerco 2011-03-12 04:31:39

+0

-1可以确保ID在页面上多次呈现相同表单的情况下是唯一的。 – 2012-04-26 22:08:48

+3

有趣的答案得到-1 – B2F 2013-09-05 15:03:54

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

相关问题