2011-07-05 19 views
4

我正在構建一個批量導入器模塊,它將從一個數據庫獲取數據並在drupal中創建節點。創建節點對象的代碼是這樣的:Drupal node_save失敗,但沒有發生錯誤

$node = new stdClass(); 
$node->type = 'jobs'; 
$node->uid = 1; 
$node->status = $row->J_Approved; 
$node->title = $row->J_Title; 
$node->comment = 0; 
$node->revision = 1; 
$node->promote = 0; 
$node->sticky = 0; 
$node->created = $row->J_DateTime_Mod; 
$node->field_description = $row->J_Body; 
$node->field_email = $row->J_MI_Email; 
$node->field_jobs_fax = $row->J_MI_Phone; 
$node->field_aia_firm = $row->J_AIA; 
$node->field_name = $row->J_Sub_Name; 
$node->field_phone = $row->J_Sub_Phone; 
$node->field_jobs_email = $row->J_Sub_Email; 
$node = node_submit($node); 
node_save($node); 

和上面的輸出這在我的調試窗口http://screencast.com/t/R5PhWZWraIR8 當我運行它,它不會創建節點,但你可以從截屏看,它將$ node-> validates設置爲1,所以即時假設它是有效的。我花了大約5個小時試圖調試這個,仍然無法弄清楚。任何幫助,將不勝感激......

+0

確定它似乎這樣做的,在該函數中包裹CCK字段修復它: 功能cck_val($ VAL = 0,$鍵= '值'){ 返回陣列(陣列($密鑰=> $ val)的); } – Magicmarkker

+0

不幸的是,Drupal在表單API中做了很多的節點驗證。 – Rimian

回答

0

的Drupal 6例如:

<?php 
$node = new stdClass(); //Create instance of class stdClass which will create node for you. 
$node->type = 'library'; //Name of the content type 
$node->field_book_no[0][value] = 22;//Book number CCK Field 
$node->field_book_name[0][value] = "Drupal"; //Book name CCK Field 
$node->field_book_author[0][value]='Sachin'; //Author name - CCK field 
$node->field_year[0][value]='2011'; //Publication year - CCK field 
$node->uid = 1; // user id, 1 is created by admin 
$node->status = 1;//1 is published, 0 is unpublished 
$node->promote = 0;//1 is promote to home page, 0 is not to promote on home page 
node_save($node); // Save this node 
?> 

node_load()不返回任何東西,所以它不檢查。

你可以檢查一下:

$new_node = node_load($node->nid, NULL, TRUE); 

在3D ARG將加載節點之前重置緩存。昂貴的,但這是我知道的唯一途徑。

然後,您必須檢查節點 - > [變量]對方,如果它們全部匹配,則返回TRUE。

我將http://www.learn-drupal.in/cck/how-to-create-a-drupal-node-programmatically.html與上面的node_save代碼示例相比較。

相關問題