type) { case 'positions_home_page': return $this->render('carousel/home_page', ['positions' => $this->getPositionsCarousel()]); case 'positions_partner_home_page': return $this->render('carousel/home_partner_page', ['articles' => $this->getPartnerPositionsCarousel($this->partner_id)]); case 'virtual_walk_home_page': return $this->render('carousel/virtual_walk_home_page', ['positions' => $this->getPositionsCarousel()]); case 'positions_inner_page': return $this->render('carousel/inner_page', ['positions' => $this->getPositionsCarousel()]); case 'more_articles': return $this->render('carousel/more_articles', ['positions' => $this->getPositionsCarousel()]); case 'partner_more_articles': return $this->render('carousel/partner_more_articles', ['positions' => $this->getPartnerMoreArticle($this->partner_id), 'partner_id' => $this->partner_id]); case 'expositions_home_page': return $this->render('carousel/expositions_home_page', ['positions' => $this->getSelectedExpositions(true)]); case 'expositions_partner_home_page': return $this->render('carousel/expositions_partner_home_page', ['expositions' => $this->getSelectedByPartnerExpositions()]); case 'positions_inner_page_collections': return $this->render('carousel/inner_page_collections', ['positions' => $this->getSelectedCollections()]); case 'positions_inner_page_expositions': return $this->render('carousel/inner_page_expositions', ['positions' => $this->getSelectedExpositions()]); case 'article_detail_gallery': return $this->render('carousel/article_detail_gallery', ['article' => $this->article]); case 'object_detail_gallery': return $this->render('carousel/object_detail_gallery', ['article' => $this->article]); case 'exposition_detail_gallery': return $this->render('carousel/exposition_detail_gallery', ['article' => $this->article]); case 'article_detail_gallery_full_width': return $this->render('carousel/article_detail_gallery_full_width', ['article' => $this->article]); case 'collection_home_page': return $this->render('carousel/collection_home_page', ['positions' => $this->getLastCollections()]); case 'collection_partner_home_page': return $this->render('carousel/collection_home_page', ['positions' => $this->getLastPartnerCollections()]); } } public function getPositionsCarousel() { if ($this->id) { $positions = Positions::find() ->innerJoinWith('articleModel') ->where(['group_id' => $this->id]) ->andWhere(['IS NOT', 'position_article_key', NULL]) ->andWhere(['is_active' => 1]) ->orderBy(['order_index' => SORT_ASC]) ->all(); switch ($this->type) { case 'positions_home_page': case 'virtual_walk_home_page': return $this->reorder($positions); case 'positions_inner_page': case 'expositions_home_page': case 'more_articles': case 'partner_more_articles': return $positions; } } return []; } public function getPartnerPositionsCarousel($partner_id) { if ($this->id) { $data = Articles::find()->where(['partner_id' => $partner_id, 'partner_page_selected' => 1]) ->limit(7) ->all(); return $this->reorder($data); } return []; } public function getPartnerMoreArticle($partner_id) { return Articles::find() ->where(['partner_id' => $partner_id, 'partner_page_selected' => 1]) ->all(); } public function getSelectedCollections() { return Collections::find()->where([ 'published' => 1, 'active' => 1, 'deleted' => 0, 'is_selected' => 1 ])->all(); } public function getSelectedExpositions($last = null) { if (!$last) { return Expositions::find()->where([ 'is_active' => 1, 'is_selected' => 1 ])->all(); } else { return Expositions::find()->where([ 'is_active' => 1 ])->orderBy(['publish_date' => SORT_DESC])->limit(15)->all(); } } public function getSelectedByPartnerExpositions() { return Expositions::find()->where([ 'on_partner_page' => 1, 'partner_id' => $this->partner_id ])->orderBy(['publish_date' => SORT_DESC])->limit(15)->all(); } public function getLastCollections() { return Collections::find()->where([ 'published' => 1 ])->orderBy(['added_on' => SORT_DESC])->all(); } public function getLastPartnerCollections() { return Collections::find()->where([ 'published' => 1, 'partner_id' => $this->partner_id ])->orderBy(['added_on' => SORT_DESC])->all(); } public function reorder($positions) { $reorderList = []; $center = ceil(sizeof($positions) / 2); for ($i = $center; $i < sizeof($positions); $i++) { $reorderList[] = $positions[$i]; } for ($i = 0; $i < $center; $i++) { $reorderList[] = $positions[$i]; } return $reorderList; } }