Php Drupal自定义节点表单

Php Drupal自定义节点表单,php,drupal,drupal-fapi,Php,Drupal,Drupal Fapi,我想为注册用户创建一个输入表单,与管理员的内容创建表单分开。每次提交将创建多个节点。 为了说明这个案例,我将使用内容类型项目,以及评论。 项目:标题、描述、所有者、评级 审查:标题、审查人、项目、难度 我使用CCK模块设置了内容类型及其字段。我想创建一个为注册成员(非管理员)显示的输入表单。其字段包括项目名称、描述、所有者、评级、审核、难度 提交表单时,项目名称、描述、所有者和评级值进入新的项目节点,其余进入新的审查节点 我想做的另一个定制是使用评级和难度输入字段 实现这一目标的最佳方式是什么?

我想为注册用户创建一个输入表单,与管理员的内容创建表单分开。每次提交将创建多个节点。 为了说明这个案例,我将使用内容类型项目,以及评论。

项目:标题、描述、所有者、评级

审查:标题、审查人、项目、难度

我使用CCK模块设置了内容类型及其字段。我想创建一个为注册成员(非管理员)显示的输入表单。其字段包括项目名称、描述、所有者、评级、审核、难度

提交表单时,项目名称、描述、所有者和评级值进入新的项目节点,其余进入新的审查节点

我想做的另一个定制是使用评级和难度输入字段

实现这一目标的最佳方式是什么?我应该创建自定义模块和自定义表单吗(有人能告诉我怎么做吗)?或者有我可以使用的模块吗


谢谢

对我来说,这听起来像是一份定制工作。您可以使用模块中的创建表单。看看几乎所有其他模块,看看FormAPI是如何工作的。然后,您需要从这些字段的所有值创建$node对象,并使用和实际创建不同的节点


我建议您查看Webform模块,以使用表单API并劫持提交过程,使其创建这两种节点类型。

有几种方法可以做到这一点:

  • 从头开始:这就是(+1)归结为的内容—自己构建表单,添加自己的验证和提交处理程序,然后在提交时构建两个节点对象并保存它们。你将拥有完全的控制/灵活性,但这是一项相当艰巨的工作,你需要对Drupal的内部工作有很好的理解,才能把它做好

  • 使用另一个内容类型所需的字段“重载”其中一个内容类型,并调整“重载”内容类型提交(和部分编辑/显示)逻辑,以从其他字段创建另一个内容类型,同时在显示和编辑时将其隐藏在“重载”内容类型上。你可以。这是一个相当简单的方法,但我认为它有点“哈基什”,因为内容类型定义与显示不匹配。

  • #2的一个不太“黑客”的变体是正常设置内容类型,只需通过操作编辑和提交过程。您的操作与方法#2大致相同,但不是预先用附加字段“重载”一个节点,而是直接将它们注入
    hook\u form\u alter
    上的编辑表单(从头开始,或者在后台加载另一个节点的编辑表单并从中复制相关字段定义)。在表单提交时,您将删除这些附加字段,同时使用它们构建其他节点。这需要比#2更多的工作和知识,但应该比#2更稳定,更易于调整/维护,因为您不必处理内容类型定义与显示不匹配的问题

  • 此外,您没有指定如何处理现有节点的编辑-我建议向其中一个节点添加节点引用以跟踪它们的关联。这样,您还可以添加逻辑,从一个表单编辑两个节点,并根据需要进行同步删除。

    选项3,使用youngish解决方案之一创建CCK nodereference字段,该字段可以指向不存在的节点,并在提交时创建

    看起来是这些项目中比较稳定的一个

    并且在确定新节点中的值时似乎有更多的附加值

    这在模块之间构建节点引用方面具有第二个优势,您可以使用它在渲染时集成节点、创建视图等。

    我非常喜欢#2,但可能会说创建第三种内容类型,它本质上是两者的合并。任何时候想要编辑这两个,只需编辑第三个,更改就会传播出去。这可能和#2一样简单,但不那么刻薄。