frontopen2是一款非常不错的主题,本博客用的就是这个主题。该主题的原作者将它免费分享出来,晨风等人继续做了维护和开发,主题非常的棒,这里强力推荐一下。我平时非常喜欢每篇文章都有一个缩略图,但是该主题如果文章中没有图片,则不会显示缩略图,向风哥反映希望加上随机缩略图,但是他表示不会增加这个特性。木有办法,只有自己动手,丰衣足食了。首先声明,本人不会什么前端开发,只能根据C、C++等语言的语法去推测、试验php语法等,费了好大劲才增加了这个功能。这里写出来一方面给自己做个笔记,另一方面给和我一样有这个喜好的人分享一下。
这个功能的实现主要更改两个文件(当然更改方法不唯一):functions.php和loop.php。
functions.php中的修改:在“timthumb缩略图函数function post_thumbnail( width,$height,$dataSrc)”中做如下修改
修改前:
} else {//如果日志中没有图片,则显示默认 if(isset($dataSrc)){ $post_timthumb = '<img '.$dataSrc.'="'.get_bloginfo("template_url").'/images/default_thumb.gif" alt="'.$post->post_title.'" />'; }else{ $post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/default_thumb.gif" alt="'.$post->post_title.'" />'; } }
修改后:
} else {//如果日志中没有图片,则显示默认 if(isset($dataSrc)){ $random = mt_rand(1, 50); $post_timthumb = '<img '.$dataSrc.'="'.get_bloginfo("template_url").'/images/pic/'.$random.'.jpg" height="'.$height.'" width="'.$width.'" alt="'.$post->post_title.'" />'; }else{ $random = mt_rand(1, 50); $post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/pic/'.$random.'.jpg" height="'.$height.'" width="'.$width.'" alt="'.$post->post_title.'" />'; } }
可以看出,主要做了两方面的修改:
- 将默认的图片改为随机的图片。当然,你需要在主题的images目录下,放一个pic目录,里面存放你想要显示的图片,然后将图片的个数写在mt_rand()函数里面,我这里pic里面有50张图片。
- 增加了height和width变量。这两个的作用是根据文章比例等对缩略图进行裁剪。如果不增加这两个变量,我们会发现缩略图片的大小非常的混乱,不一样大。
我们刚才也看到,默认的主题代码里面,当文章中没有图片时,是会显示/images目录下的default_thumb.gif图片的,但为什么没有显示呢?我们再看下面第二个要修改的文件。
loop.php中的修改:大概在79行
修改前:
<?php post_thumbnail($imgW,$imgH,lateLoad('data-').'src'); if(has_excerpt()) the_excerpt(); else echo dm_strimwidth(strip_tags($post->post_content),0,$dis_num,'....');} elseif(catch_that_image()){post_thumbnail($imgW,$imgH,lateLoad('data-').'src');?>修改后
:
<?php post_thumbnail($imgW,$imgH,lateLoad('data-').'src'); if(has_excerpt()) the_excerpt(); else echo dm_strimwidth(strip_tags($post->post_content),0,$dis_num,'....');} elseif('allan'){post_thumbnail($imgW,$imgH,lateLoad('data-').'src');?>
我们可以看到,唯一的修改就是将elseif中的catch_that_image( )函数替换成了一个非空字符串(这里写的是'allan',可以替换为任意非空字符串)。这里为什么要这样修改呢?我们看一下catch_that_image( )这个函数,这个函数在functions.php中,就是timthumb缩略图函数function post_thumbnail( width,$height,$dataSrc)的前一个函数:
//截取第一张图片函数 function catch_that_image() { global $post; $first_img = ''; ob_start(); ob_end_clean(); $output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches); if($matches[1]){ $first_img = $matches[1][0]; } if(empty($first_img)){ $first_img = ''; } return $first_img; } //end
我们可以看到,这个函数就是用于获取文章中的第一张图片,如果有,就返回相关的非空字符串,如果文章中没有图片,则返回空字符串,这样的话在上面的判断中,如果没有图片,catch_that_image( )函数就返回空,那么后面的缩略图就不会执行。所以,虽然源代码指定了文章中没有图片时所要显示的缩略图,但其实当文章中没有图片时,显示缩略图的函数根本就不会执行,所以也就没有显示。现在我们将那里更改为一个非空字符串,这样不管怎么样,都会显示缩略图,然后我们在指定一下文章中没有图片时所要显示的缩略图,就可以完成缩略图显示的功能。
最后说明一下,显示缩略图的优先级顺序是:指定的缩略图 > 文章中第一张图片 > 随机缩略图。
评论已关闭