自定义handsome的默认头图,支持多站点

想法

因为handsome主题的默认头图有点单调,想加点图片,想了几个需求,总结了下来。

  1. 能添加多个站子的图片
  2. 不用自己的blog存储资源
  3. 尽量少更改主题代码,便于更新主题的时候恢复

用法

  1. 首先把文章最后的代码存到一个php文件里,位置任意,我这里的位置为/code/get_img.php
  2. 打开/usr/themes/handsome/libs/Content.php文件找到whenSwitchHeaderImgSrc函数附近
  3. 注释掉$randomNum = unserialize(INDEX_IMAGE_ARRAY);$random = THEME_URL . 'usr/img/sj/' . @$randomNum[$index] . '.jpg';
  4. 添加一行$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里面是图片id
fun里面是当前数组的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;
最后修改:2019 年 11 月 13 日 02 : 55 AM

发表评论