MODX中使用pThumb压缩移动端图片无效的问题求助
MODX 3.0.3 + pThumb 变量调用失效问题解决
环境与问题描述
- 环境:MODX 3.0.3,PHP 7.4
- 问题:使用pThumb压缩图片时,直接指定静态路径(如
img/portfolio/123.jpg)正常,但调用[[+image]]变量时失效。错误日志显示pThumb将未解析的[[+image]]作为路径,导致文件找不到,图片仅能原始显示,未应用压缩参数。
相关代码
[[!getImageList? &tvname=`portfolio` &limit=`20` &docid=`[[++cultureKey:is=`en`:then=`11`]][[++cultureKey:is=`fr`:then=`45`]][[++cultureKey:is=`ua`:then=`12`]][[++cultureKey:is=`ru`:then=`32`]]` &where=`[[+param]]` &tpl=`@CODE: <div class="swiper-slide"> <div class="slider__img"> <picture> <source srcset="[[pthumb? &input=`[[++site_url]][[+image]]` &options=`w=100&h=200&zc=1&q=10`]]" media="(orientation: portrait)"> <img src="[[pthumb? &input=`[[++site_url]][[+image]]` &options=`w=200&h=100&zc=1&q=10`]]" alt="[[+section]] - [[+idx]]"> </picture> </div> <div class="slider__bottom"> <div class="slider__text"> <h3 class="slider__title"> <a href="[[+link]]">[[+title]]</a> </h3> <div class="slider__description">[[+skills]]</div> </div> <a href="[[+link]]" class="slider__link"> <img src="/img/arrow-up-right-white.svg" alt="arrow-up-right-white"> </a> </div> </div> ` ]]
错误日志
[2023-12-04 20:03:36] (ERROR @ /home/i118454/public_html/lala.com/core/components/phpthumbof/model/phpthumbof.class.php: 156) [ pThumb] Resource: 2 || Image: (none)
File not found: /home/i118454/public_html/lala.com/[[+image]] *** Skipping ***
问题原因
MODX标签解析顺序导致pThumb在[[+image]]变量被替换前就执行,因此pThumb接收到的是未解析的标签字符串,而非实际图片路径。
解决方法
方法1:简化pThumb输入路径(推荐)
pThumb支持直接使用MODX模板变量,无需手动拼接[[++site_url]],修改模板中的pThumb调用:
<picture> <source srcset="[[pthumb? &input=`[[+image]]` &options=`w=100&h=200&zc=1&q=10`]]" media="(orientation: portrait)"> <img src="[[pthumb? &input=`[[+image]]` &options=`w=200&h=100&zc=1&q=10`]]" alt="[[+section]] - [[+idx]]"> </picture>
说明:pThumb会自动基于MODX的站点根路径处理图片,避免手动拼接路径引发的解析顺序问题。
方法2:强制变量优先解析
若需保留[[++site_url]]拼接,可通过:raw过滤器强制[[+image]]提前解析:
<picture> <source srcset="[[pthumb? &input=`[[++site_url]][[+image:raw]]` &options=`w=100&h=200&zc=1&q=10`]]" media="(orientation: portrait)"> <img src="[[pthumb? &input=`[[++site_url]][[+image:raw]]` &options=`w=200&h=100&zc=1&q=10`]]" alt="[[+section]] - [[+idx]]"> </picture>
:raw过滤器确保变量在pThumb执行前完成解析,传递给pThumb正确的图片路径。
额外检查点
- 验证
[[+image]]是否输出正确的相对路径(如img/portfolio/123.jpg),可临时在模板中单独输出[[+image]]确认。 - 检查
core/cache/phpthumbof/目录权限,确保服务器有写入权限,否则pThumb无法生成压缩后的图片。 - 确认pThumb版本兼容MODX 3.0.3,建议升级至最新稳定版。
内容的提问来源于stack exchange,提问作者Lost Svan
相关产品推荐
相关产品推荐

