我正在尝试隐藏未发布节点上的文件。我将来使用调度程序发布节点,并且链接到该节点的文件尚不能公开访问。我将它们移至私人文件夹。
但是当 cron 运行时,我必须将文件移回原来的位置。这里的问题是文件转到原始文件夹,但在文件名和 uri 之后得到一个 _0。
/**
* Implements hook_entity_presave().
*/
function custom_configuration_entity_presave(EntityInterface $entity) {
// Automatic fill in title field based on first and lastname.
if($entity->getEntityTypeId() === 'node' && $entity->hasField('field_files')) {
if($entity->isPublished()) {
_custom_configuration_move_files($entity, 'public://', TRUE);
}
elseif (!$entity->isPublished()) {
_custom_configuration_move_files($entity, 'private://', FALSE);
}
}
}
和我的帮助功能来移动文件
/**
* Helper function to move a file
* @param $entity
* the entity object
* @param $target_stream_directory
* the stream directory
* @param $published
* True or false if the entity is being published
*
*/
function _custom_configuration_move_files($entity, $target_stream_directory, $published) {
// Get the files.
$files_values = $entity->field_files->getValue();
if(!empty($files_values)) {
// Set the target directory. Either private or public/name_of_folder.
$target_directory = $target_stream_directory;
if($published) {
// Add the field file directory to the target directory.
$entity_definitions = $entity->getFieldDefinitions();
$files_folder = $entity_definitions['field_files']->getSettings();
$target_directory = $target_stream_directory . $files_folder['file_directory'];
}
// Loop over all files and move them.
foreach($files_values as $file_value) {
$file = \Drupal\file\Entity\File::load($file_value['target_id']);
$file = file_move($file, $target_directory, 'FILE_EXISTS_REPLACE');
}
}
}
但是 cron 上的调度程序会保存带有 _0 的文件。我还尝试通过更改文件名来重新保存文件,但这给出了“未找到”,因为系统上的文件带有 _0。所以下面也不起作用
// Loop over all files and move them.
foreach($files_values as $file_value) {
$file = \Drupal\file\Entity\File::load($file_value['target_id']);
$file_name = $file->getFilename();
$full_uri = $target_directory . '/' . $file_name;
$file = file_move($file, $full_uri, 'FILE_EXISTS_REPLACE');
$file->setFilename($file_name);
$file->setFileUri($full_uri);
$file->save();
}
有人可以指出我正确的方向吗?谢谢你。