typecho按需求输出缩略图

介绍

顺序是:thumb(自定义字段)--> 第一个图片附件--> 文章第一张图片 --> 随机图片输出

代码扒了Themia的主题

在function.php 加上这段代码

function showThumbnail($widget)
{ 
    // 当文章无图片时的默认缩略图
    $rand = rand(1,7); // 随机 1-7 张缩略图

    $random = $widget->widget('Widget_Options')->themeUrl . '/images/sj/' . $rand . '.jpg'; // 随机缩略图路径
    //正则匹配 主题目录下的/images/sj/的图片(以数字按顺序命名)

$cai = '';
    $attach = $widget->attachments(1)->attachment;
    $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; 
  $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i';
    $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i';

if ($attach && $attach->isImage) {

$ctu = $attach->url.$cai;
    } 
//调用第一个图片附件
else 

//下面是调用文章第一个图片
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 {
$ctu = $random;
}
return $ctu;
}

修改index.php 里面的代码

                            <?php if (array_key_exists('thumb',unserialize($this->___fields()))): ?>

                            <div class="index-post-thumb">
                                <a class="index-post-cover" href="<?php $this->permalink() ?>">
                                    <img class="thumb" src="<?php echo $this->fields->thumb;?>">
                                </a>
                            </div>
                            <?php else : ?>
                            <?php $thumb = showThumbnail($this); if(!empty($thumb)):?>

                            <div class="index-post-thumb">
                                <a class="index-post-cover" href="<?php $this->permalink() ?>">
                                    <img class="thumb" src="<?php echo $thumb;?>">
                                </a>
                            </div>
                            <?php endif; ?>
                            <?php endif; ?>

其中的第一段

if (array_key_exists('thumb',unserialize($this->___fields())))

用来判断是否有thumb 自定义字段。如果有,则输出自定义字段的图片地址。


The last modification time is:November 1st, 2016 at 04:04 pm
If you think my article is useful to you, please feel free to appreciate

8 条评论

  1. 一日

    pjax下的多说同步评论测试

  2. 回头我也把他的代码提取一下 看能不能做成一个插件出来

    1. 一日
      @

      恩!加油奥!我一点不会typecho插件#(吐血倒地)

  3. 哦 这个跟我提取的LiNPX的主题内的代码有点类似 我也才刚发觉他的那部分代码可以自定义缩略图的 前几天还傻XX地以为只能默认第一张 修改第一张图片后得把后面的图片重新传一遍。。。

    1. CONEY
      @

      无尽的折腾啊,哈哈~

      1. 一日
        @CONEY

        我也想在折腾中学点什么呢!#(献花)

  4. CONEY

    这个主题以前也用过,好多撒花效果啊,我也折腾过。

    1. 一日
      @CONEY[勉强] 对啊,这个主题蛮简洁的!

Leave a Comment