Как программно удалить прикрепленный к ноде файл

Главные вкладки

Аватар пользователя engenes engenes 3 июня 2018 в 20:28

что делал:
получил массив из изображений, прикрепленных к ноде

<?php
$images_arr 
$node->original->field_img_property['und'];
?>

перебрал массив

<?php
        
foreach($images_arr as $image_el){
            
$uri =  $image_el['uri'];
            
$file = (object)$image_el;//перевел из массива в объект
            
file_delete($file);//попробовал удалить, не удаляет

        

}
?>

пробовал и это

<?php
$fid 
db_query("SELECT fid FROM {file_managed} WHERE uri = :uri", array(':uri' => $uri))->fetchField();
if (
$fid) {
  
$file file_load($fid);
  
file_delete($file);
}
?>

но результат тот же (никакого)
так как $file в обоих случаях одинаков
//распечатал переменную $file;

<?php
stdClass Object
(
    [
fid] => 5419
    
[uid] => 1
    
[filename] => chrysanthemum.jpg
    
[uri] => public://chrysanthemum.jpg
    
[filemime] => image/jpeg
    
[filesize] => 879394
    
[status] => 1
    
[timestamp] => 1528046612
    
[type] => image
    
[field_tags] => Array
        (
        )

    [

field_file_image_alt_text] => Array
        (
        )

    [

field_file_image_title_text] => Array
        (
        )

    [

rdf_mapping] => Array
        (
        )

    [

metadata] => Array
        (
            [
height] => 768
            
[width] => 1024
        
)

    [

height] => 768
    
[width] => 1024
    
[alt] => 
    [
title] => 
)
stdClass Object
(
    [
fid] => 5420
    
[uid] => 1
    
[filename] => desert.jpg
    
[uri] => public://desert.jpg
    
[filemime] => image/jpeg
    
[filesize] => 845941
    
[status] => 1
    
[timestamp] => 1528046612
    
[type] => image
    
[field_tags] => Array
        (
        )

    [

field_file_image_alt_text] => Array
        (
        )

    [

field_file_image_title_text] => Array
        (
        )

    [

rdf_mapping] => Array
        (
        )

    [

metadata] => Array
        (
            [
height] => 768
            
[width] => 1024
        
)

    [

height] => 768
    
[width] => 1024
    
[alt] => 
    [
title] => 
)
?>

Лучший ответ

Аватар пользователя bumble bumble 3 июня 2018 в 21:09

Удаляйте поле, а не файл.

<?php
unset($node->field_FIELD_NAME[LANGUAGE_NONE][$index]);
?>

Комментарии

Аватар пользователя engenes engenes 3 июня 2018 в 21:22

но файл же при этом на сервере останется?
мне нужно программно удалить из ноды прикрепленные к ней фотографии
то есть чтобы после выполнения функции.
при открытии страницы в выводимом поле не было фотографий. не было ни уменьшенных копий ни файлов на сервере

Аватар пользователя bumble bumble 3 июня 2018 в 21:26

Вы же делаете file_delete($file) Это удалит файл, если он не используется нигде.

Кстати, удалять его - нужно уже после сохранения ноды.