изображение cck исчезает при создании node_save

#drupal-6 #imagefield

#drupal-6 #поле изображения

Вопрос:

Я сохраняю узел с изображениями, который заполняется сервисом. Я записываю изображение с помощью 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:

Андреас,

Была точно такая же проблема.

Использование 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() ) будет сделано то же самое.

Здесь сработало, и теперь мои узлы сохраняются с неповрежденными изображениями.