$this->foldersTree]); } /* * 分类列表 */ public function gallery(Request $request) { $search = $request->input('search', ''); if ($search) { $search = '%' . $search . '%'; $albums = SiteAlbum::where('title', 'like', $search)->get(); $title = '搜索结果'; $folder_id = 0; $father_id = 0; if ($albums) { $albums = $albums->toArray(); } } else { $folder_id = $request->input('fid',$this->getFoldersTreeFirstId()); $father_id = $this->getFoldersTreeFatherId($folder_id); $folder = SiteAlbumFolder::find($folder_id); $albums = SiteAlbum::where('folder_id', $folder_id)->get(); $albums = $albums->toArray(); $title = $folder->title; } foreach ($albums as $key => $album) { $cover = json_decode($album['cover']); foreach ($cover as $k => $v) { if (strpos($v, 'http') === false && strpos($v, 'https') === false) { unset($cover[$k]); } } $cover = empty($cover) ? ['/static/images/noimg.jpg'] : $cover; $albums[$key]['cover'] = $cover; } return view('gallery', [ 'foldersTree' => $this->foldersTree, 'folderName'=> $title, 'folder_id' => $folder_id, 'father_id' => $father_id, 'albums' => $albums ] ); } public function detail(Request $request) { $id = $request->input('id',0); $album = SiteAlbum::find($id); $bumFolder = SiteAlbumFolder::where('id', $album->folder_id)->first(); $showTabs = []; if ($bumFolder) { $row = json_decode($bumFolder->show_tabs); foreach ($row as $key => $value) { $column = ''; $title = ''; switch ($value) { case '0': $column = 'cover'; $title = '主图'; break; case '1': $column = 'en_detail'; $title = '英文详情'; break; case '2': $column = 'cn_detail'; $title = '中文详情'; break; case '3': $column = 'video'; $title = '视频'; break; case '4': $column = 'poster'; $title = '海报'; break; case '5': $column = 'cert'; $title = '证书'; break; case '6': $column = 'pdf'; $title = 'PDF'; break; } $showTabs[$key] = ['value'=>$value,'column'=>$column, 'title'=>$title]; } } return view('gallery-detail',[ 'foldersTree' => $this->foldersTree, 'album' => $album->toArray(), 'showTabs' => $showTabs ]); } public function updateLog(Request $request) { $losgs = SiteAlbumLog::getFormattedLogs(); return view('update_log',[ 'foldersTree' => $this->foldersTree, 'logs' => $losgs ]); } /* * 下载全部 */ public function downloadAll(Request $request) { $id = $request->input('id', 0); $tab = $request->input('tab', 'cover'); $album = SiteAlbum::find($id); if ($album) { $album = $album->toArray(); if (isset($album[$tab])) { $files = json_decode($album[$tab]); $fileUrls = []; // 获取所有图片的 URL foreach ($files as $key => $value) { $fileUrl = ossUrl($value); // 获取完整的图片 URL $fileUrls[] = $fileUrl; // 将图片 URL 存入数组 } // 创建一个临时 ZIP 文件 $zipFileName = 'album_' . $id . '_' . $tab . '.zip'; $zipPath = storage_path('app/' . $zipFileName); $zip = new ZipArchive; if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) { foreach ($fileUrls as $fileUrl) { $fileContent = file_get_contents($fileUrl); // 下载图片内容 $fileName = basename($fileUrl); // 获取文件名 $zip->addFromString($fileName, $fileContent); // 将图片添加到 ZIP 文件中 } $zip->close(); // 提供 ZIP 文件下载 return response()->download($zipPath, $zipFileName)->deleteFileAfterSend(true); } else { return response()->json(['error' => '无法创建 ZIP 文件'], 500); } } else { return response()->json(['error' => '未找到指定的 Tab 数据'], 404); } } else { return response()->json(['error' => '未找到相册'], 404); } } /* * 更新日志 */ public function nextLog(Request $request) { $id = $request->input('id', 0); $log = SiteAlbumLog::getNextLogEntry($id); if ($log) { return response()->json(['status' => 'success', 'data' => $log]); } else { return response()->json(['status' => 'error', 'data' => []]); } } //获取分类树父ID private function getFoldersTreeFatherId($folder_id) { foreach ($this->foldersTree as $key => $value) { $father_id = $value['id']; if ($folder_id == $value['id']) { return $father_id; } foreach ($value['children'] as $k => $v) { if ($folder_id == $v['id']) { return $father_id; } foreach ($v['children'] as $kk => $vv) { if ($folder_id == $vv['id']) { return $father_id; } } } } return 0; } //返回分类树第一个无子节点的ID private function getFoldersTreeFirstId() { foreach ($this->foldersTree as $key => $value) { if (isset($value['children'])) { foreach ($value['children'] as $k => $v) { return $v['id']; } } else { return $value['id']; } } return 0; } }