123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use App\Services\LiquidRenderer;
- use App\Models\DistVideo ;
- use App\Models\DistVideoCategory ;
- class VideoController extends Controller
- {
- protected $liquidRenderer;
- public function __construct(LiquidRenderer $liquidRenderer)
- {
- $this->liquidRenderer = $liquidRenderer;
- }
- /**
- * Display a listing of the videos.
- *
- * @return \Illuminate\Http\Response
- */
- public function index()
- {
- $videos = DistVideo::paginate(10)->where('dist_id', getDistId()); // 每页显示10个视频
- return $this->liquidRenderer->render('videos.index', ['videos' => $videos]);
- }
- public function category($slug)
- {
- // 获取分类信息
- $category = DistVideoCategory::where(function ($query) use ($slug) {
- $query->where('id', $slug)
- ->orWhere('slug', $slug);
- })
- ->where('dist_id', getDistId())
- ->firstOrFail();
- // 获取分类下的所有产品,并按 is_pinned 排序,然后进行分页
- $videos = DistVideo::where('category_id', $category->id)
- ->where('dist_id', getDistId())
- ->where('enabled', 1)
- ->orderBy('order', 'desc')
- ->orderBy('id', 'desc')
- ->paginate(12);
- // 创建分页数据结构
- $paginator = [
- 'previous_page' => $videos->previousPageUrl() ? true : false, // 是否有上一页
- 'previous_page_url' => $videos->previousPageUrl(), // 上一页的 URL
- 'next_page' => $videos->nextPageUrl() ? true : false, // 是否有下一页
- 'next_page_url' => $videos->nextPageUrl(), // 下一页的 URL
- 'current_page' => $videos->currentPage(), // 当前页
- 'total_pages' => $videos->lastPage(), // 总页数
- 'pages' => range(1, $videos->lastPage()), // 页码数组
- 'page_url' => array_combine(
- range(1, $videos->lastPage()),
- array_map(fn($page) => $videos->url($page), range(1, $videos->lastPage()))
- ), // 每页的 URL
- ];
- // 构建导航数据 开始
- $breadcrumbs = [
- [
- 'url' => '/',
- 'name' => 'Home',
- ]
- ];
- $breadcrumbs[] = [
- 'url' => '#',
- 'name' => 'Video',
- ];
- $breadcrumbs[] = [
- 'url' => '#',
- 'name' => $category->name,
- ];
- // 构建缓存键
- $cacheKey = "video_category_{$category->id}_page_{$videos->currentPage()}";
- // 渲染模板并传递数据
- return $this->liquidRenderer->render('videos_categories.liquid', [
- 'category' => $category, // 分类名称
- 'videos' => $videos, // 分类下的产品
- 'paginator' => $paginator, // 分页信息
- 'breadcrumbs' => $breadcrumbs,
- ], $cacheKey);
- }
- public function detail($slug)
- {
- // 获取视频信息,并确保 dist_id 符合 getDistId() 的要求
- $video = DistVideo::where('dist_id', getDistId())
- ->where(function ($query) use ($slug) {
- $query->where('slug', $slug)
- ->orWhere('id', $slug);
- })
- ->firstOrFail();
- // 构建导航数据 开始
- $breadcrumbs = [
- [
- 'url' => '/',
- 'name' => 'Home',
- ]
- ];
- $category=$video->distVideoCategory;
- $breadcrumbs[] = [
- 'url' => '#',
- 'name' => $category->name,
- ];
- $breadcrumbs[] = [
- 'url' => '#',
- 'name' => $video->title,
- ];
- // Get 4 related videos from the same category
- $relatedVideos = DistVideo::where('dist_id', getDistId())
- ->where('category_id', $video->category_id)
- ->where('id', '!=', $video->id)
- ->where('enabled', 1)
- ->inRandomOrder()
- ->limit(4)
- ->get();
- return $this->liquidRenderer->render('videos_detail.liquid',
- [
- 'video' => $video,
- 'relatedVideos' => $relatedVideos,
- 'breadcrumbs' => $breadcrumbs,
- ]);
- }
- }
|