QQ爹博客 QQ爹博客

Typecho最全面的缩略图设置(非插件)

in Typecho 文章转载请注明来源!

这可能是Typecho最全面的缩略图设置了,代码来自YODU模板内部提取,为了适合大众,所以删减了下没用的东西,不保证代码没有错误233。

功能介绍
看下面的功能列表吧别傻眼233

①支持自定义字段,自定义缩略图,
②支持显示配置好的标签图片
③有图文章显示缩略图,无图文章随机显示缩略图,
④有图文章显示缩略图,无图文章只显示一张固定的缩略图,
⑤有图文章显示缩略图,无图文章则不显示缩略图,
⑥所有文章一律显示随机缩略图,
⑦关闭所有缩略图显示

优先级介绍
关闭缩略图/所有文章一律显示随机缩略图 > 自定义图片 > 文章图片 > 标签图片 > 随机图片/固定图片

补充说明

缩略图优先显示文章中插入的图片,如果没有图片,就会去文章附件里提取图片,如果附件也没图片则根据优先级再去显示下级图片(大概吧)
下面函数啥的已经将自定义字段写出来了,需要自定义缩略图,直接在文章底部自定义字段那里添加图片链接即可【完整的链接】

文件配置说明

1,请将下面代码中的yodu改成你的模板文件夹名字

2,然后子里面建立个img文件夹,然后新建sj文件夹里面可以放随机图片1.jpg...99.jpg99张,如果不想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; ?>
jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://qqdie.com/archives/typecho-thumbnail-yes.html (转载时请注明本文出处及文章链接)

typecho缩略图tag
发表新评论
已有 10 条评论
  1. yjl
    yjl
    回复

    忘记说了,这个代码在最新版会报错!

  2. yjl
    yjl
    回复

    怎样改,如果没有图片就不显示缩略图?

  3. 梁兴健
    梁兴健
    回复

    SRC(UNKOWN)

  4. 夏目贵志
    夏目贵志
    回复

    比原来的强大了,都不用扣了 用到了 很不错 谢谢!

  5. Kay
    Kay
    回复

    非常好用。我做了一个利于用户设置的修改,如下://获取主题名字 $theme_name = new Typecho_Widget_Helper_Form_Element_Text('theme_n', NULL, NULL, _t('主题名称'), _t('如果需要使用上面的缩略图功能请输入当前的主题名称')); $form->addInput($theme_name); 然后在你的主题名下直接用函数如:
    $dir = './usr/themes/'.'<?php $this->options->theme_n(); ?>'.'/img/sj/';//随机缩略图目录

  6. 一夜涕
    一夜涕
    回复

    很不错 收藏了 以后用得着 不知可否来个友链

    1. Jrotty
      Jrotty本文作者
      回复

      @一夜涕 已添加友链 @(滑稽)

      1. 一夜涕
        一夜涕
        回复

        @Jrotty 已经上链了哟 多在群里交流交流哈 不懂的问你 大神哈哈


前篇 后篇