drupal-6 - 如何将自定义表单插入 Drupal 节点 View 并在提交时处理节点数据?

标签 drupal-6 drupal-modules drupal-fapi

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

我们设置了一个名为订单的内容类型。

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

我了解如何构建“ block ”模块和“内容”模块。

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

如果可能的话,我想在不创建不同内容类型的情况下执行此操作

最佳答案

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

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

然后您必须决定如何将表单插入节点页面(或者无论如何查看节点),有几种方法可以实现,包括:

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

我想还有更多方法可以解决这个问题(让你的模块生成一个包含表单的 block 等),这取决于你具体需要什么。

无论您选择哪一种,获取自定义表单标记的方式都是:

<?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']);

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

<?php
function my_custom_form_generating_function($form_state, $node) { }

需要明确的是:

...to build a module that would appear at the bottom of our...

Drupal 模块不是“出现”的东西。模块是为您的 Drupal 站点提供附加功能的扩展。他们可以实现 Hook ,这可能会也可能不会生成“出现”在您网站上的标记。

关于“内容模块”和“ block 模块”:尽管我看到术语“节点模块”来指代提供新内容类型的模块,但任何模块都可以实现任何钩子(Hook),从而提供 block 、内容类型等。

关于drupal-6 - 如何将自定义表单插入 Drupal 节点 View 并在提交时处理节点数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660425/

相关文章:

jquery - drupal 6 - 最有效的 jquery 版本?

没有寻呼机且没有限制的搜索结果

arrays - array_flip() :Can only flip STRING and INTEGER values! 在 DrupalDefaultEntityController->load()

php - Drupal的模块钩子(Hook)调用从哪里开始?

mysql - drupal数据库查询问题

带有自定义 ID 的 Drupal 表单

php - 如何在 Drupal 中缓存 PHP 生成的 XML 文件?

Drupal - 从 View 中获取节点 ID 以自定义 block 中的链接

php - 如何在评论表上方添加免责声明?

php - 如何在数据表中包含 Drupal 表单元素