<?php /** * 常用的处理HTML的方法 */ Class Html { //获取js、css文件的修改时间作版本号 public static function getStaticFileVersion($filename, $type = 'css') { $ver = 0; $filepath = ''; switch ($type) { case 'css': $filepath = __DIR__ . '/../www/css/' . $filename; break; default: $filepath = __DIR__ . '/../www/js/' . $filename; break; } if (!empty($filepath) && file_exists($filepath)) { $fp = fopen($filepath, 'r'); $fstat = fstat($fp); fclose($fp); $ver = $fstat['mtime']; } return $ver; } public static function mb_substr($string, $start, $length) { if (mb_strlen($string, 'utf-8') <= $length) {return $string;} return mb_substr($string, $start, $length, 'utf-8') . "..."; } //默认支持所有网站 public static function getShareVideosPlatform($url) { $platform = '其它'; if (preg_match("/douyin\.com/i", $url)) { $platform = '抖音'; }else if (preg_match("/kuaishou\.com/i", $url)) { $platform = '快手'; }else if (preg_match("/ixigua\.com/i", $url)) { $platform = '西瓜视频'; }else if (preg_match("/b23\.tv/i", $url) || preg_match("/bilibili\.com/i", $url)) { $platform = 'B站'; } return $platform; } //根据ctime进行排序,默认按时间先后倒序排列 public static function sortFilesByCreateTime($files, $way = 'desc') { $ctimes = array(); foreach($files as $id => $item) { $ctimes[$id] = $item['fstat']['ctime']; } if ($way == 'desc') { arsort($ctimes, SORT_NUMERIC); }else { asort($ctimes, SORT_NUMERIC); } $sorted = array(); foreach($ctimes as $id => $ctime) { array_push($sorted, $files[$id]); } return $sorted; } //生成GA统计代码 public static function getGACode() { if (!empty(FSC::$app['config']['debug'])) {return '';} $msid = !empty(FSC::$app['config']['GA_MEASUREMENT_ID']) ? FSC::$app['config']['GA_MEASUREMENT_ID'] : ''; if (empty($msid)) {return '';} $adwords_id = !empty(FSC::$app['config']['GAD_MEASUREMENT_ID']) ? FSC::$app['config']['GAD_MEASUREMENT_ID'] : ''; $gacode = <<<eof <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id={$msid}"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '{$msid}'); eof; if (!empty($adwords_id)) { $gacode .= <<<eof gtag('config', '{$adwords_id}'); eof; } $gacode .= <<<eof </script> eof; return $gacode; } //根据收藏和分类,获取单个收藏视频的所在分类 public static function getFavsTags($filename, $tags) { $fileTags = array(); foreach($tags as $tag_id => $item) { if (in_array($filename, $item['files'])) { array_push($fileTags, $item['name']); } } return $fileTags; } //获取只包含分类名的数组 public static function getTagNames($tags) { $tmp_arr = array(); foreach ($tags as $id => $tag) { array_push($tmp_arr, $tag['name']); } return $tmp_arr; } //获取用户图片的cdn地址 public static function getCDNImageUrl($localImgUrl) { if (!empty(FSC::$app['config']['debug'])) {return $localImgUrl;} $cdn = FSC::$app['config']['img_cdn_budget_url']; if (empty($cdn)) {return $localImgUrl;} return "{$cdn}{$localImgUrl}"; } //根据文件类型,获取数组中符合条件文件总数 public static function getDataTotal($files, $fileTypes) { $total = 0; foreach ($files as $file) { if (empty($file['extension']) || !in_array($file['extension'], $fileTypes)) { continue; } $total ++; } return $total; } //参数:page、limit public static function getPaginationLink($url, $page, $pageSize = 24) { $arr = explode('?', $url); if (count($arr) == 1) { //不含问号 return "{$url}?page={$page}&limit={$pageSize}"; } $paginationParams = array('page', 'limit'); $newParms = array(); $baseUrl = $arr[0]; $queryString = $arr[1]; $params = explode('&', $queryString); if (count($params) > 0) { foreach ($params as $item) { list($name, $val) = explode('=', $item); if (!in_array($name, $paginationParams)) { array_push($newParms, $item); } } } return $baseUrl . "?page={$page}&limit={$pageSize}" . (!empty($newParms) ? '&'.implode('&', $newParms) : ''); } //输出翻页组件,page从1开始 public static function getPaginationHtmlCode($page, $limit, $total) { $currentUrl = FSC::$app['requestUrl']; $maxPage = ceil($total / $limit); //上一页 $previousLink = <<<eof <li class="page-item disabled"> <span class="page-link">上<span class="hidden-xs">一</span>页</span> </li> eof; if ($page > 1) { $url = self::getPaginationLink($currentUrl, $page-1, $limit); $previousLink = <<<eof <li class="page-item"> <a class="page-link" href="{$url}">上<span class="hidden-xs">一</span>页</a> </li> eof; } //下一页 $nextLink = <<<eof <li class="page-item disabled"> <span class="page-link">下<span class="hidden-xs">一</span>页</span> </li> eof; if ($page < $maxPage) { $url = self::getPaginationLink($currentUrl, $page+1, $limit); $nextLink = <<<eof <li class="page-item"> <a class="page-link" href="{$url}">下<span class="hidden-xs">一</span>页</a> </li> eof; } //包括当前页一共显示 10 页 $otherLinks = ''; $startPage = floor(($page-1) / 10)*10 + 1; $endPage = $startPage + 9 < $maxPage ? $startPage + 9 : $maxPage; for ($i = $startPage; $i <= $endPage; $i ++) { $url = self::getPaginationLink($currentUrl, $i, $limit); if ($i != $page) { $otherLinks .= <<<eof <li class="page-item"><a class="page-link" href="{$url}">{$i}</a></li> eof; }else { $otherLinks .= <<<eof <li class="page-item active" aria-current="page"> <span class="page-link">{$i}</span> </li> eof; } } $html = <<<eof <nav aria-label="翻页"> <ul class="pagination"> {$previousLink} {$otherLinks} {$nextLink} </ul> </nav> eof; return $html; } }