Как мне создать узел из задания cron в drupal? - PullRequest
7 голосов
/ 18 сентября 2008

В пользовательском модуле для drupal 4.7 я взломал объект узла и передал его в node_save ($ node) для создания узлов. Этот хак, похоже, больше не работает в Drupal 6. Хотя я уверен, что этот хак можно исправить, мне любопытно, есть ли стандартное решение для создания узлов без формы. В этом случае данные извлекаются из пользовательского канала на другом веб-сайте.

Ответы [ 5 ]

12 голосов
/ 18 сентября 2008

Лучший способ добиться этого - использовать drupal_execute. drupal_execute будет запускать стандартную проверку и базовые операции с узлами, так что все будет вести себя так, как ожидает система. drupal_execute имеет свои причуды и немного менее интуитивен, чем просто node_save, но в Drupal 6 вы можете использовать drupal_execute следующим образом.


$form_id = 'xxxx_node_form'; // where xxxx is the node type
$form_state = array();
$form_state['values']['type'] = 'xxxx'; // same as above
$form_state['values']['title'] = 'My Node Title';
// ... repeat for all fields that you need to save
// this is required to get node form submits to work correctly
$form_state['submit_handlers'] = array('node_form_submit');

$node = new stdClass();
// I don't believe anything is required here, though 
// fields did seem to be required in D5

drupal_execute($form_id, $form_state, $node);

9 голосов
/ 18 января 2009

node_save () все еще отлично работает в Drupal 6; вам понадобится пара конкретных фрагментов данных, чтобы они работали.

$node = new stdClass();
$node->type = 'story';
$node->title = 'This is a title';
$node->body = 'This is the body.';
$node->teaser = 'This is the teaser.';
$node->uid = 1;
$node->status = 1;
$node->promote = 1;

node_save($node);

«Status» и «Promote» легко пропустить - если вы не установите их, узел останется неопубликованным и не продвинутым, и вы увидите только переход на экран администрирования контента.

6 голосов
/ 18 сентября 2008

Я не знаю стандартного API для прагматического создания узла. Но это то, что я почерпнул из сборки модуля, который делает то, что вы пытаетесь сделать.

  1. Убедитесь, что установлены важные поля: uid, name, type, language, title, body, filter (см. node_add() и node_form())
  2. Пропустите узел через node_object_prepare(), чтобы другие модули могли добавить его к объекту $ node.
0 голосов
/ 18 сентября 2008

Есть несколько хороших ответов выше, но в конкретном примере превращения загруженного элемента фида в узел, вы также можете воспользоваться подходом использования модуля simplefeed (http://wwww.drupal.org/project/simplefeed). Этот модуль использует механизм simplepie для глотать фиды и превращать отдельные элементы из каждого фида в узлы. Я понимаю, что это конкретно не решает проблему создания узлов из cron, но в целом это может быть более простым решением вашей проблемы.

0 голосов
/ 18 сентября 2008

Ещё одним ответом, который я обнаружил, было использование примера из модуля blogapi в ядре drupal. Тот факт, что это ядро, дает мне больше уверенности в том, что он продолжит работать в будущих версиях.

...