getTree(); // with('categoryName')-> } public static function getBrands() { return Brand::find(); // ->with('brandName') } /* * Return custom filter-option link * @var array $filter * @var array $options * @return array */ public static function getFilterForOption($filter, $key, $value, $remove = false) { $result = $filter; if (is_array($value)) { foreach($value as $value_key => $value_items) { if (!is_array($value_items)) { $value_items = [$value_items]; } foreach($value_items as $value_item) { if ($remove && isset($result[$key]) && ($i = array_search($value_item, $result[$key][$value_key])) !== FALSE) { unset($result[$key][$value_key][$i]); if (empty($result[$key][$value_key])) { unset($result[$key][$value_key]); } } else { if (!isset($result[$key][$value_key]) || array_search($value_item, $result[$key][$value_key]) === FALSE) { $result[$key][$value_key][] = $value_item; } } } } } else { if ($remove && isset($result[$key]) && ($i = array_search($value, $result[$key])) !== FALSE) { unset($result[$key][$i]); if (empty($result[$key])) { unset($result[$key]); } } else { if (!isset($result[$key]) || array_search($value, $result[$key]) === FALSE) { $result[$key][] = $value; } } } return $result; } public static function addLastProsucts($product_id) { $last_products = self::getLastProducts(); if (!in_array($product_id, $last_products)) { $last_products[] = intval($product_id); if (count($last_products) > 16) { array_shift($last_products); } Yii::$app->session->set('last_products', $last_products); } } public static function getLastProducts($as_object = false) { $last_products = Yii::$app->session->get('last_products', []); if ($as_object) { $last_products = Product::find()->joinWith(['variant'])->where([Product::tableName() .'.product_id' => $last_products])->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->all(); } return array_reverse($last_products); } public static function getSpecialProducts($type, $count, $sort = null) { switch($type) { case 'top': $data = ['is_top' => true]; break; case 'new': $data = ['is_new' => true]; break; case 'promo': $data = ['akciya' => true]; break; } return Product::find()->joinWith('variants')->where($data)->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->limit($count)/*->orderBy($sort)*/->all(); } public static function getSimilarProducts($product, $count = 10) { if (!is_object($product)) { $product = Product::findOne($product); } if (!$product->properties) { return []; } $query = Product::find() ->select('product.product_id') ->innerJoinWith('variant') ->where(['!=', 'product_variant.stock', 0]); // $query->andWhere(['>=', 'product_variant.price', $product->enabledVariant->price * 0.7]); // $query->andWhere(['<=', 'product_variant.price', $product->enabledVariant->price * 1.3]); foreach($product->properties as $group) { $where = []; foreach ($group->_options as $option) { $where[] = $option->tax_option_id; } if (!$where) { continue; } $query->innerJoin('product_option to'. $group->tax_group_id, 'to'. $group->tax_group_id .'.product_id = product.product_id'); $query->andWhere(['to'. $group->tax_group_id .'.option_id' => $where]); } $query->andWhere(['!=', 'product.product_id', $product->product_id]); $query->groupBy('product.product_id'); $query->limit($count); $products = $query->asArray()->all(); foreach ($products as &$_product) { $_product = Product::findOne($_product['product_id']); } return $products; } }