Beispiel #1
0
 /**
  * @param StoreCategory $category
  * @return Attribute[]
  */
 public function getForCategory(StoreCategory $category)
 {
     $criteria = new CDbCriteria(['condition' => 't.is_filter = 1 AND t.type != :type', 'params' => [':type' => Attribute::TYPE_TEXT], 'join' => 'LEFT JOIN {{store_type_attribute}} ON t.id = {{store_type_attribute}}.attribute_id
                    LEFT JOIN {{store_type}} ON {{store_type_attribute}}.type_id = {{store_type}}.id
                    LEFT JOIN {{store_product}} AS products ON products.type_id = {{store_type}}.id', 'distinct' => true]);
     $categories = $category->getChildsArray();
     if (!empty($categories)) {
         $categoriesCriteria = new CDbCriteria(['condition' => 'products.category_id = :category', 'params' => [':category' => $category->id]]);
         $categoriesCriteria->addInCondition('products.category_id', $categories, 'OR');
         $criteria->mergeWith($categoriesCriteria, 'AND');
     } else {
         $criteria->addCondition('products.category_id = :category');
         $criteria->params[':category'] = $category->id;
     }
     return Attribute::model()->findAll($criteria);
 }
Beispiel #2
0
 /**
  * @param StoreCategory $category
  * @param bool $withChild
  * @param null $limit
  * @return CActiveDataProvider
  */
 public function getListForCategory(StoreCategory $category, $withChild = true, $limit = null)
 {
     $categories = [];
     if (true === $withChild) {
         $categories = $category->getChildsArray();
     }
     $categories[] = $category->id;
     $criteria = new CDbCriteria(['scopes' => ['published']]);
     $builder = new CDbCommandBuilder(Yii::app()->getDb()->getSchema());
     $criteria->addInCondition('t.category_id', array_unique($categories));
     $criteria->addCondition(sprintf('t.id IN (SELECT product_id FROM {{store_product_category}} WHERE %s)', $builder->createInCondition('{{store_product_category}}', 'category_id', $categories)), 'OR');
     $pagination = ['pageSize' => (int) Yii::app()->getModule('store')->itemsPerPage, 'pageVar' => 'page'];
     if ($limit) {
         $pagination = false;
         $criteria->limit = (int) $limit;
     }
     return new CActiveDataProvider(Product::model(), ['criteria' => $criteria, 'pagination' => $pagination, 'sort' => ['sortVar' => 'sort', 'defaultOrder' => 't.position']]);
 }
Beispiel #3
0
 /**
  * @param StoreCategory $category
  * @param integer $limit
  * @return CActiveDataProvider
  */
 public function getListForCategory(StoreCategory $category, $limit = null)
 {
     $categories = $category->getChildsArray();
     $categories[] = $category->id;
     $criteria = new CDbCriteria();
     $criteria->select = 't.*';
     $criteria->with = ['categoryRelation' => ['together' => true]];
     $criteria->addInCondition('categoryRelation.category_id', $categories);
     $criteria->addInCondition('t.category_id', $categories, 'OR');
     $criteria->group = 't.id';
     $criteria->scopes = ['published'];
     if ($limit) {
         $criteria->limit = $limit;
     }
     return new CActiveDataProvider(Product::model(), ['criteria' => $criteria, 'pagination' => ['pageSize' => (int) Yii::app()->getModule('store')->itemsPerPage, 'pageVar' => 'page'], 'sort' => ['sortVar' => 'sort', 'defaultOrder' => 't.position']]);
 }