craftcms / cms

Build bespoke content experiences with Craft.
https://craftcms.com
Other
3.22k stars 627 forks source link

[5.x]: Asset Transforms Are Not Removed When An Asset is Replaced #15753

Open phillmorgan28 opened 3 days ago

phillmorgan28 commented 3 days ago

What happened?

Description

We replaced an image asset using the asset manager but all entries that use the asset are still displaying the old image. This is because Craft is not deleting old images transforms. I've tried all cache clearing mechanisms and Craft will not delete old image transforms. Only manual deletion is successful.

Steps to reproduce

  1. Add an image asset to a matrix
  2. Create an entry using the matrix
  3. Use twig function tag to create an image tag and pass a transform via twig as well
  4. Upload an image
  5. Replace the previous image with a new image through the asset manager

Expected behavior

Craft should be deleting old images transforms when an asset is replaced, or when template caches are cleared

Actual behavior

The old image persists

Craft CMS version

5.3.6

PHP version

8.2

Operating system and version

No response

Database type and version

No response

Image driver and version

No response

Installed plugins and versions

-

i-just commented 2 days ago

Hi, thanks for getting in touch! Let me check if I understand this correctly,

Is that correct?

Could you please share a snippet of your twig code? Are you using a named transform (defined in the control panel), or are you defining one in your template?

phillmorgan28 commented 1 day ago

Hi, thanks for the response. This is our image twig component:

{% if image is defined and image|length %}

  {% if imageAltTag is defined and imageAltTag|length %}
    {% set altTag = imageAltTag %}
  {% else %}
    {% set altTag = '#REDACTED#' %}
  {% endif %}

  <div{% if extraClasses is defined %} class="{{ extraClasses }}"{% endif %}>
    {{ tag('img', {
      class: imageClasses,
      srcset: image.one.setTransform({width: width, height: height, format: 'webp', quality: 80, mode: mode}).getSrcset(['1.5x']),
      src: image.one.setTransform({ width: width, height: height, format: 'webp', quality: 80, mode: mode}),
      width: width,
      height: height,
      alt: altTag,
    }) }}
  </div>
{% endif %}

The problem isn't with the generation of the images, it's that the transforms are not being cleaned up when the image is replaced, or when any of the caches are cleared.

Many thanks!

phillmorgan28 commented 1 day ago

Additionally, we are using some cache tags throughout our templates, however considering that I am clearing the caches to solve the issue (with no effect), I wouldn't have though these would have any bearing on transforms not being cleaned up?