如何将自定义表单插入Drupal节点视图并在提交时处理节点的数据?

Tim*_*Tim 2 drupal-6 drupal-fapi drupal-modules

我们将销售订单从会计系统导入Drupal 6站点.

我们设置了一个名为orders的内容类型.

我想为我们的运输提供商建立一个运输模块(目前还没有).

我理解如何构建"块"模块和"内容"模块.

构建模块的最佳方法是什么,该模块将出现在我们的订单节点的底部,这些模块提供了他们需要完成的表单(反过来会处理运送)

如果可能的话,我想在不创建不同内容类型的情况下这样做

Ale*_*der 6

如果要将自定义表单附加到每个节点,首先需要(在您的模块中):

  • 编写将构建表单的函数(请参阅:生成表单).如果此函数将根据当前正在查看的节点显示与节点相关的数据,那么您可能希望将nid或整数$node作为参数传递.

然后你必须决定如何将表单插入节点页面(或者正在查看节点),并且有几种方法可以解决它,包括:

  1. 实现hook_nodeapi()并在"视图"操作(即$op == 'view')中,您可以获取表单并将其添加到$node->content.
  2. 将表单添加为模板变量(请参阅:template_preprocess_node(),您可以执行a MYMODULE_preprocess_node(&$vars)),这样您就可以将它放在自定义node.tpl.php中的任何位置.

我想有更多的方法可以解决它(让你的模块生成一个带有表单的块,等等),这取决于你特别需要的.

无论您选择哪种方式,您获得自定义表单标记的方式如下:

<?php
// something like this for hook_nodeapi() way.
$node->content['body']['value']] .= drupal_get_form('my_custom_form_generating_function', $node);
// or something like this for the hook_preprocess_node() way.
$vars['my_custom_form'] = drupal_get_form('my_custom_form_generating_function', $vars['node']);
Run Code Online (Sandbox Code Playgroud)

如果您的表单生成函数确实接受$ node作为参数,那么您需要使用PHP的func_get_args()$node在签名中显式声明参数:

<?php
function my_custom_form_generating_function($form_state, $node) { }
Run Code Online (Sandbox Code Playgroud)

并且要明确:

...构建一个出现在我们底层的模块......

Drupal模块不是"出现"的东西.模块是为Drupal站点提供附加功能的扩展.他们可以实现钩子,这些钩子可能会或可能不会最终生成将在您的网站上"显示"的标记.

关于"内容模块"和"块模块":尽管我已经看到术语" 节点模块"指的是提供新内容类型的模块,但任何模块都可以实现任何钩子,从而提供块,内容类型等.