コード例 #1
0
ファイル: NewProducts.php プロジェクト: black-lamp/blcms-shop
 public function run()
 {
     $this->cart = \Yii::$app->cart;
     $products = Product::find()->orderBy(['id' => SORT_DESC])->limit($this->num)->all();
     $showOwners = $this->cart->saveToDataBase;
     return $this->render('new-products', ['products' => $products, 'showOwners' => $showOwners]);
 }
コード例 #2
0
 /**
  * Lists Product models.
  *
  * DataProvider sends created by user product models for users which have 'viewProductList' permission
  * and for users which have 'viewCompleteProductList' permission it sends all product models.
  *
  * @return mixed
  * @throws ForbiddenHttpException
  */
 public function actionIndex()
 {
     $searchModel = new SearchProduct();
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
     $notModeratedProductsCount = count(Product::find()->where(['status' => Product::STATUS_ON_MODERATION])->all());
     return $this->render('index', ['notModeratedProductsCount' => $notModeratedProductsCount, 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'languages' => Language::findAll(['active' => true])]);
 }
コード例 #3
0
 public function up()
 {
     $this->addColumn('shop_product', 'status', $this->integer()->defaultValue(1));
     $products = Product::find()->all();
     foreach ($products as $product) {
         $product->status = 10;
         $product->save();
     }
 }
コード例 #4
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = \Yii::$app->user->can('viewCompleteProductList') ? Product::find()->joinWith('translations')->orderBy(['category_id' => SORT_ASC, 'position' => SORT_ASC]) : Product::find()->joinWith('translations')->where(['owner' => \Yii::$app->user->id])->orderBy(['category_id' => SORT_ASC, 'position' => SORT_ASC]);
     $this->load($params);
     $query->andFilterWhere(['shop_product.category_id' => $this->category])->andFilterWhere(['like', 'shop_product_translation.title', $this->title])->andFilterWhere(['shop_product.status' => $this->status]);
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pagesize' => 10]]);
     if (!$this->validate()) {
         return $dataProvider;
     }
     return $dataProvider;
 }
コード例 #5
0
 private function findRecommendedProducts($id)
 {
     if (!empty($id)) {
         $product = Product::findOne($id);
         $categoryId = $product->category_id;
         $previous = Product::find()->where(['<', 'id', $id])->andWhere(['category_id' => $categoryId])->orderBy(['id' => SORT_DESC])->limit('2')->all();
         $next = Product::find()->where(['>', 'id', $id])->andWhere(['category_id' => $categoryId])->orderBy(['id' => SORT_ASC])->limit('2')->all();
         $products = ArrayHelper::merge($previous, $next);
         return $products;
     }
     return false;
 }
コード例 #6
0
 /**
  * Creates data provider instance with search query applied
  * @param array $params
  * @return ActiveDataProvider
  * @throws Exception if search is not validated
  */
 public function search($params, $descendantCategories)
 {
     $this->load($params, '');
     $query = Product::find();
     if (\Yii::$app->controller->module->showChildCategoriesProducts) {
         if (!empty($params['id'])) {
             $query->where(['in', 'category_id', ArrayHelper::map($descendantCategories, 'id', 'id')]);
         }
     } else {
         if (!empty($params['id'])) {
             $query->where(['category_id' => $params['id']]);
         }
     }
     $filterTypes = FilterType::find()->all();
     foreach ($filterTypes as $filterType) {
         $className = $filterType->class_name;
         /*Getting get-method name*/
         $getMethodName = explode("\\", $className);
         $getMethodName = lcfirst(end($getMethodName));
         $query->joinWith($getMethodName);
         $tableName = $className::tableName();
         $column = $filterType->column;
         $query->andFilterWhere([$tableName . '.' . 'id' => $this->{$column}]);
     }
     if (isset($params['sort'])) {
         switch ($params['sort']) {
             case self::SORT_CHEAP:
                 $query->orderBy(['price' => SORT_ASC]);
                 break;
             case self::SORT_EXPENSIVE:
                 $query->orderBy(['price' => SORT_DESC]);
                 break;
             case self::SORT_OLD:
                 $query->orderBy(['creation_time' => SORT_ASC]);
                 break;
             case self::SORT_NEW:
                 $query->orderBy(['creation_time' => SORT_DESC]);
                 break;
         }
     } else {
         $query->orderBy(['category_id' => SORT_ASC, 'position' => SORT_ASC]);
     }
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 10]]);
     if ($this->validate()) {
         return $dataProvider;
     } else {
         throw new Exception();
     }
 }
コード例 #7
0
 public function safeUp()
 {
     $this->addColumn('shop_product', 'position', 'INT(5) AFTER id');
     $categories = Category::find()->all();
     foreach ($categories as $category) {
         $products = Product::find()->where(['category_id' => $category->id])->all();
         for ($i = 0; $i < count($products); $i++) {
             $this->execute('UPDATE shop_product SET position=' . ($i + 1) . ' WHERE id=' . $products[$i]->id . ' AND category_id=' . $category->id);
         }
     }
     $this->addColumn('shop_category', 'position', $this->integer());
     for ($i = 0; $i < count($categories); $i++) {
         $this->execute('UPDATE shop_category SET position=' . ($i + 1) . ' WHERE id=' . $categories[$i]->id);
     }
 }
コード例 #8
0
ファイル: UrlRule.php プロジェクト: black-lamp/blcms-shop
 private function findProductBySeoUrl($seoUrl, $categoryId, $options = [])
 {
     $productsSeoData = SeoData::find()->where(['entity_name' => ProductTranslation::className(), 'seo_url' => $seoUrl])->all();
     if ($productsSeoData) {
         foreach ($productsSeoData as $productSeoData) {
             if ($product = Product::find()->joinWith('translations translation')->where(array_merge(['translation.id' => $productSeoData->entity_id, 'category_id' => $categoryId, 'translation.language_id' => $this->currentLanguage->id], $options))->one()) {
                 return $product;
             }
         }
     }
     return null;
 }