dede 调用upload原图

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

DedeCMS 的“原图”指的是用户在后台内容编辑器中上传图片时,没有被系统自动压缩或裁剪的那个最大尺寸的版本。

dede 调用upload原图
(图片来源网络,侵删)

这个原图通常会存储在你网站目录下的 /uploads/ 文件夹中,其路径信息会被保存在数据库的 dede_addonarticle (或其他附加表) 表的 body 字段里,或者在某些特定字段(如 litpic 缩略图)中,原图和缩略图路径是分开存储的。

调用原图主要有以下几种常见场景和方法:


(body) 中调用文章上传的原图

这是最常见的情况,当你在文章中通过编辑器的“插入图片”功能上传图片时,DedeCMS 会自动生成一个 <img> 标签,默认情况下,这个 <img> 标签的 src 属性指向的是经过处理的图片(如按宽度缩放后的版本)。

目标:修改这个 <img> 标签,让它直接指向原始的、未经处理的图片。

dede 调用upload原图
(图片来源网络,侵删)

方法 1:修改 DedeCMS 核心文件 (最直接,但升级会失效)

这个方法通过修改处理图片上传的 PHP 文件,让它在生成 <img> 标签时默认使用原图路径。

  1. 找到核心文件: 登录你的 FTP 或服务器文件管理器,找到以下文件: /include/helpers/upload.helper.php

  2. 定位并修改代码: 在 upload.helper.php 文件中,搜索类似 dd2img() 的函数调用,这个函数负责将图片路径转换为 <img> 标签,找到生成 src 属性的部分。

    你需要找到类似这样的代码块(具体行号可能因版本而异):

    dede 调用upload原图
    (图片来源网络,侵删)
    // 伪代码示例,请根据你的实际文件查找
    function dd2img($imgurl, $alt = '', $width = '', $height = '', $style = '') {
        // ... 一些判断逻辑 ...
        // 生成图片路径
        $src = $imgurl;
        // 如果开启了缩略图或者指定了宽度,可能会在这里生成一个处理后的路径
        // if ($width) { $src = '处理后的路径'; }
        // 拼接最终的 <img> 标签
        $img = "<img src=\"$src\" alt=\"$alt\" width=\"$width\" height=\"$height\" style=\"$style\" />";
        return $img;
    }
  3. 进行修改: 关键在于,要让 $src 变量直接指向原图,原图路径就是 $imgurl 本身,你需要确保代码中没有将 $imgurl 替换为处理后的路径。

    在很多版本中,DedeCMS 会根据配置自动生成一个 -lp 或其他后缀的缩略图路径,你需要找到这个逻辑并注释掉或修改它,强制使用 $imgurl

    一个常见的修改点:查找并注释掉或修改下面这行代码(或类似逻辑):

    // 假设这是生成缩略图路径的代码,你需要让它失效或指向原图
    // $litpic = preg_replace("/^(.*)\/(.*)\.(.*)$/i", "\\1/lit_\\2.\\3", $imgurl);
    // $src = $litpic; // 如果是这样,就错了,应该用 $imgurl

    修改后的逻辑应该是

    // 确保这里的 $src 指向的是原图路径 $imgurl
    $src = $imgurl; 
    // 如果你的原图路径存储在另一个变量里,$original_imgurl,就用那个
    // $src = $original_imgurl; 
  4. 保存文件: 修改后保存 upload.helper.php 文件,然后去后台重新编辑一篇已发布的文章,更新内容,再前台查看,图片应该就会显示为原图了。

⚠️ 重要提醒:修改核心文件不是一个好习惯,因为当你升级 DedeCMS 时,这些修改会被覆盖,升级后需要重新修改。


在自定义字段或其他地方调用原图

如果你有一个专门用来上传图片的自定义字段,并且希望调用它的原图,方法会更简单,因为通常原图路径和缩略图路径是分开存储的。

假设你有一个自定义字段叫 myimage,并且你在后台设置它时,勾选了“同时生成缩略图”。

  1. 数据库存储方式

    • myimage 字段本身存储的是 原图路径
    • 系统会自动生成一个名为 myimage_l 的字段来存储 缩略图路径
  2. 调用方法

    • 调用原图:直接使用 {dede:field.myimage /}
    • 调用缩略图:使用 {dede:field.myimage_l /}

示例:在文章页模板 (article_article.htm) 中调用

<h2>文章标题:{dede:field.title/}</h2>
<!-- 调用自定义字段 myimage 的原图 -->
<div class="original-image">
    <img src="{dede:field.myimage/}" alt="{dede:field.title/}" />
</div>
<!-- 调用自定义字段 myimage 的缩略图 -->
<div class="thumbnail-image">
    <img src="{dede:field.myimage_l/}" alt="{dede:field.title/}" />
</div>
{dede:field.body/}

调用缩略图 (litpic) 对应的原图

缩略图字段 litpic 存储的也是处理过的图片路径,要找到它对应的原图,需要从路径中反推。

  1. 路径规律: DedeCMS 通常会在缩略图路径中加上特定前缀或后缀来区分。

    • 原图:/uploads/202510/18/abc.jpg
    • 缩略图:/uploads/202510/18/thumb_abc.jpg/uploads/202510/18/abc_small.jpg
  2. 通过 PHP 代码反推: 在模板文件中,你可以使用 PHP 代码来替换缩略图路径中的特定部分,从而得到原图路径。

    假设你的缩略图路径是 thumb_ 前缀格式。

{dede:field name='litpic' runphp='yes'}
    // $this->result 就是当前字段的值,即缩略图路径
    $thumb_path = $this->result;
    // 使用 str_replace 将 'thumb_' 替换为 ''
    $original_path = str_replace('thumb_', '', $thumb_path);
    // 输出原图路径
    @me = $original_path;
{/dede:field}

使用方法: 将上面的代码放在你需要显示原图的地方,然后用 <img> 标签调用它。

<!-- 假设 litpic 的值是 /uploads/202510/18/thumb_xxx.jpg -->
<!-- 经过上面的 runphp 代码处理,@me 的值会变成 /uploads/202510/18/xxx.jpg -->
<img src="{dede:field name='litpic' runphp='yes'}$thumb_path = $this->result; $original_path = str_replace('thumb_', '', $thumb_path); @me = $original_path;{/dede:field}" alt="{dede:field.title/}" />

总结与最佳实践

场景 目标 推荐方法 备注
(body) 内的图片 修改 <img> 标签,使其指向原图 方法1:修改 include/helpers/upload.helper.php 直接但非永久,升级后需重做。
自定义字段图片 调用字段存储的原图路径 直接使用 {dede:field.字段名/} 最简单、最规范的方法。
从缩略图 (litpic) 找原图 根据缩略图路径反推原图路径 使用 {dede:field name='litpic' runphp='yes'} 灵活,但需要了解你的缩略图命名规则。

重要提示:在修改任何文件之前,请务必备份你的网站文件和数据库,以防操作失误导致网站无法正常运行,对于生产环境,修改核心文件应作为最后的选择。

-- 展开阅读全文 --
头像
单片机c语言16进制转10进制
« 上一篇 01-07
dede search.php
下一篇 » 01-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]