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 | 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 | 83 | 'label' => \Yii::t('catalog', 'Products'), |
79 | 84 | 'url' => [ 'product/index' ], |
80 | 85 | 'icon' => 'gift', | ... | ... |
frontend/views/layouts/main.php
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | use common\models\SearchForm; |
16 | 16 | use common\models\Settings; |
17 | 17 | use frontend\assets\AppAsset; |
18 | + use frontend\widgets\LangLink; | |
18 | 19 | use yii\base\Model; |
19 | 20 | use yii\bootstrap\ActiveForm; |
20 | 21 | use yii\bootstrap\Html; |
... | ... | @@ -127,6 +128,11 @@ |
127 | 128 | ?> |
128 | 129 | </div> |
129 | 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 | 136 | <div class="inline-block"> |
131 | 137 | <span class="top-phone"><i class="fa fa-phone"></i> <?php echo $settings->phone; ?></span> |
132 | 138 | <a href="#" class="link-underline_dott"> | ... | ... |
frontend/views/product/view.php
... | ... | @@ -194,36 +194,44 @@ |
194 | 194 | |
195 | 195 | <div class="box" id="details"> |
196 | 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 | 235 | </div> |
228 | 236 | </div> |
229 | 237 | ... | ... |
frontend/web/css/style.css
... | ... | @@ -4524,4 +4524,9 @@ a.list-group-item.active > .badge, |
4524 | 4524 | background-size: 70%; |
4525 | 4525 | background-position: center; |
4526 | 4526 | background-repeat: no-repeat; |
4527 | +} | |
4528 | + | |
4529 | +.inline-block.lang-link { | |
4530 | + font-size: 18px; | |
4531 | + padding-right: 20px; | |
4527 | 4532 | } |
4528 | 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 | 133 | \ No newline at end of file | ... | ... |