Typecho最全面的缩略图设置(非插件)
这可能是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; ?>
作者:https://qqdie.com/archives/typecho-thumbnail-yes.html
:D 少女祈祷中...