可以使用多步骤表单保存节点吗?

时间:2009-10-14 15:15:07

标签: drupal drupal-6

我正在构建一个基于Drupal的站点,该站点需要将节点ID传递给单独的Web服务。此Web服务处理将文件上载到单独的服务器(从一个Drupal开启)。

这会产生一个问题,即如果我创建一个新节点,则在提交表单之前不会生成节点ID - 这意味着我无法附加文件,直到我保存节点并将其打开以进行编辑。我想删除那一步。

是否可以创建一个两步节点创建过程,其中提交并保存节点的基础知识,然后表单重定向到我可以附加文件的第二步?

我还考虑了一个支持AJAX的节点提交表单 - 但这似乎为这种情况增加了更多的复杂性。

任何建议,例子都将不胜感激!

4 个答案:

答案 0 :(得分:4)

可以使用多步骤表单执行此操作。请参阅http://pingv.com/blog/ben-jeavons/2009/multi-step-forms-drupal-6-using-variable-functions以获取规范的方法(除了代码,还要检查注释)。

您也可以通过向表单添加第二个提交处理程序来完成此操作。第一个,默认的(node_form_submit)以标准的Drupal方式保存您的节点(包括附件)。第二个处理程序可以将文件上传到单独的服务器,上传错误检查,从Drupal DB中删除文件等。您可以通过将其添加到表单的#submit property将其添加到Drupal 6表单中。 ,可以在表单定义中,也可以通过hook_form_alter / hook_form_FORM_ID_alter

答案 1 :(得分:2)

根据您想要做什么,您可以在其“插入”操作中使用hook_nodeapi。它在成功创建节点后触发,因此节点对象将包含新分配的nid。

注意:API文档的措辞对于“插入”和“更新”操作有点模棱两可:

  

“insert”:创建节点   (插入数据库中)。

这听起来好像是在过程中间,而此时节点已经创建

答案 2 :(得分:1)

我想node_save函数可以帮助你。

答案 3 :(得分:0)

我遇到了同样的问题而且做错了。我自己加了钩子。

http://drupal.org/node/313389