Как создать узел из задания cron в drupal?
в пользовательском модуле для drupal 4.7 я взломал объект node и передал его node_save ($node) для создания узлов. Этот хак, похоже, больше не работает в drupal 6. Хотя я уверен, что этот хак может быть исправлен, мне интересно, есть ли стандартное решение для создания узлов без формы. В этом случае данные извлекаются из пользовательского канала на другом веб-сайте.
5 ответов
Я не знаю стандартного API для создания узла прагматично. Но это то, что я почерпнул из создания модуля, который делает то, что вы пытаетесь сделать.
- убедитесь, что установлены важные поля: uid, name, type, language, title, body, filter (см.
node_add()
иnode_form()
) - передайте узел через
node_object_prepare()
таким образом, другие модули могут добавлять к объекту $node.
лучший способ сделать это - использовать 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);
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' легко пропустить-если вы не установите их, узел останется неопубликованным и неопубликованным, и вы увидите, только если вы перейдете на экран администрирования контента.
еще один ответ, который я обнаружил, чтобы использовать пример от блокупай модуль в ядро Drupal. Тот факт, что он находится в ядре, дает мне немного больше уверенности в том, что он будет продолжать работать в будущих версиях.
есть несколько хороших ответов выше, но в конкретном примере превращения проглоченного элемента подачи в узел вы также можете использовать модуль simplefeed (http://wwww.drupal.org/project/simplefeed). Этот модуль использует simplepie engine для поглощения каналов и превращает отдельные элементы из каждого канала в узлы. Я понимаю, что это не специально решает проблему создания узлов из cron, но это может быть более простым решением вашей проблемы в общем и целом.