Drupal:致命错误:无法重新声明> node_form_submit()(之前>声明在

时间:2010-06-24 12:06:32

标签: drupal drupal-6

我想在提交后重定向我的表单,我正在尝试使用一个钩子,但这就是我得到的:

function node_form_submit(&$form, $form_state) {  
    $form_state['redirect'] = 'contentManager/';
}
  

致命错误:无法重新声明   node_form_submit()(之前   声明   drupal的/模块/节点/ node.pages.inc:451)   在   Drupal的/网站/所有/主题/ blueMarine中/的template.php   在第31行

我正在使用模块名称“node”作为我的钩子。我想这是错的,但我不明白为什么

更新: 好的,我没有开发新模块。我已经在我的Bluemarine模板中将该函数添加到了template.php。

function bluemarine_form_alter(&$form, $form_state) {
    $form_state['redirect'] = 'contentManager/';
}

Bluemarine是我的主题的名称..“contentManager”是我在后端创建的一个页面,其中包含一个包含所有节点的视图。

此功能完全被忽略。

UPDATE2 好的,现在,这是我当前的template.php文件(我确定调用了phptemplate_node_form)

function phptemplate_node_form($form) {
  $form['#submit'][] = 'myFormSubmit';
}

function myFormSubmit() {
    echo "hello";
    die();
}

未调用myFormSubmit函数。

感谢

3 个答案:

答案 0 :(得分:2)

PHP不允许重复的函数名称。 node_form_submit实际上不是一个钩子,而是表单提交处理程序,在节点模块中实现。这就是你收到错误的原因。

所有挂钩应始终以您的模块/主题名称开头。这样做是为了避免您遇到重复的函数名称的确切问题。

如果要向表单添加表单提交处理程序,则需要在表单上使用hook_form_alter并将提交处理程序添加到$form['submit']

<强>模块:
开发模块时,需要使用module_name.module文件。这是代码的核心应该与每个钩子实现一起去的地方。

<强>主题:
在开发主题时,您应该将template.php文件用于所有预处理函数,主题覆盖,钩子实现等。

出了什么问题:
你说你们都有蓝色模块和主题。如果你真的同时拥有它们,你应该重命名它们。

使用hook_form_alter时,您应指定$form_id,因此不要覆盖所有表单。

如果您希望$form_state上的效果可以继续,则需要使用&表示法通过引用传递它。

更新2:
除非您使用Drupal 7,否则不能在主题的hook_form_alter文件中使用template.php。您必须创建一个自定义模块来实现任何钩子。

答案 1 :(得分:1)

“我正在使用模块名称”node“作为我的钩子。我想这是错误的,但我不明白为什么”

您不能这样做,因为node已经是一个模块,因此已经定义了node_ functions。

要使用钩子,您需要创建自己的模块,然后命名约定为mymodule_hookname()。

在具有自己的钩子的模块中,Drupal有一个名为module_invoke_all的函数,它在执行期间根据钩子名称调用所有模块中的特定钩子。

你不能将编程转储到template.php中,因为这不是它的目的。这一切都需要在一个模块中,并且可以使用hook_form_alter,更改表单提交以及使用mymodule_form_submit()函数轻松实现。

答案 2 :(得分:0)

你不能在主题中声明hook_form_alter。你必须在模块中做到这一点。请注意,声明mymodule_form_alter requires three arguments并且您应该在应用更改之前检查$ form_id =='form_name'(否则您将在drupal中更改每个表单)。

如果您不知道要更改的表单的form_id,可以将print_r($ form_id。'');在你的钩子中,它将打印页面中每个表单的form_id。然后,您可以使用form_id声明a more specific hook,并在那里添加更改。

最后,如果您想要做的是更改提交表单中的重定向,则需要在$ form ['#submit']中添加一个函数名称(添加,而不是替换,请参阅the forms api docs)和在该函数中,应该在node_form_submit之后运行,将$ form ['#redirect']更改为您想要的任何内容。