From 80b6e807b1f8ea612d73106f6c815458ef17be57 Mon Sep 17 00:00:00 2001 From: filesite Date: Tue, 22 Oct 2024 22:01:09 +0800 Subject: [PATCH] add file sort support, faq update --- FAQ.md | 83 ++++++++++++++++++++- conf/app.php | 9 ++- plugins/Common.php | 62 +++++++++++++++ themes/beauty/controller/ListController.php | 12 +++ themes/beauty/views/site/index.php | 1 - 5 files changed, 160 insertions(+), 7 deletions(-) diff --git a/FAQ.md b/FAQ.md index 19d4969..c2695aa 100644 --- a/FAQ.md +++ b/FAQ.md @@ -16,6 +16,11 @@ * [怎么修改浏览器地址栏左侧的小图标?](#怎么修改浏览器地址栏左侧的小图标) * [相册部署到外网了,点击图片打开有点慢怎么办?](#相册部署到外网了点击图片打开有点慢怎么办) * [在局域网内使用,能否所有图片使用原图而不是缩略图?](#在局域网内使用能否所有图片使用原图而不是缩略图) +* [怎么对照片、视频、音乐文件进行排序?](#怎么对照片、视频、音乐文件进行排序) +* [怎么设置每页照片、视频、音乐文件数量?](#怎么设置每页照片、视频、音乐文件数量) +* [怎么设置自动播放时每张照片停留时间?](#怎么设置自动播放时每张照片停留时间) +* [怎么设置局域网内访问拥有刷新、设置封面等管理权限?](#怎么设置局域网内访问拥有刷新、设置封面等管理权限) +* [外网访问怎么设置允许当前IP访问拥有刷新、设置封面等管理权限?](#外网访问怎么设置允许当前IP访问拥有刷新、设置封面等管理权限) * [我的设备cpu性能较差,缩略图显示有点慢且cpu占用较高怎么解决?](#我的设备cpu性能较差缩略图显示有点慢且cpu占用较高怎么解决) * [更多问题如何联系?](#更多问题如何联系) @@ -112,7 +117,7 @@ docker exec -it machete_album /var/www/machete/bin/upgrade.sh ## 怎么关闭网页底部的二维码? -在runtime/custom_config.json中增加配置: +在runtime/custom_config.json中增加以下配置: ``` "showQRImageInFooter": false ``` @@ -150,7 +155,7 @@ by FileSite.io ## 怎么修改浏览器地址栏左侧的小图标? -请创建自己的icon文件,命名为favicon.ico,把它复制到你的图片根目录即可; +请创建自己的icon文件,命名为favicon.ico,把它复制到你的图片根目录; **以容器目录为例:** ``` @@ -164,7 +169,7 @@ machete家庭相册默认为局域网使用,配置**enableSmallImageForWan** 如果你的照片文件大小很大,那么在外网打开可能会很慢。 解决办法,为外网点击图片浏览大图开启缩略图功能, -在自定义配置:runtime/custom_config.json里增加以下配置即可: +在自定义配置:runtime/custom_config.json里增加以下配置: ``` "enableSmallImageForWan": true ``` @@ -178,6 +183,78 @@ machete家庭相册默认为局域网使用,配置**enableSmallImageForWan** ``` +## 怎么对照片、视频、音乐文件进行排序? + +在**runtime/custom_config.json**中增加以下配置: +``` +"sortFilesByName": true, +"sortOrderOfFiles": "asc" +``` + +其中sortFilesByName设置为true,打开文件按名称排序, +sortOrderOfFiles则设定排序方式,asc顺序,desc倒序。 + +除此之外,还可以在照片目录下增加排序文件:sort.txt, +内容为当前目录下的文件名,格式一行一个,示例: +``` +2_20240406223804.jpg +1_20240406223752.jpg +3_20240406223809.jpg +``` + +如果配置了此排序文件,且sortFilesByName为false关闭状态,则系统会按照排序文件中的文件名从上到下排序。 + + +## 怎么设置每页照片、视频、音乐文件数量? + +在自定义配置:runtime/custom_config.json里增加以下配置: +``` +"default_page_size": 50 +``` + + +## 怎么设置自动播放时每张照片停留时间? + +在自定义配置:runtime/custom_config.json里增加以下配置: +``` +"slide_show_timeout": 10 +``` + +单位:秒。 + + +## 怎么设置局域网内访问拥有刷新、设置封面等管理权限? + +在自定义配置:runtime/custom_config.json里增加以下配置: +``` +"adminForLanIps": true +``` + +系统支持这三类IP: +``` +127.0.0.1 +172.17.0.1, +192.168.xxx.xxx +``` + + +## 外网访问怎么设置允许当前IP访问拥有刷新、设置封面等管理权限? + +在自定义配置:runtime/custom_config.json里增加以下配置: +``` +"adminWhiteIps": [ + "你的外网ip地址" +] +``` + +如果部署的时候相册是经过nginx反向代理转发的,请在nginx的配置中设置转发用户ip地址: +``` +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +``` + + ## 我的设备cpu性能较差,缩略图显示有点慢且cpu占用较高怎么解决? machete家庭相册在设计的时候考虑到在嵌入式设备中运行,缩略图功能可由用户的浏览器完成。 diff --git a/conf/app.php b/conf/app.php index cfa966a..610729a 100644 --- a/conf/app.php +++ b/conf/app.php @@ -3,8 +3,8 @@ * Config */ $configs = array( - 'version' => '0.3.6', - 'releaseDate' => '2024-10-16', + 'version' => '0.3.7', + 'releaseDate' => '2024-10-22', 'showVersion' => false, //默认不显示版本号和发布日期 'default_timezone' => 'Asia/Hong_Kong', //timezone, check more: https://www.php.net/manual/en/timezones.asia.php @@ -90,8 +90,11 @@ $configs = array( 'defaultMenuStatusInPC' => 'closed', //PC下左侧目录默认状态,可选值:opened, closed + 'sortFilesByName' => false, //图片、视频、音乐文件按名字排序,默认关闭,以文件创建时间倒序排 + 'sortOrderOfFiles' => 'asc', //排序方式,asc顺序,desc倒序 + //开启局域网ip拥有管理权限,如:保存目录、视频封面图 - //默认只支持192.168网段以及本机(127.0.0.1、localhost) + //默认只支持192.168网段以及本机(127.0.0.1、172.17.0.1, localhost) 'adminForLanIps' => true, //拥有管理权限的ip白名单 diff --git a/plugins/Common.php b/plugins/Common.php index 3a02fc3..8abf43d 100644 --- a/plugins/Common.php +++ b/plugins/Common.php @@ -721,4 +721,66 @@ Class Common { return $admin; } + //根据指定的数组元素值对数组进行排序 + public static function sortArrayByValue($array, $keyName, $sortOrder = 'asc') { + if (empty($array) || count($array) == 0) {return $array;} + + $sorted = $array; + + $tmp = []; + foreach ($array as $index => $item) { + $tmp[$item[$keyName]] = $index; + } + + if ($sortOrder == 'asc') { + ksort($tmp); + }else { + krsort($tmp); + } + + $newArr = []; + foreach ($tmp as $key => $index) { + $newArr[$index] = $array[$index]; + } + + return !empty($newArr) ? $newArr : $sorted; + } + + //根据指定的数组对数组进行排序 + public static function sortArrayByFilenameList($array, $sortedArray) { + if (empty($array) || count($array) == 0) {return $array;} + + $sorted = $array; + + $tmp = []; + foreach ($sortedArray as $filename) { + foreach ($array as $index => $val) { + if (!empty($filename) && "{$val['filename']}.{$val['extension']}" == $filename) { + $tmp[$filename] = $index; + break; + } + } + } + + $newArr = []; + $sortIndexes = []; + foreach ($tmp as $filename => $index) { + $newArr[$index] = $array[$index]; + array_push($sortIndexes, $index); + } + + //append others + if (count($newArr) < count($array)) { + foreach ($array as $index => $val) { + if (in_array($index, $sortIndexes)) { + continue; + } + + $newArr[$index] = $val; + } + } + + return !empty($newArr) ? $newArr : $sorted; + } + } \ No newline at end of file diff --git a/themes/beauty/controller/ListController.php b/themes/beauty/controller/ListController.php index 3cf9080..d656266 100644 --- a/themes/beauty/controller/ListController.php +++ b/themes/beauty/controller/ListController.php @@ -159,6 +159,18 @@ Class ListController extends Controller { }); } + + //文件排序支持:默认按创建时间倒序、按文件名排序、按目录说明文件_sort.txt排序 + if (!empty(FSC::$app['config']['sortFilesByName'])) { + $sortOrder = !empty(FSC::$app['config']['sortOrderOfFiles']) ? FSC::$app['config']['sortOrderOfFiles'] : 'asc'; + $sortField = 'filename'; + $scanResults[$cateId]['files'] = Common::sortArrayByValue($scanResults[$cateId]['files'], $sortField, $sortOrder); + }else if (!empty($scanResults[$cateId]['sort'])) { + $sortByArray = explode("\n", $scanResults[$cateId]['sort']); + $scanResults[$cateId]['files'] = Common::sortArrayByFilenameList($scanResults[$cateId]['files'], $sortByArray); + } + + //获取当前目录下的readme $cateReadmeFile = $scanner->getDefaultReadme(); if (!empty($cateReadmeFile)) { diff --git a/themes/beauty/views/site/index.php b/themes/beauty/views/site/index.php index 84ef284..6f8b8f1 100644 --- a/themes/beauty/views/site/index.php +++ b/themes/beauty/views/site/index.php @@ -325,7 +325,6 @@ eof; break; } - $title = !empty($file['title']) ? $file['title'] : $file['filename']; //图片、视频显示文件修改日期 $title = Common::getDateFromString($file['filename']); if (empty($title) && !empty($file['fstat']['mtime']) && !empty($file['fstat']['ctime'])) {