在使用DEDECMS进行多站点配置时,开启系统设置中的多站点支持功能是一个常见的需求。这允许我们将不同目录绑定到不同的二级域名或独立域名上,从而实现多站点的管理。然而,这一功能的启用会导致附件图片的路径从相对路径自动转换为绝对路径。例如,原本的文章图片路径 `/upload/allimg/1709/234214324.JPG` 会被替换为 `https://www.bnxb.com/upload/allimg/1709/234214324.JPG`。

尽管这一功能看似方便,但在实际使用中,我们可能会遇到一些问题。特别是在 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 中开启多站点支持功能时,需要注意可能引发的缩略图路径问题。通过上述修改,不仅可以提升用户体验,还能减少后期维护的工作量。希望这篇教程能对您有所帮助!