制作node_save时cck图像消失

时间:2011-06-06 12:40:56

标签: drupal-6 imagefield

我保存一个节点,其中包含由服务填充的图像。我用drupal_write_record写了图像,图片已经出现在节点中了。但是当 - 在脚本结束时 - 我调用node_save时,图像会再次消失。

我的代码:

  $file_drupal_path= $filedata['location'];
  $file = new stdClass();
  $file->filename = $filedata['name'];
  $file->filepath = $file_drupal_path; 
  $file->filemime = $filedata['mime'];
  $file->filesize = filesize($file_drupal_path);
  $file->filesource = $filedata['name'];

  $file->uid = 1;
  $file->status = FILE_STATUS_PERMANENT;
  $file->timestamp = time();  
  $file->list = 1;

  // fid is populated by drupal_write_record
  drupal_write_record('files', $file);

  $imageData = field_file_load($file->fid, TRUE);
  return $imageData;

和node_save

function transport_service_save($node) {
    $node = (object) ($node);
    $node->promote = 1;
    node_save(node_submit($node));
    return print_r( $node , TRUE );
}

在节点的cck图像字段中,也有未设置值的键。

1 个答案:

答案 0 :(得分:1)

安德烈亚斯,

有完全相同的问题。

如此处所述使用drupal_execute()可立即解决问题:

// Save the node, updated or new
// Get the node object as an array the node_form can use
$values = (array)$node;

// Save the node (this is like pushing the submit button on the node edit form)
drupal_execute('abc_node_form', $values, $node);

来源: http://www.drupalisms.com/gregory-go/blog/use-drupalexecute-instead-of-nodesave-to-save-a-node-programmatically

但是一个公平的警告:它在前几轮中就像一个魅力,但现在我得到了大量的错误类型:

warning: call_user_func_array() [function.call-user-func-array]: 
First argument is expected to be a valid callback, 'node_form' was given in ...

无法看到改变了什么。我所做的就是调用保存几次的页面进行测试。

这个回复的最终(希望!)编辑。似乎需要包含node_module文件包含node_form,因此添加:

module_load_include('', 'node', 'node.pages.inc');

在你的代码中(比如在hook_init()中)就可以了。

在这里工作,现在我的节点保存完整的图像。