liquidRenderer = $liquidRenderer; } /** * Display a listing of the pages. * * @return \Illuminate\Http\Response */ public function list() { abort('404'); $cacheKey = "page_list_dist_" . getDistId() . "_page_" . request()->get('page', 1); $pages = SitePage::paginate(10)->where('dist_id', getDistId())->where('status', '1'); // 每页显示10个页面 return $this->liquidRenderer->render('pages_list', ['pages' => $pages],$cacheKey); } /** * Display the specified page. * * @param string $slug * @return \Illuminate\Http\Response */ public function detail($slug) { $recent_pages=null; $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('slug', $slug)->orWhere('id', $slug)->first(); // 如果没有找到且是数字,通过 id 获取页面 if (!$page) { if (is_numeric($slug)) { $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('id', $slug)->firstOrFail(); } else{ abort(403); } } if($page->page_type==0) { $previousPage = SitePage::where('dist_id', getDistId()) ->where('status', '1') ->where('id', '<', $page->id) ->where('page_type',0) ->orderBy('id', 'desc') ->first(); $nextPage = SitePage::where('dist_id', getDistId()) ->where('status', '1') ->where('id', '>', $page->id) ->where('page_type',0) ->orderBy('id', 'asc') ->first(); // 创建分页数据结构 $paginator = [ 'previous_page' => $previousPage ? true : false, // 是否有上一页 'previous_page_url' => $previousPage ? "/pages/" . ($previousPage->slug ?: $previousPage->id) : null, // 上一页的 URL 'previous_page_title' => $previousPage ? $previousPage->title : null, // 上一页的标题 'next_page' => $nextPage ? true : false, // 是否有下一页 'next_page_url' => $nextPage ? "/pages/" . ($nextPage->slug ?: $nextPage->id) : null, // 下一页的 URL 'next_page_title' => $nextPage ? $nextPage->title : null, // 下一页的标题 ]; //Recent post //获取最近的文章 数量有限制,当前文章不要放进去 $recent_pages_limit=10; $recent_pages = SitePage::where('dist_id', getDistId()) ->where('status', '1') ->where('id', '!=', $page->id) ->where('page_type',0) ->orderBy('id', 'desc') ->limit($recent_pages_limit) ->get(); } else{ $paginator = []; } // 构建导航数据 开始 $breadcrumbs = [ [ 'url' => '/', 'name' => 'Home', ] ]; if ($page->tags->isNotEmpty()) { $tag = $page->tags->first(); $breadcrumbs[] = [ 'url' => $tag->slug ? "/collections/{$tag->slug}" : "/collections/{$tag->id}", 'name' => $tag->name, ]; } $breadcrumbs[] = [ 'url' => '#', 'name' => $page->title, ]; // 构建导航数据 结束 //能过 seo_keywords 查找相有相同 seo_keywords的产品, seo_keywords 可能是多个,用逗号分隔 $seo_keywords = $page->seo_keywords; $seo_keywords_array = explode(',', $seo_keywords); if(!empty($seo_keywords_array)) { $seo_keywords_array = array_map('trim', $seo_keywords_array); $seo_keywords_array = array_unique($seo_keywords_array); // 构建查询条件 $query = DistProduct::where('dist_id', getDistId()) ->where('enabled', 1) ->where('status', 2); // 为每个关键词添加查询条件 $query->where(function($q) use ($seo_keywords_array) { foreach ($seo_keywords_array as $keyword) { $q->orWhere(function($subQ) use ($keyword) { $subQ->where('seo_keywords', 'LIKE', $keyword) ->orWhere('seo_keywords', 'LIKE', $keyword . ',%') ->orWhere('seo_keywords', 'LIKE', '%,' . $keyword) ->orWhere('seo_keywords', 'LIKE', '%,' . $keyword . ',%'); }); } }); // 获取相关产品 $relatedProducts = $query->with('images') ->orderBy('order', 'desc') ->orderBy('id', 'desc') ->limit(4) ->get(); } $template_file ='pages_detail.liquid'; if(!empty($page->template_file )) { //查找当前外观是否存在这文件,找不到就用默认的 $dist=app('dist'); $appearanceId = $dist->appearance->id; if (DistAppearanceTemplate::hasFileName($page->template_file,getDistId(),$appearanceId) == true) { $template_file=$page->template_file; } } return $this->liquidRenderer->render($template_file, [ 'page' => $page, 'recent_pages' => $recent_pages, 'breadcrumbs' => $breadcrumbs, 'paginator' => $paginator, 'csrf_token' => csrf_token(), 'relatedProducts' => $relatedProducts, ]); } }