<?php $imgExts = !empty(FSC::$app['config']['supportedImageExts']) ? FSC::$app['config']['supportedImageExts'] : array('jpg', 'jpeg', 'png', 'webp', 'gif'); $videoExts = !empty(FSC::$app['config']['supportedVideoExts']) ? FSC::$app['config']['supportedVideoExts'] : array('mp4', 'mov', 'm3u8'); $audioExts = !empty(FSC::$app['config']['supportedAudioExts']) ? FSC::$app['config']['supportedAudioExts'] : array('mp3'); $supportedExts = array_merge($imgExts, $videoExts, $audioExts); if ($viewData['showType'] == 'image') { $supportedExts = $imgExts; }else if ($viewData['showType'] == 'video') { $supportedExts = $videoExts; }else if ($viewData['showType'] == 'audio') { $supportedExts = $audioExts; } //需密码授权的目录显示lock图标 $authConfig = !empty(FSC::$app['config']['password_auth']) ? FSC::$app['config']['password_auth'] : array(); $dir_ext_status = !empty($_COOKIE['dir_ext_status']) ? $_COOKIE['dir_ext_status'] : 'opened'; $menu_ext_status = !empty($_COOKIE['menu_ext_status']) ? $_COOKIE['menu_ext_status'] : FSC::$app['config']['defaultMenuStatusInPC']; $menu_expand_icon_cls = $menu_ext_status == 'opened' ? '' : 'closed'; $menu_expand_icon_url = $menu_ext_status == 'opened' ? 'arrow-left-circle.svg' : 'arrow-right-circle.svg'; $main_view_cls = $menu_ext_status == 'opened' ? '' : 'full'; $selectedId = $viewData['para_year']; if (!empty($viewData['para_month'])) { $selectedId = $viewData['para_month']; } $cacheData = !empty($viewData['cacheData']) ? $viewData['cacheData'] : []; ?><!-- 顶部导航栏模块 --> <nav class="navbar navbar-default navbar-fixed-top navbarJS"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display navbar-inverse--> <div class="navbar-header"> <div class="navbar-toggle"> <?php if (!empty($viewData['isAdminIp'])) { ?> <img class="svg icon1 svgimg verMiddle cleanCacheJS" src="/img/beauty/refresh.svg" alt="清空缓存数据" title="刷新缓存数据" style="padding-top:2px;margin-top:2px"> <?php } ?> <img class="svg icon1 svgimg lampJS verMiddle" src="/img/beauty/buld.svg" alt="点击关灯/开灯" title="点击关灯/开灯"> <img class="icon1 svg connectmeJS svgimg verMiddle" src="/img/beauty/contactUs.svg" alt="联系我们" title="联系我们" /> <button type="button" class="collapsed mr_button" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <img class="svg icon1 svgimg verMiddle" src="/img/beauty/navshow.svg" alt="展开列表" title="展开列表"> </button> </div> <a class="navbar-brand" href="/" tabindex="-1"> <span class="verMiddle"><?php echo $pageTitle; ?></span> </a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <div class="nb_right nav navbar-nav navbar-right hidden-xs"> <?php if (!empty($viewData['isAdminIp'])) { ?> <img class="svg icon1 svgimg verMiddle cleanCacheJS" src="/img/beauty/refresh.svg" alt="清空缓存数据" title="刷新缓存数据" style="padding-top:2px;margin-top:2px"> <?php } ?> <a href="javascript:;" class="light-switcher lampJS"> <img class="svg icon1 svgimg verMiddle" src="/img/beauty/buld.svg" alt="点击关灯/开灯" title="点击关灯/开灯"> </a> <img class="icon1 svg connectmeJS svgimg verMiddle" src="/img/beauty/contactUs.svg" alt="联系我们" title="联系我们"> </div> <!--侧边栏--> <ul class="nav navbar-fixed-left <?=$menu_expand_icon_cls?>"> <li class="menu-title"> 年月 <?php if (!empty($viewData['isAdminIp'])) { ?> <img class="svg icon1 svgimg verMiddle hide" src="/img/beauty/refresh.svg" alt="清空缓存数据" title="刷新缓存数据" style="margin-left:10px;width:16px"> <?php } ?> </li> <?php if (!empty($viewData['cacheData_keys'])) { $arrYears = array_keys($viewData['cacheData_keys']); arsort($arrYears); foreach($arrYears as $year) { $intYear = str_replace('y', '', $year); $selected = $year == $viewData['para_year'] ? 'active' : ''; $htmlFileTotal = ''; if (!empty($viewData['cacheData_keys'][$year]['total'])) { $htmlFileTotal = <<<eof <small class="badge">{$viewData['cacheData_keys'][$year]['total']}</small> eof; } echo <<<eof <li class="{$selected}"><a href="/list/bydate?year={$year}"> <img src="/img/beauty/calendar.svg?gray" alt="calendar" width="14" class="menu-icon"> {$intYear}年 {$htmlFileTotal} </a></li> eof; } }else { echo <<<eof <li class="text-center"> 还没有索引数据! <button class="btnStartScan btn btn-xs btn-primary">点我开始扫描</button> </li> eof; } ?> <li class="menu-title mt-1">目录</li> <?php if (!empty($viewData['menus'])) { //只显示第一级目录 foreach ($viewData['menus'] as $index => $item) { $htmlFileTotal = ''; if ( !empty($viewData['dirCounters']) && !empty($viewData['dirCounters'][$item['id']]) ) { $dirTotal = $viewData['dirCounters'][$item['id']]; $fileTotal = $dirTotal['image_total'] + $dirTotal['video_total'] + $dirTotal['audio_total']; $htmlFileTotal = <<<eof <small class="badge">{$fileTotal}</small> eof; } //目录图标支持加密目录 $dirIcon = "folder.svg"; if (!empty($authConfig['enable']) && $authConfig['enable'] !== 'false' && ( ( empty($authConfig['default']) && !empty($authConfig['allow'][$item['directory']]) ) || !empty($authConfig['default']) //如果所有目录都需要密码 ) ) { $dirIcon = "lock-fill.svg"; } echo <<<eof <li><a href="{$item['path']}"> <img src="/img/beauty/{$dirIcon}" alt="directories" width="17" class="menu-icon"> {$item['directory']} {$htmlFileTotal} </a></li> eof; } } ?> <li class="expand-icon hidden-xs" data-status="<?=$menu_ext_status?>"> <button class="btn btn-default btn-xs"> <img src="/img/beauty/<?=$menu_expand_icon_url?>" width="18" alt="arrow"> </button> </li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> <!-- 内容主题 --> <div class="img_main <?=$main_view_cls?>"> <?php $btnSetSnap = ''; $total = 0; if (!empty($cacheData)) { foreach($cacheData as $month => $files) { $total += Html::getDataTotal($files, $supportedExts); //翻页支持 } } $totalNum = ''; if ($total > 0) { $totalNum = <<<eof <span class="pull-right total">总数 <strong>{$total}</strong></span> eof; } if (!empty($viewData['alertWarning'])) { echo <<<eof <div class="alert alert-warning">{$viewData['alertWarning']}</div> eof; } echo <<<eof <div class="breadcrumbs text_dark"> {$totalNum} <small>当前位置:</small> <a href="/" tabindex="-1">首页</a> eof; $breadcrumbs = !empty($viewData['breadcrumbs']) ? $viewData['breadcrumbs'] : []; if (!empty($breadcrumbs)) { foreach ($breadcrumbs as $bread) { if ($bread['id'] != $selectedId) { echo <<<eof / <a href="{$bread['url']}" tabindex="-1">{$bread['name']}</a> eof; } else { echo <<<eof / <strong>{$bread['name']}</strong> eof; } } } echo <<<eof </div> eof; ?> <div class="im_mainl row"> <?php //显示图片、视频、音乐筛选链接 $arrShowTypes = array( 'all' => '所有', 'image' => '照片', 'video' => '视频', 'audio' => '音乐', ); echo '<ul class="nav nav-tabs ml-1 mb-1">'; foreach ($arrShowTypes as $key => $title) { $showLink = Html::getLinkByParams(FSC::$app['requestUrl'], array( 'show' => $key, 'page' => 1, 'month' => '', )); $activedClass = $key == $viewData['showType'] ? 'active' : ''; echo <<<eof <li role="presentation" class="{$activedClass}"><a href="{$showLink}">{$title}</a></li> eof; } echo '</ul>'; //显示月份导航菜单 if (!empty($viewData['allFiles']) && !empty($viewData['para_year']) && !empty($viewData['cacheData_keys'][$viewData['para_year']])) { echo '<ul class="nav nav-pills ml-1 mb-1">'; $activedClass = empty($viewData['para_month']) ? 'active' : ''; $monthLink = Html::getLinkByParams(FSC::$app['requestUrl'], array( 'show' => $viewData['showType'], 'page' => 1, 'month' => '' )); echo <<<eof <li role="presentation" class="{$activedClass}"><a href="{$monthLink}">所有</a></li> eof; $months = $viewData['monthsByType']; if ($viewData['showType'] == 'all') { $months = $viewData['cacheData_keys'][$viewData['para_year']]; sort($months); //排序 } foreach ($months as $month) { if (strpos($month, 'm') === false) {continue;} $intMonth = str_replace('m', '', $month); $activedClass = $month == $viewData['para_month'] ? 'active' : ''; $monthLink = Html::getLinkByParams(FSC::$app['requestUrl'], array( 'show' => $viewData['showType'], 'page' => 1, 'month' => $month, )); echo <<<eof <li role="presentation" class="{$activedClass}"><a href="{$monthLink}">{$intMonth}月</a></li> eof; } echo '</ul>'; } //显示图片、视频、音乐 $allFiles = $viewData['allFiles']; if(!empty($allFiles)) { //输出所有文件 $pageStartIndex = ($viewData['page']-1) * $viewData['pageSize']; $index = 0; foreach ($allFiles as $file) { if (empty($file['extname']) || !in_array($file['extname'], $supportedExts)) { continue; } //翻页支持 if ($index < $pageStartIndex) { $index ++; continue; }else if ($index >= $pageStartIndex + $viewData['pageSize']) { break; } //图片、视频显示文件修改日期 if (!empty($file['original_ctime'])) { //优先使用照片的拍摄日期 $title = '摄于' . date('Y-m-d H:i', $file['original_ctime']); }else { $title = Common::getDateFromString($file['filename']); //根据文件名获取拍摄日期 if (empty($title) && !empty($file['fstat']['mtime']) && !empty($file['fstat']['ctime'])) { $title = date('Y-m-d', Common::getFileCreateTime($file)); } } if (in_array($file['extname'], $imgExts)) { //缩略图 $imgUrl = urlencode($file['path']); $smallUrl = "/site/smallimg/?id={$file['id']}&url={$imgUrl}"; if (empty(FSC::$app['config']['enableSmallImage']) || FSC::$app['config']['enableSmallImage'] === 'false') { $smallUrl = $file['path']; } //大图(支持中尺寸的缩略图) $bigUrl = "/site/smallimg/?id={$file['id']}&url={$imgUrl}&size=middle"; if (empty(FSC::$app['config']['enableSmallImageForWan']) || FSC::$app['config']['enableSmallImageForWan'] === 'false') { $bigUrl = $file['path']; } //权限检查 $originUrl = $file['path']; $isAllowedToVisit = Common::isUserAllowedToFile($file['realpath']); if (!$isAllowedToVisit) { $smallUrl = '/img/beauty/lock-fill.svg'; $bigUrl = $originUrl = '/img/beauty/lazy.svg'; } echo <<<eof <div class="im_item bor_radius col-xs-6 col-sm-4 col-md-3 col-lg-2"> <a href="javascript:;" class="bor_radius" data-fancybox="gallery" data-src="{$bigUrl}" data-thumb="{$smallUrl}" data-download-src="{$originUrl}" data-download-filename="{$file['filename']}.{$file['extension']}" data-caption="{$title} - {$file['filename']}" data-pid="{$file['pid']}" title="{$title} - {$file['filename']}"> <img src="/img/beauty/lazy.svg" data-id="{$file['id']}" data-original="{$smallUrl}" class="bor_radius im_img lazy" alt="{$file['filename']}"> <div class="im_img_title"> <span class="right-bottom"> {$title} </span> </div> {$btnSetSnap} </a> </div> eof; }else if (in_array($file['extname'], $videoExts)) { //输出视频 $videoUrl = urlencode($file['path']); $linkUrl = "/site/player?id={$file['id']}&pid={$file['pid']}&url={$videoUrl}"; if ($viewData['showType'] == 'video') { $linkUrl .= "&page={$viewData['page']}&limit={$viewData['pageSize']}"; //支持按年、月查看视频时,获取更多视频以便自动播放 $linkUrl .= "&year={$viewData['para_year']}&month={$viewData['para_month']}"; } if ($file['extname'] == 'm3u8') { $linkUrl .= "&name=" . urlencode($file['filename']); } //权限检查 $linkTarget = '_blank'; $videoCover = '/img/beauty/video_snap.jpg'; $lockedAttr = ''; $isAllowedToVisit = Common::isUserAllowedToFile($file['realpath']); if (!$isAllowedToVisit) { $linkUrl = 'javascript:;'; $linkTarget = '_self'; $videoCover = '/img/beauty/lock-fill.svg'; $lockedAttr = 'data-lock="true"'; } echo <<<eof <div class="im_item bor_radius col-xs-6 col-sm-4 col-md-3 col-lg-2"> <a href="{$linkUrl}" target="{$linkTarget}" class="bor_radius" title="{$title} - {$file['filename']}"> <img src="{$videoCover}" class="bor_radius im_img video-poster" id="poster_{$file['id']}" data-video-id="{$file['id']}" data-video-url="{$file['path']}" {$lockedAttr} alt="{$file['filename']}"> <div class="im_img_title"> <span class="right-bottom"> {$title} </span> </div> <img src="/img/video-play.svg" class="playbtn hide" alt="video play button"> <span class="duration">00:00:00</span> </a> </div> eof; }else if (in_array($file['extname'], $audioExts)) { //输出音乐 $title = !empty($file['title']) ? $file['title'] : $file['filename']; $videoUrl = urlencode($file['path']); $linkUrl = "/site/audioplayer?id={$file['id']}&pid={$file['pid']}&url={$videoUrl}"; if ($viewData['showType'] == 'audio') { $linkUrl .= "&page={$viewData['page']}&limit={$viewData['pageSize']}"; //支持按年、月查看视频时,获取更多视频以便自动播放 $linkUrl .= "&year={$viewData['para_year']}&month={$viewData['para_month']}"; } $snapshot = '/img/beauty/audio_icon.jpeg'; if (!empty($file['snapshot'])) { $snapshot = $file['snapshot']; }else { //尝试找出同名的图片文件 $matchedImage = Html::searchImageByFilename($file['filename'], $allFiles, $imgExts); if (!empty($matchedImage)) { $snapshot = $matchedImage['path']; } } //权限检查 $linkTarget = '_blank'; $lockedAttr = ''; $isAllowedToVisit = Common::isUserAllowedToFile($file['realpath']); if (!$isAllowedToVisit) { $linkUrl = 'javascript:;'; $linkTarget = '_self'; $snapshot = '/img/beauty/lock-fill.svg'; $lockedAttr = 'data-lock="true"'; } echo <<<eof <div class="im_item bor_radius col-xs-6 col-sm-4 col-md-3 col-lg-2 audio-list-item"> <a href="{$linkUrl}" target="{$linkTarget}" class="bor_radius vercenter" title="{$title} - {$file['filename']}"> <img src="{$snapshot}" class="bor_radius im_img video-poster" id="poster_{$file['id']}" data-video-id="{$file['id']}" data-video-url="{$file['path']}" {$lockedAttr} alt="{$file['filename']}"> <span class="title">{$title}</span> <img src="/img/video-play.svg" class="playbtn hide" alt="video play button"> <span class="duration">00:00:00</span> </a> </div> eof; } $index++; } }else { $tipPrefix = '照片、视频'; if ($viewData['showType'] == 'image') { $tipPrefix = '照片'; }else if ($viewData['showType'] == 'video') { $tipPrefix = '视频'; }else if ($viewData['showType'] == 'audio') { $tipPrefix = '音乐'; } echo <<<eof <div class="alert alert-warning mt-1 mr-1 ml-1"> <h2>咦?没有{$tipPrefix}文件哦</h2> <p class="mt-1">人面不知何处去,桃花依旧笑春风...</p> </div> eof; } ?> </div><!--im_mainl--> </div><!--img_main--> <div class="text-center pagination-con"> <?php if ($total > $viewData['pageSize']) { $pagination = Html::getPaginationHtmlCode($viewData['page'], $viewData['pageSize'], $total); echo $pagination; } ?> </div> <div class="video_previewer"> <video class="video-js vjs-big-play-centered vjs-fluid vjs-16-9" playsinline poster="" id="pr-player"> </video> </div> <script type="text/template" id="btn_show1to1_tmp"> <button title="Toggle zoom 1 to 1" class="f-button btn-original-1v1"><svg tabindex="-1" width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3.51 3.07c5.74.02 11.48-.02 17.22.02 1.37.1 2.34 1.64 2.18 3.13 0 4.08.02 8.16 0 12.23-.1 1.54-1.47 2.64-2.79 2.46-5.61-.01-11.24.02-16.86-.01-1.36-.12-2.33-1.65-2.17-3.14 0-4.07-.02-8.16 0-12.23.1-1.36 1.22-2.48 2.42-2.46Z"></path><path d="M5.65 8.54h1.49v6.92m8.94-6.92h1.49v6.92M11.5 9.4v.02m0 5.18v0"></path></svg></button> </script>