ProductsController.php 4.61 KB
<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use yii\web\HttpException;
use yii\data\Pagination;
use app\models\Catalog;
use app\models\Products;
use app\models\Mod;
use app\models\ProductsFasovka;
use app\models\ProductsType;
use app\models\ProductsBrends;

class ProductsController extends Controller
{

    public function actionIndex()
    {
            $modelProducts = new Products;
            
            $modelProducts->load($_GET);
            
            
            if(!$catalog = Catalog::find()->where(['translit'=>$_GET['translit']])->with('parent')->one())
                    throw new HttpException(404, 'Данной странице не существует!');
            
            
                $query = Products::find()
                                 ->where(
                                     'catalog_id=:catalog_id',
                                     [':catalog_id' => $catalog->id]
                                 )->with(['catalog']) ;
                if(!empty($modelProducts->fasovka)){
                   $query->innerJoinWith(['fasovka'])->andWhere([ProductsFasovka::tableName().'.fasovka_id'=>$modelProducts->fasovka]); 
                }
                if(!empty($modelProducts->type)){
                   $query->innerJoinWith(['type'])->andWhere([ProductsType::tableName().'.type_id'=>$modelProducts->type]); 
                }
                if(!empty($modelProducts->brends)){
                   $query->innerJoinWith(['brends'])->andWhere([ProductsBrends::tableName().'.brend_id'=>$modelProducts->brends]); 
                }                
                $query->groupBy(['id']);
                $query->innerJoinWith(['minCost']);
                if(!empty($_GET['order'])){
                    switch($_GET['order']){
                        case 1 : $query->orderBy('mod.cost ASC'); break;
                        case 2 : $query->orderBy('mod.cost DESC'); break;
                        case 3 : $query->orderBy('name ASC'); break;
                    }
                }else $query->orderBy('new DESC, top DESC, akciya DESC, name ASC');
                $countQuery = clone $query;
                $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize'=>18]);
                $pages->forcePageParam = false;
                $pages->pageSizeParam = false;
                $products = $query->offset($pages->offset)
                    ->limit($pages->limit)
                    ->orderBy(
                        [
                            'out_of_stock' => SORT_ASC,
                        ]
                    )
                    ->all();

            return $this->render('index', [
                'modelProducts'=>$modelProducts,    
                'catalog'=>$catalog,
                'pages'=>$pages,
                'products'=>$products,
            ]);
    }
    
    public function actionSearch(){
                $query = Products::find()->innerJoinWith(['catalog','mods']) ;
                if (!empty($_GET['search_str'])) {
                    $query->andWhere(['like', 'products.name', $_GET['search_str']]);
                    $query->orWhere(['like', 'catalog.name', $_GET['search_str']]);
                    $query->orWhere(['like', 'products.art', $_GET['search_str']]);
                    $query->orWhere(['like', 'mod.art', $_GET['search_str']]);
                }
                $query->groupBy(['id']);
                $countQuery = clone $query;
                $pages = new Pagination(['totalCount' => $countQuery->count(), 'pageSize'=>18]);
                $pages->forcePageParam = false;
                $pages->pageSizeParam = false;
                $products = $query->offset($pages->offset)
                    ->limit($pages->limit)
                    ->all();

            return $this->render('search', [
                'pages'=>$pages,
                'products'=>$products,
            ]);        
    }
    
    public function actionShow(){

        if(!$catalog = Catalog::find()->where(['translit'=>$_GET['translit_rubric']])->with('parent')->one())
                    throw new HttpException(404, 'Данной странице не существует!');
          
        
        if(!$product = Products::find()->where(['id'=>$_GET['id']])->one())
                    throw new HttpException(404, 'Данной странице не существует!');        
           

        return $this->render('show', [
                'catalog'=>$catalog,
                'product'=>$product,
            ]);
    }
    
    
  
    
}