Рецепт для добавления записей узлов Drupal - PullRequest
4 голосов
/ 26 марта 2010

Я ищу рецепт для добавления записей узла 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? 

Я на правильном пути? Есть ли для этого вспомогательные функции?

Ответы [ 3 ]

5 голосов
/ 26 марта 2010

Если вы хотите программно создавать узлы, используйте 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 (), чтобы проверка выполнялась перед сохранением в базе данных. В любом случае это хорошо.

2 голосов
/ 26 марта 2010

Кевин - С вашей помощью я добился хорошего прогресса. Поля Node и CCK теперь заполняются.

Местоположение (long / lat) заполнено, но не отображается на экране просмотра. Флажки не заполняются.

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); 
1 голос
/ 27 марта 2010

OK. вот полный рецепт. 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); 
...