Программно обновить прикрепленное изображение к ноде.

Аватар пользователя buddy90210 buddy90210 13 сентября в 11:59

Всем привет.
В общем ситуация следующая:
Программно добавляю изображение к ноде, изображение обновляется (в редактировании ноды, новый файл), но в отображении показывается старое изображение, как будто какой то node rebuild надо вызвать.

Т.е. если открыть редактирование ноды и добавить другое изображение все отлично.

Вот код:

<?php
$replace 
move_uploaded_file($tmp_name$poster_dir '/' $poster_name);
    if (
$replace) {
        
$poster_uri 'public://user_files/' $owner_id '/posters/' $model_id '/' $poster_name;
        
$file File::create([
            
'filename' => $poster_name,
            
'uri' => $poster_uri,
            
'status' => 1,
        ]);
        
$file->setPermanent();
        
$file->save();
        
$node->set('field_model_poster', ['target_id' => $file->id()]);
        
$node->save();
        }
?>

Лучший ответ

Аватар пользователя buddy90210 buddy90210 15 сентября в 8:03

Так и есть) из-за генерации изображения с тем же самым названием оно не обновлялось в кэше, будьте внимательней) спасибо за помощь!

Комментарии

Аватар пользователя buddy90210 buddy90210 13 сентября в 15:02

В общем решил эту проблему предварительным удалением прикрепленного изображения:

<?php
if (!$node->field_model_poster->isEmpty()) {
$old_file_id $node->get('field_model_poster')->getValue()[0]['target_id'];
$old_file = \Drupal::entityTypeManager()
    ->
getStorage('file')
    ->
load($old_file_id);
$old_file->delete();
}
?>
Аватар пользователя buddy90210 buddy90210 13 сентября в 17:20

И снова всему виной кеш)) В общем изображение попадает в кеш браузера и никак не обновляется пока явно его не сбросишь Ctrl+F5.
Есть ли какой то вариант сделать это программно?

Аватар пользователя buddy90210 buddy90210 14 сентября в 11:42

Пробовал) и пробовал функцию сброса стилей для конкретного файла, результат тот же.
В стандартном интерфейсе ведь работает. Значит есть где то эта таинственная функция)

Аватар пользователя gun_dose gun_dose 14 сентября в 12:01
1

Браузер кэширует картинки по названию. Тут надо либо заголовки сервера настраивать, либо менять имя файла. Если файл называется по-другому, то тут без вариантов.

Аватар пользователя buddy90210 buddy90210 14 сентября в 12:30

Да файл у меня всегда одинаково называется, надо попробовать) Спасибо добрый человек)

Аватар пользователя buddy90210 buddy90210 15 сентября в 8:03

Так и есть) из-за генерации изображения с тем же самым названием оно не обновлялось в кэше, будьте внимательней) спасибо за помощь!