4

我正在寻找添加 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? 

我在正确的轨道上吗?是否有一些辅助功能?

4

3 回答 3

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/

查看每种内容类型作为字段具有什么的最简单方法是创建一个节点(例如 Page),然后使用 var_dump() 查看节点的内容。这将显示您需要在节点对象创建脚本中使用的每个字段。

有些人会说您应该创建一个表单数组,并在其上调用 drupal_execute() 以便在将其保存到数据库之前执行验证。无论哪种方式都很好。

于 2010-03-26T18:21:03.680 回答
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); 
于 2010-03-26T20:46:48.113 回答
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); 
于 2010-03-27T01:12:08.677 回答