为什么$form_state[';value';]在drupal#u process_form()中被删除?
我试图使用drupal_execute()以编程方式存储CCK类型的节点。创建空节点;未保存任何CCK字段。显然,drupal_process_form()中的第一行负责:为什么$form_state[';value';]在drupal#u process_form()中被删除?,drupal,cck,Drupal,Cck,我试图使用drupal_execute()以编程方式存储CCK类型的节点。创建空节点;未保存任何CCK字段。显然,drupal_process_form()中的第一行负责: $form_state['values'] = array(); 所以我的问题是为什么“值”会被擦除,更重要的是,如何使用drupal_execute()保存CCK字段 我也尝试了save_node(),效果很好;但是我更喜欢前者,因为它调用验证。值数组在drupal\u process\u form()中被清除,因为它稍
$form_state['values'] = array();
所以我的问题是为什么“值”会被擦除,更重要的是,如何使用drupal_execute()保存CCK字段
我也尝试了save_node(),效果很好;但是我更喜欢前者,因为它调用验证。值数组在
drupal\u process\u form()
中被清除,因为它稍后将从$\u POST
全局中填充。如果您看一看,就会发现它的作用正好相反,即从传入的$form\u状态['values']
填充$\u POST
全局
我认为这样做是为了让表单处理以与“正常”表单提交相同的方式工作,因此drupal\u execute
主要设置阶段,使所有内容看起来或多或少与稍后的“正常”提交相同
这意味着你的方法基本上是正确的,应该是有效的——如果它不正确,那么肯定是有别的地方出了问题。我猜不出这可能是什么,但您可以查看一些关于您的方法的讨论,特别是CCK字段主题(这是一个混合线程,讨论
node\u save()
方法,但链接的部分可能适合您的具体情况)。感谢您的解释。我想我以前遇到过这个问题;这很有帮助。目前,我在一个类型中处理200多个字段(这只是一个原型,最终应该规范化),很难找到罪魁祸首。我注意到form_get_errors()只发送关于标准字段(如title)的消息;也许有不同的方法来提取验证错误吗?@Stan:我知道没有不同的方法。您确定这不仅仅是一个时间(权重)问题,即对form\u get\u errors()
的调用发生在调用CCKs验证函数之前吗?那么form\u get\u errors()
就在drupal\u execute()之后调用。我将暂时使用node\u save()
,或者直到字段数量变得更易于管理为止。感谢您的解释。我对同样的事情感到困惑。希望有一个解释这句话的评论!