【问题标题】:Drupal Custom Node FormDrupal 自定义节点表单
【发布时间】:2009-11-05 20:47:47
【问题描述】:

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

项目标题描述所有者评级。 p>

评论标题评论者项目难度

我已经使用 CCK 模块设置了内容类型及其字段。我想创建一个为注册成员(非管理员)显示的输入表单。其字段包括Project NameDescriptionOwnerRatingReview、难度。

提交表单时,项目名称描述所有者评级值进入新的Project 节点,其余的进入新的 Review 节点。

我想做的另一个自定义是 RatingDifficulty 输入字段使用star rating input

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

谢谢

【问题讨论】:

    标签: php drupal drupal-fapi


    【解决方案1】:

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

    1. 从头开始做所有事情:这就是theunravelers suggestion (+1) 归结为 - 自己构建表单,添加自己的验证和提交处理程序,然后在提交时构建两个节点对象并保存它们。您将拥有完全的控制/灵活性,但这是一项相当多的工作,您需要对 Drupal 的内部工作有很好的了解才能正确完成。

    2. “重载”您的一种内容类型和另一个需要的字段,并调整“重载”内容类型提交(和部分编辑/显示)逻辑以从其他字段创建其他内容类型,同时将它们隐藏在显示和编辑的“重载”中。你可以find an article describing this approach here。这是一种比 #1 容易得多的方法,但我认为它有点“hackish”,因为内容类型定义与显示不匹配。

    3. #2 的一个不那么“骇人听闻”的变体是正常设置您的内容类型,并通过 hook_form_alter() 操作编辑和提交过程。您会做或多或少与方法 #2 相同的操作,但不是预先“重载”一个带有附加字段的节点,而是直接在 hook_form_alter 上将它们注入到编辑表单中(从头开始或通过在后台加载另一个节点的编辑表单并从中复制相关的字段定义)。在提交表单时,您可以在使用它们构建其他节点时删除这些附加字段。这需要比 #2 更多的工作和知识,但应该比这更稳定,更容易调整/维护,因为您不必处理内容类型定义与显示不匹配。

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

    【讨论】:

    • 我非常喜欢#2,但可能会说创建第三种内容类型,本质上是两者的合并。任何时候你想编辑这两个,你只需编辑第三个,更改就会传播出去。这可能和 #2 一样简单,但不那么骇人听闻。
    【解决方案2】:

    对我来说,这听起来像是一项定制工作。您可以在模块中使用Form API 来制作表单。查看几乎任何其他模块,以了解有关 Form API 工作原理的示例。然后,您需要根据这些字段的所有值创建一个 $node 对象,并使用node_submit()node_save() 实际创建不同的节点。

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

    【讨论】:

      【解决方案3】:

      选项 #3,使用其中一种年轻的解决方案来创建一个 CCK 节点引用字段,该字段可以指向一个不存在的节点,并在提交时创建它。

      Node Reference Create 看起来是这些项目中较为稳定的项目之一。

      Node Reference Auto-createNode Reference Field 似乎对确定新节点中的值有更多的附加值。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        相关资源
        最近更新 更多