что делал:
получил массив из изображений, прикрепленных к ноде
<?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] =>
)
?>
Комментарии
Удаляйте поле, а не файл.
<?php
unset($node->field_FIELD_NAME[LANGUAGE_NONE][$index]);
?>
но файл же при этом на сервере останется?
мне нужно программно удалить из ноды прикрепленные к ней фотографии
то есть чтобы после выполнения функции.
при открытии страницы в выводимом поле не было фотографий. не было ни уменьшенных копий ни файлов на сервере
Вы же делаете file_delete($file) Это удалит файл, если он не используется нигде.
Кстати, удалять его - нужно уже после сохранения ноды.
использовал node_presave сработало
то есть вместо node_presave использовать что то другое?
Используйте hook_node_update - он срабатывает после сохранения.