我試圖以編程方式使用drupal_execute()存儲CCK類型節點。空節點被創建;沒有任何CCK字段被保存。顯然,在drupal_process_form()的第一行負責:
$form_state['values'] = array();
所以我的問題是,爲什麼不「值」將被刪除,而且更重要的是,如何利用drupal_execute我省CCK字段()?
我也試過save_node(),它運行良好;但是我更喜歡前者,因爲它調用驗證。
我試圖以編程方式使用drupal_execute()存儲CCK類型節點。空節點被創建;沒有任何CCK字段被保存。顯然,在drupal_process_form()的第一行負責:
$form_state['values'] = array();
所以我的問題是,爲什麼不「值」將被刪除,而且更重要的是,如何利用drupal_execute我省CCK字段()?
我也試過save_node(),它運行良好;但是我更喜歡前者,因爲它調用驗證。
值數組在drupal_process_form()
中被清除,因爲它稍後將從$_POST
填充。如果你看看drupal_execute()
,你會發現它的做法恰恰相反,即從$form_state['values']
中傳入$_POST
。
我認爲這樣做是爲了允許表單處理以和「普通」表單提交相同的方式工作,所以drupal_execute
主要設置舞臺,以便一切看起來與「正常」相同'稍後提交。
這意味着你的方法基本上是正確的,應該工作 - 如果沒有,就必須有其他問題出現。我無法猜出這可能是什麼,但您可以檢查this thread以獲得關於您的方法的一些討論,以及CCK專題主題(這是一個討論node_save()
方法的混合主題,但鏈接的部分可能適合您的具體情況) 。
感謝您的解釋。我想我以前遇到過這個線索;這很有幫助。目前,我正在處理單個類型中的200多個字段(這只是一個原型,最終應該規範化),而找到罪魁禍首則相當困難。我注意到form_get_errors()只發布有關標題的消息,如標題;有沒有提供驗證錯誤的另一種方法? – Stan 2010-06-27 18:15:12
@Stan:我知道沒有不同的方式。你確定它不僅僅是一個時間(權重)問題,即你對'form_get_errors()'的調用發生在CCKs驗證函數被調用之前嗎? – 2010-06-28 09:39:49
''form_get_errors()'在'drupal_execute()'之後被調用。現在我將使用'node_save()'或者直到字段數變得更易於管理。 – Stan 2010-06-28 16:58:58