Blame view

frontend/widgets/LanguageMarkupWidget.php 2.72 KB
6179ff51   Timur Kastemirov   language markup f...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  <?php
      /**
       * Created by PhpStorm.
       * User: timur
       * Date: 04.12.17
       * Time: 14:52
       */
      
      namespace frontend\widgets;
      use artbox\core\models\Language;
      use yii\base\InvalidConfigException;
      use yii\base\Widget;
      use yii\helpers\VarDumper;
  
      class LanguageMarkupWidget extends Widget
      {
          /**
           * @var $model \artbox\core\models\Page
           */
          public $model;
          /**
           * @var $aliases \artbox\core\models\Alias[]
           */
          public $aliases;
          
          public $languages = ['en', 'ru', 'ua']; // use in all languages that we have
          
          private $renderLinks = [];
          
          public function init()
          {
              
              if (!isset($this->model)){
                  
                  if ( !isset($this->aliases) ){
                      throw new InvalidConfigException("need model with lang or array of aliases to same page with different langs");
                  }
                  else{
                      
                      $languages = Language::find()->indexBy('id')->all();
                      //VarDumper::dump($languages[1]->url,10,1);die();
                      foreach ($this->aliases as $alias){
                          if ( in_array($languages[$alias->language_id]->url, $this->languages) ){
                              $this->languageMarkup($alias);
                          }
                      }
                  }
              }
              else{
                  foreach ($this->model->langs as $pageLang){
                      if (in_array($pageLang->language->url, $this->languages)){
                          $this->languageMarkup($pageLang->alias);
                      }
                  }
              }
              
          }
      
          /**
           * @param $alias \artbox\core\models\Alias
           */
          private function languageMarkup($alias){
              $route = json_decode($alias->route)->{'0'};
              
              $url = \yii\helpers\Url::toRoute(
                  [
                      $route,
                      'alias' => $alias,
                      'language_id' => $alias->language_id
                  ]
              );
              $locale = '';
              if ( $alias->language_id === 2 ){
                  $locale = 'ru-UA';
              }
              elseif ($alias->language_id === 3){
                  $locale = 'uk-UA';
              }
              elseif ($alias->language_id === 1){
                  $locale = 'en-UA';
              }
      
              $this->renderLinks[] = "<link rel=\"alternate\" hreflang=\"$locale\" href=\"$url\" />";
          }
          
          public function run()
          {
              foreach ($this->renderLinks as $renderLink){
                  echo $renderLink;
              }
          }
      }