尽管这一功能看似方便,但在实际使用中,我们可能会遇到一些问题。特别是在 DEDE 5.7 SP2 版本中,存在一个 BUG:文章中的图片变为绝对地址后,缩略图也会被提取为绝对地址。然而,在栏目页或首页引用这些缩略图时,由于开启了多站点支持,系统会再次在外层加上主站域名,导致缩略图路径变成类似以下形式:
https://www.bnxb.com/https://www.bnxb.com/upload/allimg/1709/234214324.JPG
这种情况下,缩略图将无法正常显示。虽然可以通过系统提供的“批量维护 - 数据库内容替换”功能手动移除域名部分,但这无疑增加了操作负担。为此,我们可以采取一种临时解决方法来修复这个问题。
解决方案是修改文件 `DEDE/INC/inc_archives_functions.php`。具体步骤如下:
首先,找到函数 `GetDDImgFromBody` 的原始代码:
/**
* 取第一个图片为缩略图
*
* @access public
* @param string $body 文档内容
* @return string
*/
function GetDDImgFromBody(&$body)
{
$litpic = '';
preg_match_all("/(src)=[\\"|'| ]{0,}([^>]*.(gif|jpg|bmp|png))/isU", $body, $img_array);
$img_array = array_unique($img_array[2]);
if (count($img_array) > 0)
{
$picname = preg_replace("/[\\"|' |]{1,}/", '', $img_array[0]);
if (preg_match("#_lit.#", $picname)) $litpic = $picname;
else $litpic = GetDDImage('ddfirst', $picname, 1);
}
return $litpic;
}
接下来,将其修改为以下代码:
/**
* 取第一个图片为缩略图
*
* @access public
* @param string $body 文档内容
* @return string
*/
function GetDDImgFromBody(&$body)
{
global $cfg_basehost;
$litpic = '';
preg_match_all("/(src)=[\\"|'| ]{0,}([^>]*.(gif|jpg|bmp|png))/isU", $body, $img_array);
$img_array = array_unique($img_array[2]);
if (count($img_array) > 0)
{
$picname = preg_replace("/[\\"|' |]{1,}/", '', $img_array[0]);
if (preg_match("#_lit.#", $picname)) $litpic = $picname;
else $litpic = GetDDImage('ddfirst', $picname, 1);
}
$litpic = str_replace($cfg_basehost, "", $litpic);
return $litpic;
}
新增的两行代码分别是:
global $cfg_basehost;
$litpic = str_replace($cfg_basehost, "", $litpic);
这两行的作用是检测缩略图路径中是否包含网站域名,并自动将其移除。通过这种方式,可以有效避免缩略图路径重复添加域名的问题,从而确保图片能够正常显示。
总结来说,当我们在 DEDECMS 中开启多站点支持功能时,需要注意可能引发的缩略图路径问题。通过上述修改,不仅可以提升用户体验,还能减少后期维护的工作量。希望这篇教程能对您有所帮助!