2010-03-26 37 views
4

我在尋找添加Drupal節點記錄的配方。 我已經確定了三張表。用於添加Drupal節點記錄的配方

node_revisions 
nid=249 - vid + 1? 
vid=248 - auto-increment 

node: 
nid=250 - vid + 1? 
vid=249 - auto-increment 

content_type_my_content 
vid=248 - from node_revisions table? 
nid=249 - from node table? 

我在正確的軌道上嗎? 有沒有一些輔助函數呢?

回答

5

如果您正在尋找以編程方式創建節點,請使用Drupal API。

首先創建一個$ node對象。填寫標題,類型,狀態,正文,以及任何CCK字段。最後,調用node_save($ node);.

node_save將保存您的節點對象並執行必要的數據庫工作。

檢查了這一點:

http://api.drupal.org/api/function/node_save/6

http://mediumexposure.com/how-build-node-drupal-programmatically/

最簡單的方法,看看有什麼每種類型的內容類型的具有作爲字段是創建一個節點(例如,頁),然後使用var_dump()查看節點的內容。這將向您顯示您需要在節點對象創建腳本中使用的每個字段。

有些人會說你應該創建一個表單數組,並在其上調用drupal_execute(),以便在將數據保存到數據庫之前進行驗證。無論哪種方式都很好。

+0

你做了我的一天! – bert 2010-03-26 18:26:13

2

凱文 - 在你的幫助下,我取得了很好的進展。 現在正在填充節點和CCK字段。

位置(長/緯)已填充,但未顯示在查看屏幕上。 複選框未被填充。

global $user; 
$newnode = new stdClass(); 
$newnode->title = 'New node title'; 
$newnode->body = "this is a new node, created by import function"; 
$newnode->uid = $user->uid; 
$newnode->type = 'items'; 
$newnode->status = 1; 
$newnode->promote = 0; 

// CCK fields 
$newnode->field_myfield1[0]['value'] = 'test 1'; 
$newnode->field_myfield2[0]['value'] = 'test 2'; 
$newnode->field_mycheckbox[0]['value'] = 1; 

// longitude, lalitude 
// $newnode->locations[0]['lid'] = ?; 
$newnode->locations[0]['street'] = 'xx'; 
$newnode->locations[0]['city'] = 'xx'; 
$newnode->locations[0]['province'] = 'xx'; 
$newnode->locations[0]['postal_code'] = 'xx'; 
$newnode->locations[0]['latitude'] = 0; 
$newnode->locations[0]['longitude'] = 0; 


$newnode = node_submit($newnode); 
node_save($newnode); 
content_insert($newnode); 
+0

嗯。如果您手動填入其中一個節點並將其轉儲,該怎麼辦?那些田地? – Kevin 2010-03-27 00:19:20

1

好的。這裏是完整的食譜。 Drupal自動完成剩下的工作。

global $user; 
// Node fields 
$newnode = new stdClass(); 
$newnode->title = $data[0]; 
$newnode->body = $data[1]; 
$newnode->uid = $user->uid; 
$newnode->type = 'mytype'; 
$newnode->status = 1; 
$newnode->promote = 0; 

// CCK fields 
$newnode->field_myfield1[0]['value'] = $something; 
$newnode->field_myfield2[0]['value'] = $something; 
$newnode->field_my_checkbox[0]['value'] = $something; 

// longitude, latitude 
$newnode->field_loc_latitude[0]['street'] = $something; 
$newnode->field_loc_latitude[0]['city'] = $something; 
$newnode->field_loc_latitude[0]['province'] = $something; 
$newnode->field_loc_latitude[0]['postal_code'] = $something; 
$newnode->field_loc_latitude[0]['latitude'] = ''; 
$newnode->field_loc_latitude[0]['longitude'] = ''; 

$newnode = node_submit($newnode); 
node_save($newnode); 
content_insert($newnode);