以编程方式更新节点图像字段后清除缓存
Clear cache after update node image field programmatically
我有一个带有图像字段的节点,如果我在提交表单后在节点编辑页面上更新它,图像会更新,但如果我以编程方式执行并重新加载页面,图像将不会更新。但是,如果我使用 Ctrl + F5(清除浏览器缓存)重新加载页面,它也会更新。据我了解,我必须使某种缓存无效,但我不知道是哪一种。
$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();
}
你可以这样做,我在我的一项工作中使用它,所以希望它能帮助你(只是测试图像)
$data = file_get_contents("https://cdn.hackernoon.com/hn-images/0*xMaFF2hSXpf_kIfG.jpg");
$file = file_save_data($data, "public://0*xMaFF2hSXpf_kIfG.jpg", FILE_EXISTS_REPLACE);
$nid = 34; // your nid
$node = Node::load($nid);
$field_image = array(
'target_id' => $file->id(),
'alt' => "Image",
'title' => "Update Program",
);
$node->field_image = $field_image;
$node->save();
对于无效缓存,一旦节点被保存,它会自动失效,无论是手动还是通过程序,如果您设置了任何节点特定的缓存,您需要使其无效才能正常工作。
事实是在生成图像时,我留下了相同的文件名,所以浏览器缓存没有更新。
解决办法是每次都把图片的名字改成新的。
我有一个带有图像字段的节点,如果我在提交表单后在节点编辑页面上更新它,图像会更新,但如果我以编程方式执行并重新加载页面,图像将不会更新。但是,如果我使用 Ctrl + F5(清除浏览器缓存)重新加载页面,它也会更新。据我了解,我必须使某种缓存无效,但我不知道是哪一种。
$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();
}
你可以这样做,我在我的一项工作中使用它,所以希望它能帮助你(只是测试图像)
$data = file_get_contents("https://cdn.hackernoon.com/hn-images/0*xMaFF2hSXpf_kIfG.jpg");
$file = file_save_data($data, "public://0*xMaFF2hSXpf_kIfG.jpg", FILE_EXISTS_REPLACE);
$nid = 34; // your nid
$node = Node::load($nid);
$field_image = array(
'target_id' => $file->id(),
'alt' => "Image",
'title' => "Update Program",
);
$node->field_image = $field_image;
$node->save();
对于无效缓存,一旦节点被保存,它会自动失效,无论是手动还是通过程序,如果您设置了任何节点特定的缓存,您需要使其无效才能正常工作。
事实是在生成图像时,我留下了相同的文件名,所以浏览器缓存没有更新。 解决办法是每次都把图片的名字改成新的。