Commit 9a8401855a933793eb011a3938d3da033d7df9f6
1 parent
d1d94101
Language Link
Showing
6 changed files
with
193 additions
and
29 deletions
Show diff stats
backend/views/layouts/menu_items.php
| @@ -75,6 +75,11 @@ | @@ -75,6 +75,11 @@ | ||
| 75 | 'icon' => 'file-text', | 75 | 'icon' => 'file-text', |
| 76 | ], | 76 | ], |
| 77 | [ | 77 | [ |
| 78 | + 'label' => \Yii::t('catalog', 'Brands'), | ||
| 79 | + 'url' => [ 'brand/index' ], | ||
| 80 | + 'icon' => 'file-text', | ||
| 81 | + ], | ||
| 82 | + [ | ||
| 78 | 'label' => \Yii::t('catalog', 'Products'), | 83 | 'label' => \Yii::t('catalog', 'Products'), |
| 79 | 'url' => [ 'product/index' ], | 84 | 'url' => [ 'product/index' ], |
| 80 | 'icon' => 'gift', | 85 | 'icon' => 'gift', |
frontend/views/layouts/main.php
| @@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
| 15 | use common\models\SearchForm; | 15 | use common\models\SearchForm; |
| 16 | use common\models\Settings; | 16 | use common\models\Settings; |
| 17 | use frontend\assets\AppAsset; | 17 | use frontend\assets\AppAsset; |
| 18 | + use frontend\widgets\LangLink; | ||
| 18 | use yii\base\Model; | 19 | use yii\base\Model; |
| 19 | use yii\bootstrap\ActiveForm; | 20 | use yii\bootstrap\ActiveForm; |
| 20 | use yii\bootstrap\Html; | 21 | use yii\bootstrap\Html; |
| @@ -127,6 +128,11 @@ | @@ -127,6 +128,11 @@ | ||
| 127 | ?> | 128 | ?> |
| 128 | </div> | 129 | </div> |
| 129 | <div class="col-xs-6 right-top-nav"> | 130 | <div class="col-xs-6 right-top-nav"> |
| 131 | + <div class="inline-block lang-link"> | ||
| 132 | + <?php | ||
| 133 | + echo LangLink::widget(); | ||
| 134 | + ?> | ||
| 135 | + </div> | ||
| 130 | <div class="inline-block"> | 136 | <div class="inline-block"> |
| 131 | <span class="top-phone"><i class="fa fa-phone"></i> <?php echo $settings->phone; ?></span> | 137 | <span class="top-phone"><i class="fa fa-phone"></i> <?php echo $settings->phone; ?></span> |
| 132 | <a href="#" class="link-underline_dott"> | 138 | <a href="#" class="link-underline_dott"> |
frontend/views/product/view.php
| @@ -194,36 +194,44 @@ | @@ -194,36 +194,44 @@ | ||
| 194 | 194 | ||
| 195 | <div class="box" id="details"> | 195 | <div class="box" id="details"> |
| 196 | <h2><?php echo \Yii::t('app', 'Характеристики'); ?></h2> | 196 | <h2><?php echo \Yii::t('app', 'Характеристики'); ?></h2> |
| 197 | - <table class="table"> | ||
| 198 | - <tbody> | ||
| 199 | - <?php | ||
| 200 | - foreach ($groups as $group) { | ||
| 201 | - foreach ($group as $optionGroup) { | ||
| 202 | - /** | ||
| 203 | - * @var OptionGroup $optionGroup | ||
| 204 | - */ | ||
| 205 | - echo Html::tag( | ||
| 206 | - 'tr', | ||
| 207 | - Html::tag( | ||
| 208 | - 'td', | ||
| 209 | - $optionGroup->lang->title, | ||
| 210 | - [ 'class' => 'td-title' ] | ||
| 211 | - ) . Html::tag( | ||
| 212 | - 'td', | ||
| 213 | - implode( | ||
| 214 | - ', ', | ||
| 215 | - ArrayHelper::getColumn( | ||
| 216 | - $optionGroup->currentOptions, | ||
| 217 | - 'lang.value' | 197 | + <?php |
| 198 | + if (!empty($groups)) { | ||
| 199 | + ?> | ||
| 200 | + <table class="table"> | ||
| 201 | + <tbody> | ||
| 202 | + <?php | ||
| 203 | + foreach ($groups as $group) { | ||
| 204 | + foreach ($group as $optionGroup) { | ||
| 205 | + /** | ||
| 206 | + * @var OptionGroup $optionGroup | ||
| 207 | + */ | ||
| 208 | + echo Html::tag( | ||
| 209 | + 'tr', | ||
| 210 | + Html::tag( | ||
| 211 | + 'td', | ||
| 212 | + $optionGroup->lang->title, | ||
| 213 | + [ 'class' => 'td-title' ] | ||
| 214 | + ) . Html::tag( | ||
| 215 | + 'td', | ||
| 216 | + implode( | ||
| 217 | + ', ', | ||
| 218 | + ArrayHelper::getColumn( | ||
| 219 | + $optionGroup->currentOptions, | ||
| 220 | + 'lang.value' | ||
| 221 | + ) | ||
| 222 | + ) | ||
| 218 | ) | 223 | ) |
| 219 | - ) | ||
| 220 | - ) | ||
| 221 | - ); | ||
| 222 | - } | ||
| 223 | - } | ||
| 224 | - ?> | ||
| 225 | - </tbody> | ||
| 226 | - </table> | 224 | + ); |
| 225 | + } | ||
| 226 | + } | ||
| 227 | + ?> | ||
| 228 | + </tbody> | ||
| 229 | + </table> | ||
| 230 | + <?php | ||
| 231 | + } else { | ||
| 232 | + echo \Yii::t('app', 'Нет характеристик'); | ||
| 233 | + } | ||
| 234 | + ?> | ||
| 227 | </div> | 235 | </div> |
| 228 | </div> | 236 | </div> |
| 229 | 237 |
frontend/web/css/style.css
| @@ -4524,4 +4524,9 @@ a.list-group-item.active > .badge, | @@ -4524,4 +4524,9 @@ a.list-group-item.active > .badge, | ||
| 4524 | background-size: 70%; | 4524 | background-size: 70%; |
| 4525 | background-position: center; | 4525 | background-position: center; |
| 4526 | background-repeat: no-repeat; | 4526 | background-repeat: no-repeat; |
| 4527 | +} | ||
| 4528 | + | ||
| 4529 | +.inline-block.lang-link { | ||
| 4530 | + font-size: 18px; | ||
| 4531 | + padding-right: 20px; | ||
| 4527 | } | 4532 | } |
| 4528 | \ No newline at end of file | 4533 | \ No newline at end of file |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | + namespace frontend\widgets; | ||
| 4 | + | ||
| 5 | + use artbox\core\models\Alias; | ||
| 6 | + use artbox\core\models\Language; | ||
| 7 | + use yii\base\Widget; | ||
| 8 | + use yii\bootstrap\Html; | ||
| 9 | + use yii\helpers\Url; | ||
| 10 | + use yii\log\Logger; | ||
| 11 | + | ||
| 12 | + class LangLink extends Widget | ||
| 13 | + { | ||
| 14 | + public $languageIds = []; | ||
| 15 | + public $links = []; | ||
| 16 | + | ||
| 17 | + public function init() | ||
| 18 | + { | ||
| 19 | + if (empty($this->languageIds)) { | ||
| 20 | + $this->languageIds = Language::find() | ||
| 21 | + ->select( | ||
| 22 | + [ | ||
| 23 | + 'url', | ||
| 24 | + 'id', | ||
| 25 | + ] | ||
| 26 | + ) | ||
| 27 | + ->where([ 'status' => true ]) | ||
| 28 | + ->asArray() | ||
| 29 | + ->indexBy('id') | ||
| 30 | + ->column(); | ||
| 31 | + } | ||
| 32 | + foreach ($this->languageIds as $languageId => $url) { | ||
| 33 | + if (Language::getCurrent()->id !== $languageId) { | ||
| 34 | + if (\Yii::$app->requestedRoute == 'category/view') { | ||
| 35 | + $aliasValues = [ \Yii::$app->request->get('category') ]; | ||
| 36 | + $filter = \Yii::$app->request->get('filter'); | ||
| 37 | + if (!empty($filter)) { | ||
| 38 | + $aliasValues = array_merge($aliasValues, explode('_', $filter)); | ||
| 39 | + } | ||
| 40 | + if (!empty($aliasValues)) { | ||
| 41 | + $aliases = Alias::find() | ||
| 42 | + ->where( | ||
| 43 | + [ | ||
| 44 | + 'route' => Alias::find() | ||
| 45 | + ->select('route') | ||
| 46 | + ->where([ 'value' => $aliasValues ]), | ||
| 47 | + ] | ||
| 48 | + ) | ||
| 49 | + ->andWhere( | ||
| 50 | + [ | ||
| 51 | + 'language_id' => [ | ||
| 52 | + $languageId, | ||
| 53 | + Language::getCurrent()->id, | ||
| 54 | + ], | ||
| 55 | + ] | ||
| 56 | + ) | ||
| 57 | + ->asArray() | ||
| 58 | + ->all(); | ||
| 59 | + $map = $this->mapAliases($aliases); | ||
| 60 | + $params = $this->replaceParams($map); | ||
| 61 | + $this->links[ $languageId ] = Html::a( | ||
| 62 | + $url, | ||
| 63 | + Url::to( | ||
| 64 | + [ \Yii::$app->requestedRoute ] + $params + [ 'language_id' => $languageId ], | ||
| 65 | + true | ||
| 66 | + ) | ||
| 67 | + ); | ||
| 68 | + } else { | ||
| 69 | + $this->links[ $languageId ] = $url; | ||
| 70 | + } | ||
| 71 | + } else { | ||
| 72 | + $this->links[ $languageId ] = Html::a( | ||
| 73 | + $url, | ||
| 74 | + Url::to( | ||
| 75 | + [ \Yii::$app->requestedRoute ] + \Yii::$app->request->get( | ||
| 76 | + ) + [ 'language_id' => $languageId ], | ||
| 77 | + true | ||
| 78 | + ) | ||
| 79 | + ); | ||
| 80 | + } | ||
| 81 | + } else { | ||
| 82 | + $this->links[ $languageId ] = $url; | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + public function run() | ||
| 88 | + { | ||
| 89 | + return $this->render('_langLink'); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + protected function mapAliases(array $aliases): array | ||
| 93 | + { | ||
| 94 | + $map = []; | ||
| 95 | + $result = []; | ||
| 96 | + $currentLanguageId = Language::getCurrent()->id; | ||
| 97 | + foreach ($aliases as $alias) { | ||
| 98 | + if ($alias[ 'language_id' ] === $currentLanguageId) { | ||
| 99 | + $map[ $alias[ 'route' ] ][ 0 ] = $alias[ 'value' ]; | ||
| 100 | + } else { | ||
| 101 | + $map[ $alias[ 'route' ] ][ 1 ] = $alias[ 'value' ]; | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + foreach ($map as $route => $alias) { | ||
| 105 | + if (!empty($alias[ 0 ]) && !empty($alias[ 1 ])) { | ||
| 106 | + $result[ $alias[ 0 ] ] = $alias[ 1 ]; | ||
| 107 | + } else { | ||
| 108 | + \Yii::getLogger() | ||
| 109 | + ->log("Missing alias for route $route.", Logger::LEVEL_ERROR); | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + return $result; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + protected function replaceParams(array $map): array | ||
| 116 | + { | ||
| 117 | + $params = \Yii::$app->request->get(); | ||
| 118 | + $filter = explode('_', $params[ 'filter' ]); | ||
| 119 | + if (array_key_exists($params[ 'category' ], $map)) { | ||
| 120 | + $params[ 'category' ] = $map[ $params[ 'category' ] ]; | ||
| 121 | + } | ||
| 122 | + if (!empty($filter)) { | ||
| 123 | + foreach ($filter as $index => $item) { | ||
| 124 | + if (array_key_exists($item, $map)) { | ||
| 125 | + $filter[ $index ] = $map[ $item ]; | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + $params[ 'filter' ] = implode('_', $filter); | ||
| 129 | + } | ||
| 130 | + return $params; | ||
| 131 | + } | ||
| 132 | + } | ||
| 0 | \ No newline at end of file | 133 | \ No newline at end of file |