Loading... <div class="tip share">请注意,本文编写于 975 天前,最后修改于 634 天前,其中某些信息可能已经过时。</div> handsome只支持整个assets上传,而这可能会导致一些问题,比如我会导致小图标解析错误,而且也不能发挥阿里oss能图片处理的优势。 而且handsome原本的随机头图是存在服务器本地的,只能是jpg格式,而且只能从数字1开头,数字要连续,等等,使用起来比较的繁琐。 想起以前用过一个图片主题支持使用网络上的图片做随机头图。 <!--more--> # 版本一 ## 修改 functions_mine.php ```php $RandomPicChoice = new Radio('RandomPicChoice', array( '0' => _t('1.只显示随机图片</br>'), '1' => _t('2.显示顺序:thumb自定义字段——文章第一个附件——文章第一张图片</br>'), '2' => _t('3.显示顺序:thumb自定义字段——文章第一个附件——文章第一张图片——随机图片</br>'), '3' => _t('4.显示顺序:thumb自定义字段——随机图片'), '4' => _t('5.显示顺序:thumb自定义字段'), '5' => _t('6.显示顺序:thumb自定义字段——随机网络图片,需要在下面填写地址') ), //Default choose '2',_t('博客头图来源设置'),_t('该头图来源设置对首页和文章页面同时生效。头图获取依次按照顺序获取。</br>第五个性能更好,第三个更智能。解析文章中的图片会根据文章内容长度有性能损耗<br><span style="color: #f00">注意</span>:此项设置仅在开启显示头图后才生效') ); $form->addInput($RandomPicChoice); $RandomWebPicPath = new Text('RandomWebPicPath',NULL,NULL,_t('自定义从网络上获取头图的位置'),"如果想从oss中获取随机头图请在这里填写,用,分隔。"); $form->addInput($RandomWebPicPath); ``` 添加RandomWebPicPath字段与在RandomPicChoice中添加5选项。 ## 修改 content.php 添加如下函数: ```php public static function randomWebImage() { $options = mget(); $webPath=$options->RandomWebPicPath; $webPatharr=explode(',', $webPath); $key=array_rand($webPatharr); return $webPatharr[$key]; } ``` 这个函数是将options中的字段解析成地址数组的,同时将返回数组中随机的一个值。 找到如下函数 ```php public static function whenSwitchHeaderImgSrc($widget, $index, $howToThumb, $thumbField,$extra_content= "") ``` 找到如下代码 ```php $random = STATIC_PATH . 'img/sj/' . @$randomNum[$index] . '.jpg';//如果有文章置顶,这里可能会导致index not undefined $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; ``` 添加代码后变成: ```php $webrandom = Content::randomWebImage(); $random = STATIC_PATH . 'img/sj/' . @$randomNum[$index] . '.jpg';//如果有文章置顶,这里可能会导致index not undefined $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; if($howToThumb == '5'){ if (!empty($thumbField)) { return $thumbField; } elseif(!empty($webrandom)){ return $webrandom; } else { return "https://oss.lolisis.com/%E7%BD%91%E7%AB%99%E6%90%AD%E5%BB%BA/CompressedImage/DERQ1_Steam_Wallpaper_1920x1080_2.jpg?x-oss-process=style/jpg360p"; } } ``` 最后一个return中可以换为自己喜欢的图片 # 版本二 上一个版本没有解决图片可能重复的问题,同时如果要为oss图片添加参数要一个个添加,太麻烦了。 思路,handsome主题内置了输出没有重复数字的数字数组的办法,这里直接调用。 ## functions_mine.php ```php //文章缩略图设置 $RandomPicChoice = new Radio('RandomPicChoice', array( '0' => _t('1.只显示随机图片</br>'), '1' => _t('2.显示顺序:thumb自定义字段——文章第一个附件——文章第一张图片</br>'), '2' => _t('3.显示顺序:thumb自定义字段——文章第一个附件——文章第一张图片——随机图片</br>'), '3' => _t('4.显示顺序:thumb自定义字段——随机图片'), '4' => _t('5.显示顺序:thumb自定义字段'), '5' => _t('6.显示顺序:thumb自定义字段——随机网络图片——随机图片') ), //Default choose '2',_t('博客头图来源设置'),_t('该头图来源设置对首页和文章页面同时生效。头图获取依次按照顺序获取。</br>第五个性能更好,第三个更智能。解析文章中的图片会根据文章内容长度有性能损耗<br><span style="color: #f00">注意</span>:此项设置仅在开启显示头图后才生效') ); $form->addInput($RandomPicChoice); $RandomWebPicPath = new Text('RandomWebPicPath',NULL,NULL,_t('网络随机头图设置'),"如果想从网络或者oss中获取随机头图请在这里填写,用,分隔。"); $form->addInput($RandomWebPicPath); $RandomWebPicPathSuffix = new Text('RandomWebPicPathSuffix',NULL,NULL,_t('oss头图参数设置'),"如果想给oss随机头图加参数请在这里填写。\n注意,填写此项则意味所有图片地址都能适用这个参数"); $form->addInput($RandomWebPicPathSuffix); ``` 先前的不变,加增加$RandomWebPicPathSuffix参数。 5选项让用户能选择新写的方法 $RandomWebPicPath输入图片 $RandomWebPicPathSuffix,则代表后缀 ## Utils.php 找到函数 ```php public static function initGlobalDefine() ``` 在 ```php @define('INDEX_IMAGE_ARRAY',serialize(Utils::getImageNumRandomArray($options->pageSize + $stickyNum, Utils::getSj1ImageNum()))); //右侧边栏图片 @define('SIDEBAR_IMAGE_ARRAY',serialize(Utils::getImageNumRandomArray(5,Utils::getSj2ImageNum()))); Utils::initCDN(); ``` 变成 ```php @define('INDEX_IMAGE_ARRAY',serialize(Utils::getImageNumRandomArray($options->pageSize + $stickyNum, Utils::getSj1ImageNum()))); //右侧边栏图片 @define('SIDEBAR_IMAGE_ARRAY',serialize(Utils::getImageNumRandomArray(5,Utils::getSj2ImageNum()))); //网络图片 @define('INDEX_WEB_IMAGE_ARRAY',serialize(Utils::getImageNumRandomArray($options->pageSize + $stickyNum, Utils::getWebPathImageNum()))); Utils::initCDN(); ``` 加入序列化INDEX_WEB_IMAGE_ARRAY,调用内置的函数,但注意getImageNumRandomArray是为服务器本地图片设计的,以1开头,到图片个数结尾,而网络图片地址数组是从0开始,图片个数-1结束的,使用时要注意。 找到函数 ``` public static function getSjAllImages($dir) ``` 在下面添加函数 ```php public static function getWebPathImageNum(){ $options = mget(); $webPath=$options->RandomWebPicPath; $webPathArr=explode(',', $webPath); $webPathArrNum=count($webPathArr); $ret=[]; for($i=0;$i<$webPathArrNum;$i++) { $ret[]=$i; } return $ret; } ``` 输出有多少个图片 ## commoncontents.php 添加如下函数: ```php public static function randomWebImage() { $options = mget(); $webPath=$options->RandomWebPicPath; $webPathArr=explode(',', $webPath); $webPathArrNum=count($webPathArr); $ret = []; for($i=0;$i<$webPathArrNum;$i++) { $webPathArr[$i] = rtrim($webPathArr[$i]); $ret[]=($webPathArr[$i]).($options->RandomWebPicPathSuffix); } return $ret; } ``` 修改函数,直接返回数组,同时将后缀加上。 找到如下函数 ```php public static function whenSwitchHeaderImgSrc($widget, $index, $howToThumb, $thumbField,$extra_content= "") ``` 找到如下代码 ```php $randomNum = unserialize(INDEX_IMAGE_ARRAY); $random = STATIC_PATH . 'img/sj/' . @$randomNum[$index] . '.jpg';//如果有文章置顶,这里可能会导致index not undefined $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; ``` 添加代码后变成: ```php $randomNum = unserialize(INDEX_IMAGE_ARRAY); $randomWebNum = unserialize(INDEX_WEB_IMAGE_ARRAY); // 随机缩略图路径 $webrandom = CommonContent::randomWebImage(); $random = STATIC_PATH . 'img/sj/' . @$randomNum[$index] . '.jpg';//如果有文章置顶,这里可能会导致index not undefined $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png|JPEG|webp|jpeg|bmp|gif))/i'; if($howToThumb == '5'){ if (!empty($thumbField)) { return $thumbField; } elseif(!empty($webrandom)){ return $webrandom[$randomWebNum[$index]]; } else { return "https://lolisis-file.oss-cn-shenzhen.aliyuncs.com/%E7%BD%91%E7%AB%99%E6%90%AD%E5%BB%BA/%E9%95%87%E7%AB%99%E5%9B%BE.jpg?x-oss-process=style/jpg360p"; } } ``` 比较笨的办法,也不想优化了,试了一下,速度快了一些 效果: ![2023-01-20-13-47-48.webp](https://lolisis.com/usr/uploads/2023/01/189236168.webp) # 2022.12.1 在9.0.1更新后,handsome修改了函数,我也进行了修改(搞了我好久,害人不浅)我没有想到他修改了getSjAllImages的动作方式,离谱。 Last modification:January 20, 2023 © Allow specification reprint Like 如果觉得我的文章对你有用,请留下评论。