为什么一个类别的产品在另一个类别中显示laravel

时间:2018-11-19 08:16:16

标签: laravel product categories

我有一个书店网站,我在特殊类别中插入产品,但是产品在不同类别中显示,也就是该类别。我不知道为什么。 我使用laravel 5.4,我的控制器和刀片在这里。你可以看到他们。 在控制器中定义了许多变量,但是$ products在刀片中使用,这很重要。请帮助我。:) 先谢谢了 这些是我的代码 控制器

 function index(Request $request)
{

    header('Cache-Control: no-cache, no-store, must-revalidate');

    $options = ($request->get('options')) ? array_filter($request->get('options')) : [];
    $variants = ($request->get('variants')) ? array_filter($request->get('variants')) : [];
    $collections_fillter =($request->get('collections_fillter')) ? array_filter($request->get('collections_fillter')) : [];
    $data['collections_fillter']=$collections_fillter;

    $category_id = ($request->get('cat')) ? $request->get('cat') : null;
    $cats = ($category_id) ? Productcat::find($category_id)->parents($category_id) : null;

    $search_cats = ($category_id) ? Productcat::find($category_id)->childs($category_id)->pluck('id')->toArray() : null;

    if (isset($category_id))
        array_push($search_cats, intval($category_id));

    $perPage = ($request->get('perPage')) ? $request->get('perPage') : 12;

    $soon = ($request->get('soon')) ? $request->get('soon') : 0;

    $sort = ($request->get('sort')) ? $request->get('sort') : 'position';
    $sortCondition = ($request->get('sortCondition')) ? $request->get('sortCondition') : 'ASC';

    if ($sort == 'title') {
        $results = Product::join('product_translations as t', function ($join) {
            $join->on('products.id', '=', 't.product_id')
                ->where('t.locale', '=', 'fa');
        })
            ->groupBy('products.id')
            ->orderBy('t.title', $sortCondition);
    } else {
        $results = Product::select('products.*')
            ->where('products.display', '1')
            ->groupBy('products.id')
            ->orderBy($sort, $sortCondition);
    }

    if ($soon) {
        $results->whereStatus('coming_soon');
    }

    if ($cats) {
        $results
            ->join('products_productscat', 'products_productscat.product_id', '=', 'products.id')
            ->whereIn('products_productscat.productcat_id', $search_cats);
    }

    $tmp_res = $results;
    $data['max'] = $tmp_res->get()->max('list_price');
    $data['min'] = $tmp_res->get()->min('list_price');
    $data['step'] = 10;


    if ($s = $request->get('s')) {
        $results->whereTranslationLike('title', "%$s%");
    }

    if ($price = $request->get('price')) {
        $results->where('products.list_price', '<=', explode(';', $price)[1])->where('products.list_price', '>=', explode(';', $price)[0]);
    }

    if ($variants) {
        $j = 0;
        foreach ($variants as $variant) {
            $j++;
            $alias = "v$j";
            $results
                ->join("product_featurevariant as $alias", "$alias.product_id", '=', 'products.id')
                ->where("$alias.variant_id", $variant);
        }
    }

    if ($options) {

        $product_oc_items = OptionVariant::whereIn('id', $options)->get()->groupBy('option_id');
        $i = 0;
        foreach ($product_oc_items as $product_oc_item) {
            $list = $product_oc_item->pluck('id');
            if ($i == 0)
                $option_result = DB::table('product_oc_items as t0t')
                    ->whereIn('t0t.optionvariant_id', $list);
            if ($i != 0) {
                $alias = 't' . $i . 't';
                $option_result
                    ->join('product_oc_items as ' . $alias, $alias . '.combination_id', '=', 't0t.combination_id', 'left')
                    ->whereIn($alias . '.optionvariant_id', $list);
            }

            $i++;
        }
        $product_oc = ProductOc::whereIn('id', $option_result->pluck('t0t.combination_id'));
        $results->whereIn('products.id', $product_oc->pluck('product_id'));
    }

    if($collections_fillter){
        $results->whereHas('collection',function($query) use($collections_fillter){
            $query->whereIn('id',$collections_fillter);
        });
    }

    $products = $results->select('products.*')->get();


    $totalItems = count($products);
    $totalPages = ceil($totalItems / $perPage);

    $page = Input::get('page', 1);

    if ($page > $totalPages or $page < 1) {
        $page = 1;
    }

    $offset = ($page * $perPage) - $perPage;

    $products = array_slice($products->toArray(), $offset, $perPage);
    $paginator = new Paginator($products, $totalItems, $perPage, $page, [
        'path' => $request->url(),
        'query' => $request->query(),
    ]);



    $data['Products'] = $products;
    $data['paginator'] = $paginator;

    $data['cats'] = $cats;
    $data['cat'] = $category_id;
    $data['options'] = $options;
    $data['variants'] = $variants;
    $data['search_cats'] = $search_cats;
    $data['collections'] = Collection::all();
    $data['url_vars'] = [
        'cat' => $category_id,
        'options' => $options,
        'variants' => $variants,
        'sort' => $sort,
        'sortCondition' => $sortCondition,
        'perPage' => $perPage,
    ];

    if ($request->ajax()) {
        return Response::json(View::make('front.products.list', $data)->render());
    } else {
        return view('front.products.index', $data);
    }
}

视图

@if(count($Products))
    <?php $Products = collect($Products); ?>
    @foreach($Products->chunk(4) as $items)
        <div class="row">
        @foreach($items as $item)
                @include('front.products.product_box',['Product' => \App\Product::find($item['id'])])
            @endforeach
        </div>
    @endforeach
@else
    <div class="noresult"><div class="inner rtl">موردی یافت نشد!</div></div>
@endif

0 个答案:

没有答案