From 9a8401855a933793eb011a3938d3da033d7df9f6 Mon Sep 17 00:00:00 2001 From: Yarik Date: Wed, 3 May 2017 11:39:45 +0300 Subject: [PATCH] Language Link --- backend/views/layouts/menu_items.php | 5 +++++ frontend/views/layouts/main.php | 6 ++++++ frontend/views/product/view.php | 66 +++++++++++++++++++++++++++++++++++++----------------------------- frontend/web/css/style.css | 5 +++++ frontend/widgets/LangLink.php | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ frontend/widgets/views/_langLink.php | 8 ++++++++ 6 files changed, 193 insertions(+), 29 deletions(-) create mode 100644 frontend/widgets/LangLink.php create mode 100644 frontend/widgets/views/_langLink.php diff --git a/backend/views/layouts/menu_items.php b/backend/views/layouts/menu_items.php index 22e8677..f91fad9 100644 --- a/backend/views/layouts/menu_items.php +++ b/backend/views/layouts/menu_items.php @@ -75,6 +75,11 @@ 'icon' => 'file-text', ], [ + 'label' => \Yii::t('catalog', 'Brands'), + 'url' => [ 'brand/index' ], + 'icon' => 'file-text', + ], + [ 'label' => \Yii::t('catalog', 'Products'), 'url' => [ 'product/index' ], 'icon' => 'gift', diff --git a/frontend/views/layouts/main.php b/frontend/views/layouts/main.php index 25cfb9b..cdd686b 100755 --- a/frontend/views/layouts/main.php +++ b/frontend/views/layouts/main.php @@ -15,6 +15,7 @@ use common\models\SearchForm; use common\models\Settings; use frontend\assets\AppAsset; + use frontend\widgets\LangLink; use yii\base\Model; use yii\bootstrap\ActiveForm; use yii\bootstrap\Html; @@ -127,6 +128,11 @@ ?>
+ diff --git a/frontend/web/css/style.css b/frontend/web/css/style.css index 01312be..f8d8cb1 100644 --- a/frontend/web/css/style.css +++ b/frontend/web/css/style.css @@ -4524,4 +4524,9 @@ a.list-group-item.active > .badge, background-size: 70%; background-position: center; background-repeat: no-repeat; +} + +.inline-block.lang-link { + font-size: 18px; + padding-right: 20px; } \ No newline at end of file diff --git a/frontend/widgets/LangLink.php b/frontend/widgets/LangLink.php new file mode 100644 index 0000000..3115aca --- /dev/null +++ b/frontend/widgets/LangLink.php @@ -0,0 +1,132 @@ +languageIds)) { + $this->languageIds = Language::find() + ->select( + [ + 'url', + 'id', + ] + ) + ->where([ 'status' => true ]) + ->asArray() + ->indexBy('id') + ->column(); + } + foreach ($this->languageIds as $languageId => $url) { + if (Language::getCurrent()->id !== $languageId) { + if (\Yii::$app->requestedRoute == 'category/view') { + $aliasValues = [ \Yii::$app->request->get('category') ]; + $filter = \Yii::$app->request->get('filter'); + if (!empty($filter)) { + $aliasValues = array_merge($aliasValues, explode('_', $filter)); + } + if (!empty($aliasValues)) { + $aliases = Alias::find() + ->where( + [ + 'route' => Alias::find() + ->select('route') + ->where([ 'value' => $aliasValues ]), + ] + ) + ->andWhere( + [ + 'language_id' => [ + $languageId, + Language::getCurrent()->id, + ], + ] + ) + ->asArray() + ->all(); + $map = $this->mapAliases($aliases); + $params = $this->replaceParams($map); + $this->links[ $languageId ] = Html::a( + $url, + Url::to( + [ \Yii::$app->requestedRoute ] + $params + [ 'language_id' => $languageId ], + true + ) + ); + } else { + $this->links[ $languageId ] = $url; + } + } else { + $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(); + $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; + } + } \ No newline at end of file diff --git a/frontend/widgets/views/_langLink.php b/frontend/widgets/views/_langLink.php new file mode 100644 index 0000000..316d319 --- /dev/null +++ b/frontend/widgets/views/_langLink.php @@ -0,0 +1,8 @@ +context; + echo implode(' / ', $widget->links); +?> -- libgit2 0.21.4