网站建设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[0] == 'post_newthread_succeed' || $param[0] == 'post_edit_succeed') {
- if(!DB::fetch_first('select * from %t where tid = %d', array('forum_threadimage', $param[2]['tid']))) {
- $post = get_post_by_pid($param[2]['pid']);
- $message = $post['message'];
- $pattern = '#\[img.*\](.*)\[\/img\]#';
- preg_match($pattern, $message, $matches);
- if($matches[1]) {
- DB::insert('forum_threadimage', [
- 'tid' => $param[2]['tid'],
- 'attachment' => $matches[1],
- 'remote' => 1,
- ]);
- }
- }
- }
- }
复制代码 其实就是从内容里获取远程图片链接,插入到forum_threadimage表里,diy判断是否有图片附件,就是根据这个表来的。
这么搞完,diy里就可以显示远程图片的贴子了。
|