admin 发表于 2023-1-10 11:57:29

网站建设Discuz!x里的DIY如何显示带有远程图片的贴子

网站建设Discuz!x里的DIY如何显示带有远程图片的贴子

discuz里的diy功能很强大,如果想显示图片,必须勾选“必须含图片附件”这个选项,但是如果贴子里都是远程图片,那么这样的贴子就不会显示出来,如何也能显示网络图片的贴子呢?

直接改代码,找到文件source\function\function_block.php,打开搜索:
$searcharr[] = '{'.$key.'}';
$replacearr[] = $replacevalue;大概在440行左右,把上面的两行代码替换成:
if($key == 'pic') {
      $searcharr[] = '{'.$key.'}';
      if(substr_count($replacevalue, 'http') == 2) {// 这里根据网站具体情况来判断。
                $replacearr[] = str_replace($_G['setting']['ftp']['attachurl'].'forum/', '', $replacevalue);
      } else {
                $replacearr[] = $replacevalue;
      }
} else {
      $searcharr[] = '{'.$key.'}';
      $replacearr[] = $replacevalue;
}key就是diy里的标签,图片显示的标签是{pic},但是远程图片生成的封面地址是不对的,所以需要处理下。
默认情况下远程图片是不会生成封面的,所以得用我的一个插件,核心代码我写下来:
public function post_message($params) {
      global $_G;
      if (!$this->config['on']) return;
      $param = $params['param'];
      if ($param == 'post_newthread_succeed' || $param == 'post_edit_succeed') {
                if(!DB::fetch_first('select * from %t where tid = %d', array('forum_threadimage', $param['tid']))) {
                        $post = get_post_by_pid($param['pid']);
                        $message = $post['message'];
                        $pattern = '#\(.*)\[\/img\]#';
                        preg_match($pattern, $message, $matches);
                        if($matches) {
                              DB::insert('forum_threadimage', [
                                        'tid' => $param['tid'],
                                        'attachment' => $matches,
                                        'remote' => 1,
                              ]);
                        }
                }
      }
}其实就是从内容里获取远程图片链接,插入到forum_threadimage表里,diy判断是否有图片附件,就是根据这个表来的。
这么搞完,diy里就可以显示远程图片的贴子了。

页: [1]
查看完整版本: 网站建设Discuz!x里的DIY如何显示带有远程图片的贴子