PHP 8.2.30
Preview: PageController.php Size: 6.22 KB
/home/byroehnu/cnggold.com.ng/app/Http/Controllers/Frontend/PageController.php

<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use App\Models\Brand;
use App\Models\Category;
use App\Models\Page;
use App\Models\Post;
use App\Models\ProductCategory;
use App\Models\Setting;
use App\Models\Tag;
use App\Repositories\Frontend\BlogRepository;
use App\Repositories\Frontend\PageRepository;
use App\Repositories\Frontend\ProductRepository;
use Artesaos\SEOTools\Facades\OpenGraph;
use Artesaos\SEOTools\Facades\SEOMeta;
use Artesaos\SEOTools\Facades\TwitterCard;
use Illuminate\Http\Request;
use Inertia\Inertia;

class PageController extends Controller
{
    public function home(PageRepository $repository)
    {
        $homePageId = Setting::pull('default_home_page');
        if (! $homePageId || ! $page = Page::find($homePageId)) {
            abort(404);
        }

        $data = $repository->getPageData($page);
        $seo = $this->setSeoData($page);
        $data['default_home_page'] = $homePageId;
        $data = array_merge($data, $seo);
        return Inertia::render('Page/Page', $data);
    }

    public function show($slug, PageRepository $pageRepository, BlogRepository $blogRepository, ProductRepository $productRepository)
    {
        $page = Page::where('slug', $slug)->with('content')->first();
        if (! $page) {
            abort(404);
        }

        return match ($page->rendered_page) {
            'basic' => $this->renderedBasic($pageRepository, $page),
            'blogs' => $this->renderedBlogs(request(), $blogRepository, $page),
            'shop' => $this->renderedShop(request(), $productRepository, $page),
            'cart' => $this->renderedCart($page),
            default => abort(404),
        };
    }

    public function renderedBasic(PageRepository $repository, Page $page)
    {
        $data = $repository->getPageData($page);
        $data['page'] = $page;
        $seo = $this->setSeoData($page);
        $data = array_merge($data, $seo);
        return Inertia::render('Page/Page', $data);
    }

    public function renderedBlogs(Request $request, BlogRepository $repository, Page $page)
    {
        $data = [
            'categories' => Category::with('content')->withCount('posts')->get(),
            'tags' => Tag::whereHas('posts')->pluck('name'),
            'slug' => $page->slug,
            'filter' => [
                'category' => $request->input('filter.category', ''),
                'tag' => $request->input('filter.tag', ''),
                'author' => $request->input('filter.author', ''),
            ],
            'recent_post' => Post::where('status', '1')->with('content')->latest()->take(4)->get(),
            'search' => $request->input('search', ''),
            'is_show_blog_details_sidebar' => Setting::pull('is_show_blog_details_sidebar'),
        ];

        $data['posts'] = $repository->paginateSearchResult($data['search'], $data['filter']);

        $seo = $this->setSeoData($page);
        $data = array_merge($data, $seo);

        return Inertia::render('Blogs/Index', $data);
    }

    public function renderedShop(Request $request, ProductRepository $repository, Page $page)
    {
        if (Setting::pull("is_enabled_ecommerce") === "0") {
            abort(404);
        }

        $data['search'] = $request->search ?? '';
        $data['filter']['category'] = $request->filter['category'] ?? '';
        $data['filter']['brand'] = $request->filter['brand'] ?? '';
        $data['filter']['tag'] = $request->filter['tag'] ?? '';
        $data['filter']['type'] = $request->filter['type'] ?? '';
        $data['max_price'] = $repository->getMaxProductPrice();
        $data['filter']['min_price'] = $request->filter['min_price'] ?? 0;
        $data['filter']['max_price'] = $request->filter['max_price'] ?? $data['max_price'];
        $data['filter']['sort'] = $request->filter['sort'] ?? 'latest';
        $data['tags'] = Tag::whereHas('products')->pluck('name');
        $data['categories'] = ProductCategory::withCount('products')->with('content')->get();
        $data['brands'] = Brand::withCount('products')->with('content')->get();
        $data['products'] = $repository->paginateSearchResult($data['search'], $data['filter']);
        $data['slug'] = $page->slug;

        $seo = $this->setSeoData($page);
        $data = array_merge($data, $seo);

        // return $data;
        return Inertia::render('Shop/Index', $data);
    }

    public function renderedCart(Page $page)
    {
        if (Setting::pull("is_enabled_ecommerce") === "0") {
            abort(404);
        }
        $data = $this->setSeoData($page);
        $data['slug'] = $page->slug;
        $data['shop_slug'] = Page::where('rendered_page', 'shop')->firstOrFail()->slug;
        return Inertia::render('Cart/Index', $data);
    }

    private function setSeoData(Page $page): array
    {
        $metaTitle = $page->content->meta_title ?? $page->content->title;
        $metaDescription = $page->content->meta_description;
        $metaTags = $page->content->meta_tags ?? '';
        $metaImage = asset($page->meta_image);
        $siteName = Setting::pull('site_name');
        $currentUrl = request()->url();
        $tagline = Setting::pull('tagline');

        SEOMeta::setTitle($metaTitle);
        SEOMeta::setDescription($metaDescription);
        SEOMeta::setCanonical($currentUrl);
        SEOMeta::addMeta('robots', 'index, follow');
        SEOMeta::addMeta('viewport', 'width=device-width, initial-scale=1');
        SEOMeta::addKeyword(explode(',', $metaTags));

        OpenGraph::setTitle($metaTitle);
        OpenGraph::setDescription($metaDescription);
        OpenGraph::setUrl($currentUrl);
        OpenGraph::setSiteName($siteName);
        OpenGraph::addProperty('type', 'website');
        OpenGraph::addImage($metaImage);

        TwitterCard::setTitle($metaTitle);
        TwitterCard::setSite('@tuedioncom');
        TwitterCard::setDescription($metaDescription);
        TwitterCard::setType('summary_large_image');
        TwitterCard::setImage($metaImage);

        return [
            'title' => $page->content->title,
            'meta_title' => $metaTitle,
            'meta_tags' => $metaTags,
            'meta_description' => $metaDescription,
            'meta_image' => $metaImage,
            'site_name' => $siteName,
            'tagline' => $tagline,
        ];
    }
}

Directory Contents

Dirs: 0 × Files: 19

Name Size Perms Modified Actions
2.65 KB lrw-r--r-- 2025-06-13 11:19:53
Edit Download
2.26 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
3.24 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
551 B lrw-r--r-- 2025-04-19 04:22:18
Edit Download
1.72 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
6.22 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
4.00 KB lrw-r--r-- 2025-05-15 11:24:11
Edit Download
2.63 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
3.47 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
2.36 KB lrw-r--r-- 2025-07-19 07:29:54
Edit Download
1.63 KB lrw-r--r-- 2025-04-15 10:33:57
Edit Download
2.00 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
1.44 KB lrw-r--r-- 2025-04-19 04:22:18
Edit Download
2.13 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download
408 B lrw-r--r-- 2025-04-19 04:22:18
Edit Download
532 B lrw-r--r-- 2025-04-08 04:12:56
Edit Download
2.09 KB lrw-r--r-- 2025-04-30 16:51:31
Edit Download
1.91 KB lrw-r--r-- 2025-04-13 07:02:31
Edit Download
2.96 KB lrw-r--r-- 2025-05-08 11:48:26
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).