说明 :该代码适用于制作主题的小伙伴,因为后台外观设置中设置了4种头图显示方式。如果是为自己做的主题,可以在此基础上大大减少代码量。

如果仅仅是给自己一个人写主题,可以参考typecho按需求输出缩略图

代码功能

该代码能够实现以下功能:

  1. 首页头图开关关闭的时候,thumb字段为图片地址,仍然能够显示文章头图
  2. 文章头图开关关闭的时候,thumb字段为图片地址,仍然能够显示首页头图
  3. 文章首页头图都关闭的时候,thumb字段为图片地址,此时首页文章头图都能显示
  4. 头图开关开启的时候,thumb字段为no,当前文章将不会显示头图
  5. 头图开关开启时候,可以按照四个选择的顺序选择显示头图

这里,有几个不合理的需求,不再代码中实现,因为以下需求会破坏代码的逻辑性:

  1. 首页文章头图开关都关闭的情况下,thumb字段为图片地址,想只显示当前文章的文章头图,或者只显示当前文章的首页头图
  2. 首页头图开关关闭情况下,想当前文章显示首页头图。

总的来说,后台设置中的头图开关才是权重最高,不能让thumb字段越权操作,否则会带来一些bug,带来的就是某些功能的牺牲。

代码分析

一开始准备写这些逻辑的时候,我画了这样一张大图:

最终的结果就是:自己越来越糊涂了!

然后,调整了一下节点,精简成这样的:

最终的代码就是以第二张图的逻辑写出的代码。

thumb字段的权重最高,即使关闭了显示头图开关,只要thumb字段为图片地址,仍然可以显示出头图(第二点功能)

参考代码

public static function whenSwitchHeaderImgSrc($widget){ $options = mget(); $rand = rand(1,$options->RandomPicAmnt); $howToThumb = $options->RandomPicChoice; $random = $widget->widget('Widget_Options')->themeUrl . '/img/sj/' . $rand . '.jpg'; $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i'; // 随机缩略图路径 //正则匹配 主题目录下的/images/sj/的图片(以数字按顺序命名) $attach = $widget->attachments(1)->attachment;//附件中的图片 $thumbField = $widget->fields->thumb; if ($howToThumb == '0'){ return $random; }elseif ($howToThumb == '1' || $howToThumb == '2'){ if (!empty($thumbField)){ return $thumbField; }elseif (isset($attach->isImage) && $attach->isImage == 1){ return $attach->url; }else{ if (preg_match_all($pattern, $widget->content, $thumbUrl)){ $thumb = $thumbUrl[1][0]; }elseif (preg_match_all($patternMD, $widget->content, $thumbUrl)){ $thumb = $thumbUrl[1][0]; }elseif (preg_match_all($patternMDfoot, $widget->content, $thumbUrl)){ $thumb = $thumbUrl[1][0]; }else{//文章中没有图片 if ($howToThumb == '1'){ return ''; }else{ return $random; } } return $thumb; } }elseif ($howToThumb == '3'){ if (!empty($thumbField)){ return $thumbField; }else{ return $random; } } } //输出头图图片地址 public static function returnHeaderImgSrc($widget,$select){ $options = mget(); $thumbField = $widget->fields->thumb; if (strtoupper($thumbField) == "NO"){//thumb 为no 直接不显示头图 $imgSrc = ""; }else{//thumb不为no if (in_array('NoRandomPic-post',$options->indexsetup) && in_array('NoRandomPic-index', $options->indexsetup)){//全部关闭 if ($thumbField != ""){ $imgSrc = Content::whenSwitchHeaderImgSrc($widget); }else{ $imgSrc = ""; } }else if (!in_array('NoRandomPic-post',$options->indexsetup) && !in_array('NoRandomPic-index', $options->indexsetup)){//全部开启 $imgSrc = Content::whenSwitchHeaderImgSrc($widget); }else{//一开一闭 if (in_array('NoRandomPic-post',$options->indexsetup)){//不显示文章头图,显示首页头图 if ($select == "post"){ $imgSrc = ""; }else{ $imgSrc = Content::whenSwitchHeaderImgSrc($widget); } }else{//不显示首页头图,显示文章页面头图 if ($select == "post"){ $imgSrc = Content::whenSwitchHeaderImgSrc($widget); }else{ $imgSrc = ""; } } } } return $imgSrc; }
最后修改:2019 年 02 月 26 日
喜欢我的文章吗?
别忘了点赞或赞赏,让我知道创作的路上有你陪伴。