admin 2020-12-26 /** 输出文章缩略图 */ function showThumbnail($widget,$imgnum){ //获取两个参数,文章的ID和需要显示的图片数量 // 当文章无图片时的默认缩略图 $rand = rand(1,20); $random = $widget->widget('Widget_Options')->themeUrl . '/images/rand/' . $rand . '.jpg'; // 随机缩略图路径 $attach = $widget->attachments(1)->attachment; $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i'; //如果文章内有插图,则调用插图 if (preg_match_all($pattern, $widget->content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //没有就调用第一个图片附件 else if ($attach && $attach->isImage) { echo $attach->url; } //如果是内联式markdown格式的图片 else if (preg_match_all($patternMD, $widget->content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //如果是脚注式markdown格式的图片 else if (preg_match_all($patternMDfoot, $widget->content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //如果真的没有图片,就调用一张随机图片 else{ echo $random; } }
admin 2020-12-26 <img src="<?php showThumbnail($this); ?>"> or <img src="<?php showThumbnail($this,0); ?>"><?php echo thumb($this->cid); ?>边栏:<?php showThumbnail($latestArticles,0); ?>
admin 2020-12-26 自动调用第一个图片<?php preg_match_all("/\<img.*?src\=(\'|\")(.*?)(\'|\")[^>]*>/i", $this->content, $matches); $imgCount = count($matches[0]); if($imgCount >= 1){ $img = $matches[2][0]; echo <<<Html <p class="post-images"> <a href="{$this->permalink}" title="{$this->title}"> <img src="{$img}" alt="{$this->title}"> </a> </p> Html; } ?>自动调用img字段内容,如果没有,去文章搜索第1个图片。<?php if (array_key_exists('img',unserialize($this->___fields()))): ?><?php $this->fields->img(); ?><?php else: ?><?php preg_match_all("/\<img.*?src\=(\'|\")(.*?)(\'|\")[^>]*>/i", $this->content, $matches); $imgCount = count($matches[0]); if($imgCount >= 1){ $img = $matches[2][0]; echo <<<Html {$img} Html; } ?><?php endif; ?>
admin 2020-12-26 这可能是Typecho最全面的缩略图设置了,代码来自YODU模板内部提取,为了适合大众,所以删减了下没用的东西,不保证代码没有错误233。 功能介绍 看下面的功能列表吧别傻眼233 ①支持自定义字段,自定义缩略图, ②支持显示配置好的标签图片, ③有图文章显示缩略图,无图文章随机显示缩略图, ④有图文章显示缩略图,无图文章只显示一张固定的缩略图, ⑤有图文章显示缩略图,无图文章则不显示缩略图, ⑥所有文章一律显示随机缩略图, ⑦关闭所有缩略图显示 优先级介绍 关闭缩略图/所有文章一律显示随机缩略图 > 自定义图片 > 文章图片 > 标签图片 > 随机图片/固定图片 补充说明 缩略图优先显示文章中插入的图片,如果没有图片,就会去文章附件里提取图片,如果附件也没图片则根据优先级再去显示下级图片(大概吧) 下面函数啥的已经将自定义字段写出来了,需要自定义缩略图,直接在文章底部自定义字段那里添加图片链接即可【完整的链接】 文件配置说明 1,请将下面代码中的yodu改成你的模板文件夹名字 2,然后子里面建立个img文件夹,然后新建sj文件夹里面可以放随机图片1.jpg...99.jpg共99张,如果不想99张就需要把代码中的99改成你想要的数量【其实是自动判断的,只是判断失败就会启动默认的数量】 3,在img文件夹中放入mr.png图片,作为没有文章图时固定一张的缩略图 4,在img文件夹中新建文件夹tag文件夹,里面放入标签缩略名.jpg【缩略名最好别用中文】,这里的图片是文章没图但是有文章标签时,显示的图片,当然如果这个文件夹内你没有放入对于图片则显示随机图片什么的 在functions.php中function themeConfig($form){}里面添加下面的控制代码 $slimg = new Typecho_Widget_Helper_Form_Element_Select('slimg', array( 'showon'=>'有图文章显示缩略图,无图文章随机显示缩略图', 'Showimg' => '有图文章显示缩略图,无图文章只显示一张固定的缩略图', 'showoff' => '有图文章显示缩略图,无图文章则不显示缩略图', 'allsj' => '所有文章一律显示随机缩略图', 'guanbi' => '关闭所有缩略图显示' ), 'showon', _t('缩略图设置'), _t('默认选择“有图文章显示缩略图,无图文章随机显示缩略图”')); $form->addInput($slimg->multiMode()); 然后在添加个缩略图函数 // 自定义关键字 function themeFields($layout) { $thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, NULL, _t('自定义缩略图'), _t('输入缩略图地址(仅文章有效)')); $layout->addItem($thumb); } /** 输出文章缩略图 */ function showThumbnail($widget) { // 当文章无图片时的默认缩略图 $dir = './usr/themes/yodu/img/sj/';//随机缩略图目录 $n=sizeof(scandir($dir))-2; if($n <= 0){ $n=99; }// 异常处理,干掉自动判断图片数量的功能,切换至手动 $rand = rand(1,$n); // 随机 n张缩略图 $random = $widget->widget('Widget_Options')->themeUrl . '/img/sj/' . $rand . '.jpg'; // 随机缩略图路径 if(Typecho_Widget::widget('Widget_Options')->slimg && 'Showimg'==Typecho_Widget::widget('Widget_Options')->slimg ){ $random = $widget->widget('Widget_Options')->themeUrl . '/img/mr.png'; //无图时只显示固定一张缩略图 } $cai = '';//这里可以添加图片后缀,例如七牛的缩略图裁剪规则,这里默认为空 $attach = $widget->attachments(1)->attachment; $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i'; if (preg_match_all($pattern, $widget->content, $thumbUrl)) { $ctu = $thumbUrl[1][0].$cai; } //如果是内联式markdown格式的图片 else if (preg_match_all($patternMD, $widget->content, $thumbUrl)) { $ctu = $thumbUrl[1][0].$cai; } //如果是脚注式markdown格式的图片 else if (preg_match_all($patternMDfoot, $widget->content, $thumbUrl)) { $ctu = $thumbUrl[1][0].$cai; } else if ($attach && $attach->isImage) { $ctu = $attach->url.$cai; } else if ($widget->tags) { foreach ($widget->tags as $tag) { $ctu = './usr/themes/yodu/img/tag/' . $tag['slug'] . '.jpg'; if(is_file($ctu)) { $ctu = $widget->widget('Widget_Options')->themeUrl . '/img/tag/' . $tag['slug'] . '.jpg'; } else { $ctu = $random; } break; } } else { $ctu = $random; } if(Typecho_Widget::widget('Widget_Options')->slimg && 'showoff'==Typecho_Widget::widget('Widget_Options')->slimg ){ if($widget->fields->thumb){$ctu = $widget->fields->thumb;} if($ctu== $random) echo ''; else if($widget->is('post')||$widget->is('page')){ echo $ctu; }else{ echo '<img src="' .$ctu. '">'; } }else{ if($widget->fields->thumb){$ctu = $widget->fields->thumb;} if(!$widget->is('post')&&!$widget->is('page')){ if(Typecho_Widget::widget('Widget_Options')->slimg && 'allsj'==Typecho_Widget::widget('Widget_Options')->slimg ){$ctu = $random;} } echo $ctu; } } 前台index.php里面添加显示图片的代码 <?php if($this->options->slimg && 'guanbi'==$this->options->slimg): ?> <?php else: ?> <?php if($this->options->slimg && 'showoff'==$this->options->slimg): ?><a href="<?php $this->permalink() ?>" ><?php showThumbnail($this); ?></a> <?php else: ?> <img src="<?php showThumbnail($this); ?>"> <?php endif; ?> <?php endif; ?>