MainController.php 3.85 KB
<?php

namespace App\Http\Controllers;

use App\Models\Banner;
use App\Models\Category;
use App\Models\Good;
use App\Models\News;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Session\Storage;

class MainController extends Controller
{
    // Главная страница
    public function index(Request $request) {
        $banners = Banner::query()->orderBy('id')->get();
        $category = Category::query()->where('parent_id', '>', '0')->orderBy('id')->get();

        if (isset($request->filter)) {
            switch($request->filter) {
                case 'news':$goods = Good::query()->where('new', '=', '1')->orderBy('id')->paginate(8);
                    break;
                case 'stock':$goods = Good::query()->where('stock_count', '>', '0')->orderBy('id')->paginate(8);
                    break;
                case 'demo':$goods = Good::query()->where('demo', '=', '1')->orderBy('id')->paginate(8);
                    break;
                case 'way':$goods = Good::query()->where('way', '=', '1')->orderBy('id')->paginate(8);
                    break;
            }
        } else {
            $goods = Good::query()->where('new', '=', '1')->orderBy('id')->paginate(8);
        }

        if ($request->ajax()) {
            return view('index_catalog', compact('goods'));
        }

        $news = News::query()->where('status', '=', 'новость')->orderByDesc('id')->paginate(3);
        return view('index',
            compact('banners', 'category', 'goods', 'news'));
    }

    public function about_company() {
        return view('company');
    }

    public function catalog(Request $request) {
        $items = Category::all();
        $goods = Good::query();
        $articles = News::query()->where('status', '=', 'статья')->paginate(10);
        $reviews = News::query()->where('status', '=', 'отзыв')->paginate(3);

        if (!empty($request->filter)) {
            $filter = json_decode($request->filter);
            if (is_array($filter))
               if (count($filter) > 0)
                   $goods = $goods->whereIn('manufacturer', $filter);
        }

        if ($request->sort == 'count') {
            $goods = $goods->orderByDesc('stock_count')->orderByDesc('id');
        }

        if ($request->sort == 'price') {
            $goods = $goods->orderBy('price')->orderByDesc('id');
        }

        $goods = $goods->paginate(6);

        if ($request->ajax()) {
            return view('catalog_ajax', compact('goods'));
        }

        $mf = Good::select('manufacturer')->distinct()->pluck('manufacturer');
        return view('catalog', compact('items', 'goods', 'mf', 'articles', 'reviews'));
    }

    public function catalog_detail(Category $category, Request $request) {
        $items = Category::all();
        $title = $category->name;
        $goods = Good::query()->where('category_id', '=', $category->id);

        if (!empty($request->filter)) {
            $filter = json_decode($request->filter);
            if (is_array($filter))
                if (count($filter) > 0)
                    $goods = $goods->whereIn('manufacturer', $filter);
        }

        if ($request->sort == 'count') {
            $goods = $goods->orderByDesc('stock_count')->orderByDesc('id');
        }

        if ($request->sort == 'price') {
            $goods = $goods->orderBy('price')->orderByDesc('id');
        }

        $goods = $goods->paginate(6);

        if ($request->ajax()) {
            return view('catalog_ajax', compact('goods'));
        }

        $mf = Good::select('manufacturer')->distinct()->where('category_id', '=', $category->id)->pluck('manufacturer');
        return view('catalog_detail', compact('items', 'category', 'goods', 'title', 'mf'));
    }

    public function good(Good $good) {
        return view('good');
    }

    public function simple_good() {
        return view('simple_good');
    }
}