xiao9469 发表于 2020-7-22 13:56:49

帖子列表图片显示问题

本人按照网上大佬的教程,都弄得差不多了,可是出现一个问题,调用的图片,

代码如下


如果调用了外链图片的链接,是无法识别的调用的,是直接当缩略字来调用,请教一下,




请教一下大家,能指点一下吗?谢谢!

Discuz智能体 发表于 2025-3-12 00:55:04

关于Discuz帖子列表外链图片无法识别为缩略图的问题,根据DZ插件网技术团队的经验,建议通过以下方案解决:

1. **修改模板正则匹配规则**
在forumdisplay_list.htm模板文件中找到图片处理代码,将正则表达式修改为:
$pattern = '/<img[\s\S]*?src=[\"\'](http?:\/\/.*?\.(?:jpg|jpeg|gif|png))[\"\'].*?>/i';
preg_match_all($pattern, $post['message'], $matches);

2. **扩展图片识别逻辑**
在source/module/forum/forum_forumdisplay.php中添加外链处理逻辑:
// 原始附件处理
if(preg_match_all("/<img[\s\S]*?src=\"(.+?)\".*?>/", $post['message'], $imgs)) {
    //...原有代码
}

// 新增外链处理
elseif(preg_match_all("/<img[^>]+src=\"(http?:\/\/[^\"]+\.(jpg|jpeg|png|gif))\"[^>]*>/i", $post['message'], $extimgs)) {
    $firstimg = count($extimgs) ? $extimgs : '';
    if($firstimg) {
      $thread['thumb'] = $firstimg; // 直接使用外链地址
    }
}

3. **添加缩略图处理函数**
在模板中添加自定义缩略图处理:
// 在帖子列表循环中增加判断
<!--{if $thread['thumb']}-->
    <img src="{$thread['thumb']}" class="thumb" />
<!--{else}-->
    <div class="thumb_bg">{lang thumbnail}</div>
<!--{/if}-->

4. **注意事项**
- 外链图片需要允许跨域访问(检查图片URL的Access-Control-Allow-Origin头信息)
- 建议使用https协议的外链地址避免混合内容警告
- 若需生成缩略图,可使用第三方服务(例如:thumb.dz-x.net/width/height/图片URL)

如需更完整的解决方案,可访问DZ插件网搜索【外链缩略图增强组件】获取专业处理方案。该问题涉及模板解析逻辑调整,建议在修改前备份template/default/forum/forumdisplay_list.htm文件。

修改后可通过F12开发者工具检查:
1. 图片请求是否正常返回200状态
2. 控制台是否有CORS错误提示
3. 缩略图容器尺寸是否符合CSS定义

若遇到特定域名无法识别,可在正则表达式中的(?:jpg|jpeg|gif|png)后添加域名白名单限制,例如:
`(?:example\.com|img.dz-x\.net)`
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-16 16:12:36

你好!关于你在Discuz论坛中调用外链图片时无法正常显示的问题,这通常是由于Discuz默认的图片处理机制导致的。Discuz在处理帖子内容时,通常会优先处理本地图片,而外链图片可能会被当作普通文本处理,导致无法正确显示为缩略图。

### 解决方案:

1. **检查图片链接格式**:
   确保你调用的外链图片链接是完整的URL,并且以常见的图片格式(如`.jpg`, `.png`, `.gif`等)结尾。例如:
   <img src="https://www.example.com/image.jpg" alt="example image">

2. **修改模板文件**:
   如果你希望在帖子列表中显示外链图片的缩略图,你可能需要修改模板文件。通常,帖子列表的模板文件位于`template/default/forum/`目录下,具体文件名可能是`forumdisplay_list.htm`。

   你可以在模板文件中找到处理图片的代码,并对其进行修改。例如,找到类似以下的代码:
   <!--{if $thread}-->
   <img src="$thread" alt="缩略图">
   <!--{/if}-->
   修改为:
   <!--{if $thread}-->
   <img src="$thread" alt="缩略图" onerror="this.src='https://www.example.com/default_image.jpg';">
   <!--{/if}-->
   这里的`onerror`事件处理程序可以在图片加载失败时显示一个默认图片。

3. **使用插件或扩展**:
   如果你不熟悉修改模板文件,或者希望有更灵活的解决方案,可以考虑使用一些第三方插件或扩展。你可以在DZ插件网(https://www.dz-x.net/)上搜索相关的插件,这些插件通常提供了更强大的图片处理功能,包括对外链图片的支持。

4. **自定义函数**:
   如果你有PHP开发经验,可以尝试编写一个自定义函数来处理外链图片。你可以在`source/function/`目录下创建一个新的PHP文件,或者修改现有的函数文件,添加一个函数来检测并处理外链图片。

   例如:
   function handle_external_image($url) {
       if (filter_var($url, FILTER_VALIDATE_URL)) {
         return "<img src='$url' alt='external image'>";
       } else {
         return "<img src='https://www.example.com/default_image.jpg' alt='default image'>";
       }
   }
   然后在模板中调用这个函数:
   <!--{eval echo handle_external_image($thread);}-->

### 总结:
通过以上方法,你应该能够解决外链图片无法正常显示的问题。如果你对代码修改不熟悉,建议先从简单的模板修改开始,或者考虑使用第三方插件来简化操作。如果你有更多问题,欢迎继续提问!

希望这些信息对你有帮助!如果有其他问题,欢迎随时联系。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 帖子列表图片显示问题