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

在Drupal中使用单个自定义表单创建多个CCK节点,drupal,cck,drupal-fapi,drupal-forms,Drupal,Cck,Drupal Fapi,Drupal Forms,我需要一个允许同时创建多个相关节点的表单。所有节点都涉及CCK字段 我希望尽可能多地使用CCK的内置验证、提交、输入小部件和安全功能 在Drupal6中实现这一点的最佳方法是什么?是否有“最佳实践”或文档 以下是我能看到的三种可能性。我希望得到反馈,看看这些方法是否有效,或者是否有更好的选择 1. 从内容类型foo的标准节点创建表单开始 通过使用hook form\u alter为内容类型栏添加字段来修改表单[可以直接插入内容类型栏的cck小部件吗?] 提交表单时,使用自定义提交处理程序创建b

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

我希望尽可能多地使用CCK的内置验证、提交、输入小部件和安全功能

在Drupal6中实现这一点的最佳方法是什么?是否有“最佳实践”或文档

以下是我能看到的三种可能性。我希望得到反馈,看看这些方法是否有效,或者是否有更好的选择

1.
  • 从内容类型foo的标准节点创建表单开始
  • 通过使用hook form\u alter为内容类型栏添加字段来修改表单[可以直接插入内容类型栏的cck小部件吗?]
  • 提交表单时,使用自定义提交处理程序创建bar类型的节点 [是否可以调用标准cck处理程序?或者我是否需要“手动”构造节点对象,执行我自己的验证,并使用node_save?]
2.
  • 创建一个新的自定义表单,该表单连接相关内容类型的“普通”节点创建表单
  • 然后使用hook form_alter根据需要修改表单
  • 允许标准cck提交处理程序执行创建节点的工作
3.
  • 从头开始创建自定义表单
  • 使用node prepare、node save等在我自己的提交处理程序中创建节点
如果找到,但不会提及同时创建多个节点

advomatic网站上的一篇帖子中记录了使用hook nodeapi和hook form_alter,但特定的方法descrube似乎需要使用“虚拟”字段污染其中一种内容类型


非常感谢你的帮助

为什么不使用hook_nodeapi来处理特定内容类型的节点创建呢

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

此页面列出了$op变量的所有可用操作及其作用

我希望这会有所帮助

如果第二个类型栏只需要用户提供一个或两个额外的输入(字段),我会使用您的方法一

但考虑到您的澄清,foo和bar似乎有足够的不同和复杂,所以您的两种方法似乎更合理

将两个表单合并为一个表单,并隐藏要从foo字段(或节点,在创建后)填充的bar字段。在forms validate和submit函数中,您必须再次分离表单,以便可以分别调用这两个函数的标准验证/提交处理程序


我还没有这样做,所以我不确定这将如何发挥cck的功能,但我希望它能合理地工作,让它尝试一下。

advomatic的家伙发布了一个很好的解决方案


最好告诉我们您希望额外节点的状态。您想复制同一个节点,还是用户应同时为多个节点输入值。感谢您的响应!用户将为2个不同的节点(每个节点具有不同的内容类型)输入值。节点“栏”将包括一个文件字段。节点“foo”将包含一个链接回节点“bar”的nodereference字段。这两个字段都将包含一些文本字段。节点“栏”还将包括分类模块中的位置字段和词汇表。