3

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

我想尽可能/实用地使用 CCK 的内置验证、提交、输入小部件和安全功能。

在 Drupal 6 中完成此任务的最佳方法是什么?任何地方都有“最佳实践”或文档吗?

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

1.

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

2.

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

3.

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

如果找到关于重用标准节点创建表单的文档,但没有提到同时创建多个节点。

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

非常感谢您的帮助!

4

3 回答 3

3

倡导者为此发布了一个很好的解决方案。

http://www.advomatic.com/blogs/jonathan-delaigle/multiple-nodes-single-node-submission

于 2009-10-16T16:58:02.183 回答
0

如果第二种类型只需要来自用户的一两个额外输入(字段),我会采用您的方法一。

但是鉴于您的澄清,似乎foobar足够不同和复杂,因此您的方法二似乎更合理。

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

我还没有这样做,所以我不确定这将如何与 cck 功能一起发挥作用,但我希望它能够很好地工作并试一试。

于 2009-08-17T23:48:08.987 回答
0

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

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

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

我希望这会有所帮助

于 2009-08-15T10:17:52.837 回答