0

当我单击我的一个论坛节点的“编辑”选项卡时,我会看到一个显示如下的表单:

论坛节点的编辑视图

当我选择“论坛”-下拉菜单中的任何选项(并因此选择论坛容器)并单击“提交”时,论坛节点将移动到所选论坛容器。

现在,我需要做的是从我的代码中的某处以编程方式触发所有这些。我必须将很多论坛节点移动到很多不同的论坛容器中,这就是我需要这样做的原因。

我在想如何做到这一点是这样的:

  1. 加载“forum_node_form”的表单数据,以便包含特定论坛节点的数据(我想移动到另一个论坛容器的论坛节点)。
  2. 将参数 $form_state['values']['forum_tid'] 更改为我要将论坛节点移动到的论坛容器的 tid。
  3. 使用 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 ,我不知道如何解决这个问题,我实际上觉得这不是解决整个问题的正确方法。

任何帮助是极大的赞赏。

4

1 回答 1

1

无需经历加载节点表单的痛苦,您只需加载节点对象(使用node_load),更改论坛 tid 值,然后保存节点(使用node_save)以更新它。

例子:

<?php

function mymodule_updatemynode($nid,$new_forum_tid){
    if ($node = node_load($nid)){
        // not exactly sure what the forum tid field is called
        // just an example
        $node->field_forum_tid['und'][0]['#value'] = $new_forum_tid;
        node_save($node);
    }
}
于 2012-10-23T17:19:03.370 回答