dede文章页如何调用原图?

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

使用自定义函数 + 正则表达式(推荐,最灵活)

这是最推荐的方法,因为它不修改核心文件,只涉及模板和一个小小的函数文件,升级 DedeCMS 时也不会丢失修改。

dede文章页调用原图
(图片来源网络,侵删)

原理:

  1. /include/extend.func.php 文件中添加一个自定义函数,这个函数使用正则表达式来查找文章内容中的 <img> 标签,并移除其 width, height, style 等属性,从而还原为原图。
  2. 在文章页模板中,调用这个新函数来处理 body

操作步骤:

第1步:创建自定义函数

  1. 打开你的 DedeCMS 根目录,找到并打开文件:/include/extend.func.php
  2. 在文件末尾的 ?> 之前,添加以下 PHP 代码:
/**
 * DedeCMS 文章内容调用原图
 * 功能:移除 <img> 标签中的 width, height, style 属性,保留原图
 * @param string $body 文章内容
 * @return string 处理后的内容
 */
function GetOriginalImg($body)
{
    // 清除 style 属性
    $body = preg_replace("/style=.+?['|"]/i", '', $body);
    // 清除 width 属性
    $body = preg_replace("/width=.+?['|"]/i", '', $body);
    // 清除 height 属性
    $body = preg_replace("/height=.+?['|"]/i", '', $body);
    // 替换多余的空格和换行
    $body = str_replace("  ", " ", $body);
    $body = str_replace("\r\n", "", $body);
    $body = str_replace("\n", "", $body);
    return $body;
}

第2步:在文章页模板中调用

dede文章页调用原图
(图片来源网络,侵删)
  1. 打开你的文章页模板文件,通常是 /templets/default/article_article.htm(根据你的模板路径可能不同)。
  2. 找到原来调用文章内容的地方,它可能是这样的:
    {dede:field.body/}
  3. 将其修改为调用我们刚刚创建的 GetOriginalImg 函数:
    {dede:field.body function='GetOriginalImg(@me)'/}
    • function='GetOriginalImg(@me)' 的意思是:将 {dede:field.body/} 的值(即 @me)作为参数传递给 GetOriginalImg 函数进行处理。

第3步:更新缓存

保存文件后,登录 DedeCMS 后台,点击 “系统” -> “一键更新网站”,选择“更新所有HTML”或“仅更新文章页”,然后执行更新,这样修改才能生效。


修改 arc.archives.class.php 文件(不推荐,但有特殊用途时可用)

原理: 直接修改 DedeCMS 处理文章内容的底层类文件,让它在调用 body 时就自动返回原图,这种方法虽然直接,但缺点是升级 DedeCMS 后,修改会被覆盖。

操作步骤:

dede文章页调用原图
(图片来源网络,侵删)
  1. 打开文件:/include/arc.archives.class.php
  2. 搜索 GetBody 函数(大约在 1200 行左右,不同版本行号可能不同)。
  3. 找到类似这样的代码:
    // 在处理文章内容的循环中,通常会有下面这行代码来处理图片
    $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body);

    这行代码就是将文章中的小图替换为带有样式的缩略图的元凶。

  4. 修改这行代码,将 style="..." 去掉,或者直接注释掉/删除整行替换逻辑。 修改前 (示例):
    // ... 其他代码 ...
    if($this->Fields['typeimg'] != '' && $isremote == 2)
    {
        $body = str_replace($oldimg, "<img src=\"{$this->Fields['typeimg']}\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body);
    }
    else
    {
        // 将文章中的图片替换为带样式的缩略图
        $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body);
    }
    // ... 其他代码 ...

    修改后 (示例):

    // ... 其他代码 ...
    if($this->Fields['typeimg'] != '' && $isremote == 2)
    {
        // 如果你想保留封面图,可以保留这行,但去掉样式
        $body = str_replace($oldimg, "<img src=\"{$this->Fields['typeimg']}\" alt=\"{$row['title']}\" />", $body);
    }
    else
    {
        // 直接注释掉或删除这行,这样就不会用缩略图替换文章内容里的图了,从而保留原图
        // $body = str_replace($oldimg, "<img src=\"$litpic\" alt=\"{$row['title']}\" style=\"max-width:100%;height:auto;border:0;\" />", $body);
    }
    // ... 其他代码 ...

    注意: 这种方法比较粗暴,可能会影响其他地方的图片逻辑,请谨慎操作,并提前备份文件。


使用CSS 控制(最简单,但有局限性)

原理: 不修改任何 PHP 代码,只通过 CSS 来强制图片显示为原始尺寸,并限制最大宽度以防止撑破布局。

操作步骤:

  1. 打开你的文章页模板文件,/templets/default/article_article.htm
  2. <head> 标签内找到你的 CSS 文件引入位置,或者在 <style> 标签内添加以下 CSS 代码:
.entry-content img, /* entry-content 是文章内容的常用class,根据你的模板修改 */
#arcBody img,     /* arcBody 是 DedeCMS 默认的文章内容ID */
.dede_content img  /* dede_content 是 DedeCMS 默认的文章内容class */
{
    /* 移除或覆盖内联的 width 和 height 属性 */
    max-width: 100% !important;
    height: auto !important;
    /* 移除内联的 style 属性 */
    style: !important;
    /* 可选:添加一些基本样式 */
    display: block;
    margin: 10px auto;
}

优点:

  • 无需修改任何 PHP 文件,安全、简单。
  • 升级系统无忧。

缺点:

  • 无法真正移除属性:CSS 只是视觉上覆盖了 widthheight,但这些属性依然存在于 HTML 中,可能会对某些需要精确图片尺寸的 JavaScript 代码造成影响。
  • style 属性的处理有限style: !important; 并不能移除整个 style 属性,只是清空了它的值,对于复杂的内联样式可能效果不佳。

总结与建议

方法 优点 缺点 推荐度
自定义函数 灵活、安全、彻底、可升级 需要修改函数文件,多一步操作 ⭐⭐⭐⭐⭐ (强烈推荐)
修改核心类 直接修改底层逻辑 不安全、升级会失效、易出错 ⭐ (不推荐,除非你明确知道自己在做什么)
CSS 控制 最简单、最安全、无侵入性 不彻底、有局限性、可能影响JS ⭐⭐⭐ (适合对样式要求不高,且不想动代码的场景)

对于绝大多数用户来说,强烈推荐使用方法一,它完美地平衡了功能性、安全性和可维护性,是解决 DedeCMS 调用原图问题的标准方案。

-- 展开阅读全文 --
头像
C语言学生成绩管理系统如何实现核心功能?
« 上一篇 今天
C语言名题精选百则PDF哪里找?
下一篇 » 今天

相关文章

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