You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:55:33