【问题标题】:Clear cache after update node image field programmatically以编程方式更新节点图像字段后清除缓存
【发布时间】:2021-11-09 05:51:19
【问题描述】:

我有一个带有图像字段的节点,如果我在提交表单后在节点编辑页面上更新它,图像会更新,但如果我以编程方式执行并重新加载页面,图像将不会更新。但是如果我用 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();
}

【问题讨论】:

    标签: drupal drupal-8


    【解决方案1】:

    事实是,在生成图片的时候,我留下了相同的文件名,所以浏览器缓存没有更新。 解决方法是每次将图像名称更改为一个新名称。

    【讨论】:

      【解决方案2】:

      你可以这样做,我在我的一项工作中使用它,所以希望它的帮助(只是测试图像)

      $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();
      

      对于无效缓存,它会在节点保存后自动无效,无论是手动还是通过程序,如果您设置了任何节点特定的缓存,您需要使其无效以使其正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多