<?php // app/Libraries/CommonHelper.php namespace App\Libraries; use Dcat\Admin\Admin; class CommonHelper { /* * $images 格式:['image.jpg','image2.jpg'] * $ossSource 1:本地 2:相册 * 返回显示的HTML显示图片 */ public static function displayImage($images,$boxSize=60,$imgSize=1024,$ossSource=1) { if (empty($images) || empty($images[0])) { $html = ""; } else { // 默认显示 100x100 的图片 $thumbnailImages = array_map(function ($imageUrl) use ($boxSize,$ossSource) { if ($ossSource == 1) { $imageUrl= CommonHelper::ossUrl($imageUrl); } else { $imageUrl= CommonHelper::albumUrl($imageUrl); } $extension = pathinfo($imageUrl, PATHINFO_EXTENSION); if ($extension == 'svg') { return $imageUrl; } else { return $imageUrl . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff"; } }, $images); // 生成点击查看大图的链接 $largeImages = array_map(function ($imageUrl) use ($imgSize,$ossSource) { if ($ossSource == 1) { $imageUrl= CommonHelper::ossUrl($imageUrl); } else { $imageUrl= CommonHelper::albumUrl($imageUrl); } $extension = pathinfo($imageUrl, PATHINFO_EXTENSION); if ($extension == 'svg') { return $imageUrl; } else { return $imageUrl . "?x-oss-process=image/resize,m_lfit,w_{$imgSize},h_{$imgSize}"; } }, $images); // 显示缩略图,并添加点击查看大图的功能 $html = ''; foreach ($thumbnailImages as $index => $thumbnailUrl) { $largeUrl = $largeImages[$index]; $html .= "<a href='$largeUrl' target='_blank'><img src='$thumbnailUrl' style='height:{$boxSize}px; margin-right:5px; border: 1px solid #ececf1;'></a>"; } return $html; } return $html; } /* * 返回oss的url */ public static function ossUrl($imageUrl) { if (strpos($imageUrl, 'http:') === 0 || strpos($imageUrl, 'https:') === 0) { return $imageUrl; } if (env('OSS_DOMAIN')) { return "http://".env('OSS_DOMAIN').'/'.$imageUrl; } return "http://".env('OSS_BUCKET').'.'.env('OSS_ENDPOINT').'/'.$imageUrl; } /* * 图库图片URL */ public static function albumUrl($imageUrl) { if (strpos($imageUrl, 'http:') === 0 || strpos($imageUrl, 'https:') === 0) { return $imageUrl; } return env('ALBUM_OSS_URL').'/'.$imageUrl; } /* * 显示视频 */ public static function displayVideo($items,$videoCover,$videoSrc,$boxSize=150,$ossSource=1) { $html = ''; if (is_array($items)) { foreach ($items as $item) { $item = (array) $item; $cover = $item[$videoCover]; $src = $item[$videoSrc]; if ($ossSource == 1) { $videoUrl = CommonHelper::ossUrl($src); } else { $videoUrl = CommonHelper::albumUrl($src); } if ($ossSource == 1) { $thumbnailUrl = CommonHelper::ossUrl($cover) . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff"; } else { $thumbnailUrl = CommonHelper::albumUrl($cover) . "?x-oss-process=image/resize,m_pad,h_{$boxSize},w_{$boxSize},color_ffffff"; } $html .= '<div class="video-container"><a href="#" class="playVideo" videoUrl="'.$videoUrl.'")"><img src="'.$thumbnailUrl.'" alt="Video Thumbnail"><div class="play-button"></div></a></div>'; } $html .= '<div class="video-popup" id="videoPopup"><span class="close-btn">×</span> <iframe src="" frameborder="0" allowfullscreen></iframe></div>'; } //视频播放CSS Admin::style(" .video-container { position: relative; display: inline-block; } .video-container img { height: 200px; margin-right: 5px; border: 1px solid #ececf1; } .play-button { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 50px; height: 50px; background-color: rgba(0, 0, 0, 0.7); border-radius: 50%; cursor: pointer; } .play-button::after { content: '▶'; font-size: 30px; color: white; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .video-popup { display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: white; padding: 25px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); z-index: 1000; } .video-popup iframe { width: 800px; height: 450px; } .close-btn { position: absolute; top: 0px; right: 5px; font-size: 24px; color: #000; cursor: pointer; } .close-btn:hover { color: #f00; } "); Admin::script(" $('.playVideo').on('click', function(e) { e.preventDefault(); // 阻止默认跳转行为 var videoUrl = $(this).attr('videoUrl'); // 获取 videoUrl 属性 $('#videoPopup').css('display', 'block'); $('#videoPopup iframe').attr('src', videoUrl); // 设置 iframe 的 src }); // 点击关闭按钮关闭视频 $('.close-btn').on('click', function() { $('#videoPopup').css('display', 'none'); $('#videoPopup iframe').attr('src', ''); // 停止播放视频 }); "); return $html; // 当没有数组数据时 } /* * 替换新增与编辑的url,在后边加上指定的参数 (适用于弹出框的新增与编辑) * $addButton = '.tree-quick-create'; * $editButton = '.tree-quick-edit'; * $paramsUrl = 'location=0'; */ public static function replaceAddEditerUrl($addButton,$editButton,$paramsUrl) { Admin::script( <<<JS var button = $('{$addButton}'); var currentUrl = button.attr('data-url'); if (currentUrl.indexOf('?') === -1) { button.attr('data-url', currentUrl + '?{$paramsUrl}'); } else { button.attr('data-url', currentUrl + '&{$paramsUrl}'); } $('{$editButton}').each(function() { var currentUrl = $(this).attr('data-url'); if (currentUrl.indexOf('?') === -1) { $(this).attr('data-url', currentUrl + '?{$paramsUrl}'); } else { // 如果已经有查询参数,添加 &id=123 $(this).attr('data-url', currentUrl + '&{$paramsUrl}'); } }); JS ); } public static function seoReplace($titleName = 'title',$modelName = 'pages') { if ($titleName) { Admin::script( <<<JS $('input[name="{$titleName}"]').on('input', function() { // 将 title 的值赋给 seo_title $('input[name="seo_title"]').val($(this).val()); }); JS ); } //ajax 生成slug if ($modelName) { Admin::script( <<<JS $('input[name="{$titleName}"]').on('blur', function() { //通过ajax请求修改slug title = $(this).val(); $.ajax({ url: '/dist/api/generate-slug', type: 'GET', data: { model:'{$modelName}', title: title, }, success: function(response) { $('input[name="slug"]').val(response.slug); } }); }); JS ); } } public static function slug_fix($slug) { if ($slug == '') { return ''; } else { $slug = preg_replace('/\s+/', '-', $slug); $slug = strtolower($slug); return $slug; } } }