在drupal 4.7的自定义模块中,我将一个节点对象一起攻击并将其传递给node_save($ node)以创建节点.这个hack似乎不再适用于drupal 6.虽然我确信这个hack可以修复但我很好奇是否有标准的解决方案来创建没有表单的节点.在这种情况下,数据会从另一个网站上的自定义Feed中提取.
实现这一目标的最佳实践方法是使用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);
"状态"和"促销"很容易被忽视 - 如果你没有设置它们,节点将保持未发布和未启动状态,你只会看到你是否进入内容管理屏幕.
我不知道用于实际创建节点的标准API.但这就是我从构建一个能够完成你正在做的事情的模块中收集的内容.
确保设置了重要字段:uid,名称,类型,语言,标题,正文,过滤器(请参阅node_add()
和node_form()
)
传递节点,node_object_prepare()
以便其他模块可以添加到$ node对象.