当我单击我的一个论坛节点的“编辑”选项卡时,我会看到一个显示如下的表单:
当我选择“论坛”-下拉菜单中的任何选项(并因此选择论坛容器)并单击“提交”时,论坛节点将移动到所选论坛容器。
现在,我需要做的是从我的代码中的某处以编程方式触发所有这些。我必须将很多论坛节点移动到很多不同的论坛容器中,这就是我需要这样做的原因。
我在想如何做到这一点是这样的:
- 加载“forum_node_form”的表单数据,以便包含特定论坛节点的数据(我想移动到另一个论坛容器的论坛节点)。
- 将参数 $form_state['values']['forum_tid'] 更改为我要将论坛节点移动到的论坛容器的 tid。
- 使用 drupal_form_submit() 保存表单数据。
然而,事实证明这比我预期的要难。有人可以为我指出正确的方法吗?
到目前为止,我已经在手动测试期间使用 var_export($form_state['values'], true) 记录了 $form_state['values'] 的内容。然后我将 $form_state['values']['forum_tid'] 更改为我想将论坛移动到的论坛容器的 tid,然后使用 drupal_form_submit('forum_node_form', $form_state);
这导致了错误消息:
警告:call_user_func_array() 期望参数 1 是一个有效的回调,函数 'node_form' 未找到或 drupal_retrieve_form() 中的函数名称无效(/“PATH”/includes/form.inc 的第 795 行)。
我找到了一些使用 form_load_include() 的建议,因此添加了这一行:
form_load_include($form_state, 'inc', 'node', 'node.pages');
...这会导致一些新的错误:
- 警告:node_form() 中的 node_form() 缺少参数 3(/“PATH”/modules/node/node.pages.inc 的第 83 行)。
- EntityMalformedException:类型节点的实体上缺少捆绑属性。在 entity_extract_ids() 中(/“PATH”/includes/common.inc 的第 7539 行)。
node_form() 的参数 3 是节点对象 $node ,我不知道如何解决这个问题,我实际上觉得这不是解决整个问题的正确方法。
任何帮助是极大的赞赏。