想法
因为handsome主题的默认头图有点单调,想加点图片,想了几个需求,总结了下来。
- 能添加多个站子的图片
- 不用自己的blog存储资源
- 尽量少更改主题代码,便于更新主题的时候恢复
用法
- 首先把文章最后的代码存到一个php文件里,位置任意,我这里的位置为
/code/get_img.php
- 打开
/usr/themes/handsome/libs/Content.php
文件找到whenSwitchHeaderImgSrc
函数附近 - 注释掉
$randomNum = unserialize(INDEX_IMAGE_ARRAY);
和$random = THEME_URL . 'usr/img/sj/' . @$randomNum[$index] . '.jpg';
- 添加一行
$random = '/code/get_img.php?_='.rand(999, 3000);
修改完的Content.php
文件whenSwitchHeaderImgSrc
函数附近应该是长这样的。
public static function whenSwitchHeaderImgSrc($index =0,$howToThumb,$attach,$content,$thumbField){
$options = mget();
//$randomNum = unserialize(INDEX_IMAGE_ARRAY);
// 随机缩略图路径
//$random = THEME_URL . 'usr/img/sj/' . @$randomNum[$index] . '.jpg';//如果有文章置顶,这里可能会导致index not undefined
$random = '/code/get_img.php?_='.rand(999, 3000);
$pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';
配置文件
根据我代码里的样式添加图片的配置就可以了,最好找用id区分图片的网站,配置项会短小很多。list
里面是图片idfun
里面是当前数组的url生成函数,想通过参数修改图片大小在这里面修改就搞定了。
代码
<?php
/*
直接请求将随机跳转到一个图片
*/
$imgArr = [];
//https://www.pexels.com/zh-cn/
$imgArr[0] = [
'list'=>[267371,230477,1115680,838413,235922,1560424,1056251,416160,96938,2194261,
666839,1133957,1269025,1089932,338711,573910,670061,3113124,247431,434090,
1209843,1684187,358312,1536619,96380,164821,373945,1547248,301920,256468,
1653823,59106,556665,461198,376464,321588,3193917,1040157,189349,396547,
3145552,220067,285173,409701,917076,255464,735911,2120016,1162540,],
'fun'=> function($id){return "https://images.pexels.com/photos/{$id}/pexels-photo-{$id}.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500";}
];
//https://i.keaitupian.net/
// $imgArr[1] = [
// 'list'=>[
// 'up/40/c0/7c/ec2caa4f7b67d2b44a95bece4e7cc040.jpg',
// 'up/38/05/17/57ae05cdfe607c1f877a7881ea170538.jpg'
// ],
// 'fun'=> function($id){return "https://i.keaitupian.net/".$id;}
// ];
function oneImg($id=false){
global $imgArr;
//求图片总数
// echo $count;
//随机选择一个
if($id == false){
$count = 0;
foreach($imgArr as $item){
$count += count($item['list']);
}
$id = rand(0, $count - 1);
}
//累积下标
$key = 0;
foreach($imgArr as $item){
if(isset($item['list'][$id - $key])){
return $item['fun']($item['list'][$id - $key]);
}else{
$key += count($item['list']);
continue;
}
}
}
header('Location: '.oneImg(isset($_GET['id'])?$_GET['id']:false));exit;