languageIds)) { $this->languageIds = Language::find() ->select( [ 'url', 'id', ] ) ->where([ 'status' => true ]) ->asArray() ->indexBy('id') ->column(); } if (count($this->languageIds) < 2) { return; } foreach ($this->languageIds as $languageId => $url) { if (Language::getCurrent()->id !== $languageId) { $this->links[ $languageId ] = Html::a( $url, Url::to( [ \Yii::$app->requestedRoute ] + \Yii::$app->request->get( ) + [ 'language_id' => $languageId ], true ) ); } else { $this->links[ $languageId ] = $url; } } } public function run() { return $this->render('_langLink'); } protected function mapAliases(array $aliases): array { $map = []; $result = []; $currentLanguageId = Language::getCurrent()->id; foreach ($aliases as $alias) { if ($alias[ 'language_id' ] === $currentLanguageId) { $map[ $alias[ 'route' ] ][ 0 ] = $alias[ 'value' ]; } else { $map[ $alias[ 'route' ] ][ 1 ] = $alias[ 'value' ]; } } foreach ($map as $route => $alias) { if (!empty($alias[ 0 ]) && !empty($alias[ 1 ])) { $result[ $alias[ 0 ] ] = $alias[ 1 ]; } else { \Yii::getLogger() ->log("Missing alias for route $route.", Logger::LEVEL_ERROR); } } return $result; } protected function replaceParams(array $map): array { $params = \Yii::$app->request->get(); if (isset($params[ 'filter' ])) { $filter = explode('_', $params[ 'filter' ]); } if (array_key_exists($params[ 'category' ], $map)) { $params[ 'category' ] = $map[ $params[ 'category' ] ]; } if (!empty($filter)) { foreach ($filter as $index => $item) { if (array_key_exists($item, $map)) { $filter[ $index ] = $map[ $item ]; } } $params[ 'filter' ] = implode('_', $filter); } return $params; } }