Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal 7 如何以编程方式加载给定节点的表单,修改其值,然后提交它?_Drupal 7 - Fatal编程技术网

Drupal 7 如何以编程方式加载给定节点的表单,修改其值,然后提交它?

Drupal 7 如何以编程方式加载给定节点的表单,修改其值,然后提交它?,drupal-7,Drupal 7,当我单击某个论坛节点的“编辑”选项卡时,会显示如下表单: 当我在论坛下拉菜单中选择任何选项并选择论坛容器并单击提交时,论坛节点将移动到所选论坛容器 现在,我需要做的是从代码中的某个地方以编程方式触发所有这些。我必须将许多论坛节点移动到许多不同的论坛容器中,这就是为什么我需要这样做的原因 我当时想的是如何做到这一点: 加载论坛\节点\表单的表单数据,以便特定论坛节点的数据包含在我要移动到另一个论坛容器的论坛节点中。 将参数$form_state['values']['forum_tid']更改为我

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

当我在论坛下拉菜单中选择任何选项并选择论坛容器并单击提交时,论坛节点将移动到所选论坛容器

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

我当时想的是如何做到这一点:

加载论坛\节点\表单的表单数据,以便特定论坛节点的数据包含在我要移动到另一个论坛容器的论坛节点中。 将参数$form_state['values']['forum_tid']更改为我要将论坛节点移动到的论坛容器的tid。 使用drupal\u form\u submit保存表单数据。 然而,事实证明这比我想象的要难。有人能为我指出做这件事的正确方法吗

到目前为止,我已经在使用var_export$form_state['values']的手动测试期间记录了$form_state['values']的内容,true。然后我将$form_state['values']['forum_tid']更改为我要将论坛移动到的论坛容器的tid,然后使用drupal_form_submit'forum_node_form'、$form_state提交数据

这导致了错误消息:

警告:call_user_func_数组要求参数1为有效回调,在/PATH/includes/form.inc的drupal_retrieve_表单行795中未找到函数“node_form”或函数名无效

我发现了一些使用form_load_include的建议,因此添加了这一行:

表单加载包括$form\u state、'inc'、'node'、'node.pages'

…这会导致一些新的错误:

警告:在/PATH/modules/node/node.pages.inc的节点表单第83行中缺少节点表单的参数3。 EntityAlFormedException:类型为node的实体上缺少bundle属性。在/PATH/includes/common.inc的实体提取标识行7539中。 node_表单的参数3是node对象$node,我不知道如何解决这个问题,实际上我觉得这不是解决整个问题的正确方法


非常感谢您的帮助

不必经历加载节点表单的痛苦,您只需使用加载节点对象,更改论坛tid值,然后使用保存节点来更新它

例如:

<?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);
    }
}

那不行。当我在更新其论坛tid后访问该节点时,导航栏会显示Home›Forums›General discussions,这是一个好迹象,因为General discussion对应于我分配的论坛tid。但是当我浏览论坛时,这个论坛节点没有出现。一般性讨论列出了0个主题和0篇帖子。当我打开一般讨论论坛时,它是空的。单击论坛节点的“编辑”选项卡后,从下拉菜单中选择“一般讨论”论坛,然后单击“保存”,即可正确分配论坛节点。在进一步研究$node的内容和论坛分类数据的存储方式后,我发现数组$node->taxonomy\u forums负责与$node->forum\u tid一起正确集成到论坛结构中。谢谢你的帮助,米利斯。