/** * Search products * @param $data StoreCategory|string * @param string $view */ public function doSearch($data, $view) { $this->query = new StoreProduct(null); $this->query->attachBehaviors($this->query->behaviors()); $this->query->applyAttributes($this->activeAttributes)->active(); if ($data instanceof StoreCategory) { $this->query->applyCategories($this->model); } else { $cr = new CDbCriteria(); $cr->with = array('translate' => array('together' => true)); $cr->addSearchCondition('translate.name', $data); $this->query->getDbCriteria()->mergeWith($cr); } // Filter by manufacturer if (Yii::app()->request->getQuery('manufacturer')) { $manufacturers = explode(';', Yii::app()->request->getParam('manufacturer', '')); $this->query->applyManufacturers($manufacturers); } // Create clone of the current query to use later to get min and max prices. $this->currentQuery = clone $this->query->getDbCriteria(); // Filter products by price range if we have min_price or max_price in request $this->applyPricesFilter(); $per_page = $this->allowedPageLimit[0]; if (isset($_GET['per_page']) && in_array((int) $_GET['per_page'], $this->allowedPageLimit)) { $per_page = (int) $_GET['per_page']; } $this->provider = new CActiveDataProvider($this->query, array('id' => false, 'pagination' => array('pageSize' => $per_page))); $this->provider->sort = StoreProduct::getCSort(); $this->render($view, array('provider' => $this->provider, 'itemView' => isset($_GET['view']) && $_GET['view'] === 'wide' ? '_product_wide' : '_product')); }