Commit 9a8401855a933793eb011a3938d3da033d7df9f6

Authored by Yarik
1 parent d1d94101

Language Link

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>&ensp;<?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 &gt; .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
... ...
frontend/widgets/LangLink.php 0 → 100644
  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
... ...
frontend/widgets/views/_langLink.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var \yii\base\View $this
  4 + * @var \frontend\widgets\LangLink $widget
  5 + */
  6 + $widget = $this->context;
  7 + echo implode(' / ', $widget->links);
  8 +?>
... ...