0

问题很简单:如何在服务器和文件表中保存文件,以便在使用实体包装器取消设置/更改值后其 fid 仍然有效?

$ewrapper = entity_metadata_wrapper('node', $sourceNode);
unset($sourceNode->field_image[$sourceNode->language][0]);
$ewrapper->save();

现在,只要调用上述内容,相关文件就会被删除。如果我使用同样的事情:

$ewrapper->field_image->set($newImage);

在这种情况下,我需要保留旧图像。

谢谢你们的帮助!

4

1 回答 1

1

我认为您应该将文件状态从 更改FILE_STATUS_TEMPORARYFILE_STATUS_PERMANENT. 在这里查看这个答案:

https://api.drupal.org/comment/23493#comment-23493

基本上,没有file_set_status()像 Drupal 6 那样的函数,但现在这段代码应该做同样的工作:

  // First obtain a file object, for example by file_load...
  $file = file_load(10); 

  // Or as another example, the result of a file_save_upload...
  $file = file_save_upload('upload', array(), 'public://', FILE_EXISTS_REPLACE);

  // Now you can set the status
  $file->status = FILE_STATUS_PERMANENT;

  // And save the status.
  file_save($file);

因此,您以一种或另一种方式加载文件对象,更改它的status属性并再次保存对象。

于 2016-08-31T13:33:21.790 回答