with('categoryName')->getTree(); } 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(); } }