GoodsController.php 3.98 KB
<?php
/**
 * Created by PhpStorm.
 * User: vitaliy
 * Date: 08.11.15
 * Time: 22:06
 */

namespace frontend\controllers;

use common\components\CustomVarDamp;
use common\models\DetailsCrosses;
use common\models\GoodsView;
use common\models\GoodsViewSearch;
use Yii;
use yii\web\Controller;
use common\models\Details;

class GoodsController extends Controller
{
    public $layout = '/internal';

    public function actionIndex($name, $id)
    {

        $arr_name = explode('_', $name);
        $brand = $arr_name[0];
        $article = $arr_name[1];


        $params = Yii::$app->request->getQueryParams();

        // получим параметры сортировки из гет запроса
        $sort_params_or = $this->getSortParams($params, 'or');
        $sort_params_cross = $this->getSortParams($params, 'cross');

        $arr_values = ['name' => $article,
            'brand' => $brand];
        $arr = ['GoodsViewSearch' => $arr_values];

        if(empty( Yii::$app->user->identity )){
            $margin_id = 1;
        }else{
            $margin_id = Yii::$app->user->identity->margin_id;
        }

//        $arr = ['GoodsViewSearch' => ['name' => '0092S40090',
//            'brand' => 'BOSCH']];

        if (empty(Yii::$app->user->identity)) {
            $margin_id = 1;
        } else {
            $margin_id = Yii::$app->user->identity->margin_id;
        }

        Yii::$app->session->setFlash('price_currency_id', 1);
        Yii::$app->session->setFlash('price_margin_id', $margin_id);

        $searchModel = new GoodsViewSearch();
        $goods_provider = $searchModel->search($arr, $sort_params_or);

        $crosses_provider = $searchModel->searchCrosses($arr, $sort_params_cross);

        // для заголовка таблицы (карточка товара)
        $detailsModel = GoodsView::findOne($arr_values);

        return $this->render('index', [
            'goods_data_provider' => $goods_provider,
            'crosses_data_provider' => $crosses_provider,
            'detailsModel' => $detailsModel,
        ]);
    }

    /**
     * @param $params - массив параметров для сортировки
     * @param $prefix - строка, перфикс таблицы сортировки (_or / _cross )
     * @return массив - итоговый массив с параемтрами для сортировки который подставляется в запрос
     */
    protected function getSortParams($params, $prefix)
    {
        $default_sort_params = ['price' => SORT_DESC];
        $sort_params = [];

        if ( empty( $params['sort'] ) ) {
            // нет параметров - сортируем по цене по убыванию
            $sort_params = $default_sort_params;

        } else {
            // разбираем парметры
            $sort_arr = explode('_', $params['sort']);
            if ($sort_arr[1] === $prefix) {
                if ($sort_arr[0][0] === '-') {
                    // если первый символ "-", то по убыванию
                    $sort_arr[0] = str_replace('-', '', $sort_arr[0]);
                    $sort_params[$sort_arr[0]] = SORT_ASC;
                } else {
                    $sort_params[$sort_arr[0]] = SORT_DESC;
                }
            }
            if ( empty( $sort_params ) ) {
                // если так и ненашли подходящих параметров, значит сортируем другую таблицу
                // а для этой вытащим из кеша или дефолтная сортировка
                if ( Yii::$app->cache->exists( "sort_{$prefix}" ) ) {
                    $sort_params = Yii::$app->cache->get( "sort_{$prefix}" );
                } else {
                    $sort_params = $default_sort_params;
                }
            } else {
                Yii::$app->cache->set( "sort_{$prefix}", $sort_params, 300 );
            }
        }

        return $sort_params;
    }

}