在Drupal中使用单个自定义表单创建多个CCK节点

时间:2009-07-30 18:30:54

标签: drupal cck drupal-fapi drupal-forms

我需要一个允许同时创建多个相关节点的表单。所有节点都涉及CCK字段。

我想尽可能多地使用CCK的内置验证,提交,输入窗口小部件和安全功能。

在Drupal 6中实现这一目标的最佳方法是什么?是否有“最佳实践”或文档?

以下是我可以看到的3种可能性。我很乐意反馈这些是否有效,或者是否有更好的选择。

1。

  • 从内容类型为foo的标准节点创建表单开始。
  • 通过添加内容类型栏的字段来修改表单,使用hook form_alter [可以直接插入内容类型栏的cck小部件吗?]
  • 使用自定义提交处理程序在提交表单时创建bar类型的节点  [可以调用标准的cck处理程序吗?或者我是否需要“手动”构造节点对象,进行自己的验证,并使用node_save?]

2

  • 创建一个新的自定义表单,用于连接相关内容类型的“普通”节点创建表单。
  • 然后使用hook form_alter根据需要修改表单。
  • 允许标准cck提交处理程序来完成创建节点的工作。

3

  • 从头开始创建自定义表单
  • 使用节点准备,节点保存等在我自己的提交处理程序中创建节点

如果找到documentation on re-using the standard node creation form,但未提及同时创建多个节点。

使用hook nodeapi和hook form_alter记录在advomatic网站的帖子中,但特定方法descrube似乎要求使用'dummy'字段污染其中一个内容类型。

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

为什么不使用hook_nodeapi来处理某些内容类型的节点创建。

只需设置测试条件以查看$ node-> type ='foo',然后运行一个函数,使用预定义字段中的值创建两个节点或多个节点。您甚至可以将hook_nodeapi设置为仅在$ op几乎准备好将节点插入数据库时​​运行,从而确保对象在传递到需要创建的新节点之前已经通过适当的验证运行。

http://api.drupal.org/api/function/hook_nodeapi/6此页面列出了$ op变量的所有可用操作以及它们的作用。

我希望有帮助

答案 2 :(得分:0)

如果第二种类型 bar 只需要用户提供一两个额外的输入(字段),我会按照您的方法进行操作。

但鉴于你的澄清,似乎 foo bar 是完全不同和复杂的,所以你的方法二看起来更合理。

将两个表单连接成一个并隐藏要从 foo 字段(或节点创建后)填充的 bar 字段。在表格验证和提交功能中,您必须再次分离表单,以便您可以单独调用标准验证/提交处理程序。

我还没有这样做,所以我不确定这会对cck功能有多好,但是我希望它能够很好地尝试一下。