【问题标题】:Create multiple CCK nodes with single custom form in Drupal在 Drupal 中使用单个自定义表单创建多个 CCK 节点
【发布时间】:2009-07-30 18:30:54
【问题描述】:

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

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

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

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

1.

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

2.

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

3.

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

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

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

非常感谢您的帮助!

【问题讨论】:

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

标签: drupal cck drupal-fapi drupal-forms


【解决方案1】:

【讨论】:

    【解决方案2】:

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

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

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

    希望对你有帮助

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多