我正在尝试使用drupal_execute()以编程方式存储CCK类型节点。空节点被创建;没有保存CCK字段。显然,drupal_process_form()中的第一行负责:
$form_state['values'] = array();
所以我的问题是为什么'值'被删除,更重要的是,如何使用drupal_execute()保存CCK字段?
我也尝试过save_node(),效果很好;但是我更喜欢前者,因为它会调用验证。
答案 0 :(得分:3)
值数组在drupal_process_form()
中被清除,因为它稍后会从$_POST
全局填充。如果您查看drupal_execute()
,您会看到它正好相反,即填充$_POST
传入的$form_state['values']
全局。
我认为这样做是为了让表单处理的工作方式与“普通”表单提交的方式相同,因此drupal_execute
主要设置阶段,以便所有内容看起来或多或少与以后提交“正常”提交。
这意味着您的方法基本上是正确的并且应该有效 - 如果没有,则必然会出现其他问题。我猜不出这可能是什么,但您可以查看this thread关于您的方法的一些讨论,以及具体的CCK字段主题(它是一个讨论node_save()
方法的混合线程,但是链接部分可能适合您的具体情况。)