Drupal 9.2中template_preprocess_image钩子不生效如何解决?
Drupal 9.2 版本preprocess_image钩子不生效解决方案
- 修正钩子命名:你代码中的
theme需要替换为你当前启用主题的机器名,例如你的主题机器名为my_custom_theme,钩子应命名为my_custom_theme_preprocess_image,且代码必须放在主题根目录下和机器名同名的.theme文件中(例如my_custom_theme.theme)。 - 修正属性修改逻辑:Drupal 9版本中图片的宽高属性存储在
attributes数组下,你原代码的unset逻辑无效,修改后代码应为:
function my_custom_theme_preprocess_image(&$variables) { $variables['attributes']['loading'] = 'auto'; unset($variables['attributes']['height'], $variables['attributes']['width']); }
- 清空全站缓存:Drupal的钩子实现会被缓存,修改代码后必须进入后台「配置」-「性能」点击「清空所有缓存」,或用Drush命令
drush cr清空缓存,钩子才会被识别。 - 适配响应式图片场景:如果你站点使用了响应式图片样式,需要改用
hook_preprocess_responsive_image钩子处理,默认的preprocess_image不会作用于响应式图片渲染。 - 排查钩子覆盖冲突:如果以上配置都正确仍不生效,可检查是否有父主题、其他模块实现了同名的
preprocess_image钩子,优先级更高覆盖了你的实现,可通过hook_module_implements_alter调整你的钩子执行顺序到最后。 - 可选全局配置调整:如果不需要全局默认懒加载,也可以直接进入后台「配置」-「媒体」-「图片设置」,取消勾选「Enable lazy loading for images by default」即可全局移除默认的lazy属性。
内容的提问来源于stack exchange,提问作者kowsalya v
相关产品推荐
相关产品推荐

