Blame view

frontend/widgets/Seo.php 3.8 KB
cb6805b8   Administrator   12.04.16 finish ...
1
  <?php
fa68c38d   Administrator   12.04.16 finish ...
2
  namespace frontend\widgets;
fa68c38d   Administrator   12.04.16 finish ...
3
  use common\models\SeoDynamic;
cb6805b8   Administrator   12.04.16 finish ...
4
  use yii\base\Widget;
fa68c38d   Administrator   12.04.16 finish ...
5
  use yii\helpers\Html;
cb6805b8   Administrator   12.04.16 finish ...
6
7
8
9
10
  
  class Seo extends Widget
  {
      private $url;
      public  $row;
fa68c38d   Administrator   12.04.16 finish ...
11
12
      public  $own_attr;
      public  $fields;
585f04ca   Administrator   15.04.16 seo widget
13
14
15
16
17
18
19
20
21
22
      public $description;
      public $title;
      public $seo_text;
      public $h1;
      public $key;
      public $project_name;
      const SEO_TEXT = 'seo_text';
      const DESCRIPTION = 'description';
      const H1 = 'h1';
      const TITLE = 'title';
cb6805b8   Administrator   12.04.16 finish ...
23
24
  
      public function init(){
585f04ca   Administrator   15.04.16 seo widget
25
26
          $this->url   = \Yii::$app->request->url;
          $this->project_name   = \Yii::$app->name;
cb6805b8   Administrator   12.04.16 finish ...
27
28
29
30
31
32
33
          parent::init();
  
      }
  
  
      public function run()
      {
fa68c38d   Administrator   12.04.16 finish ...
34
  
585f04ca   Administrator   15.04.16 seo widget
35
36
37
38
          $seoData = $this->getViewData();
          foreach($seoData as $key=>$value){
              $this->$key = $value;
          }
fa68c38d   Administrator   12.04.16 finish ...
39
  
fa68c38d   Administrator   12.04.16 finish ...
40
  
585f04ca   Administrator   15.04.16 seo widget
41
42
          switch ($this->row) {
              case self::SEO_TEXT:
7b08eb78   Administrator   15.04.16 seo widget
43
                  return $this->selectSeoData(self::SEO_TEXT);
fa68c38d   Administrator   12.04.16 finish ...
44
  
585f04ca   Administrator   15.04.16 seo widget
45
46
                  break;
              case self::H1:
7b08eb78   Administrator   15.04.16 seo widget
47
                  return $this->selectSeoData(self::H1);
585f04ca   Administrator   15.04.16 seo widget
48
49
                  break;
              case self::TITLE:
fa68c38d   Administrator   12.04.16 finish ...
50
  
585f04ca   Administrator   15.04.16 seo widget
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
                  $filter =  \Yii::$app->request->get('filter', []);
                  if(!empty($filter)){
                      $filter_row = '';
                      foreach($filter as $sub_filter_name => $sub_filter_array){
                          if($sub_filter_name=='options'){
                              foreach($sub_filter_array as $f_name=>$f_values){
                                  $filter_row .= $f_name.':'.implode(',',$f_values).'|';
                              }
                          }
  
                      }
                      $this->fields['name'] = $filter_row;
                  }
  
                  $title = $this->selectSeoData(self::TITLE);
  
  
  
                  if(!empty($title)){
                      return $title;
                  } else {
                      return $this->project_name;
                  }
  
                  break;
              case self::DESCRIPTION:
                  $description = $this->selectSeoData(self::DESCRIPTION);
fa68c38d   Administrator   12.04.16 finish ...
78
  
585f04ca   Administrator   15.04.16 seo widget
79
                  if(!empty($description)){
fa68c38d   Administrator   12.04.16 finish ...
80
  
585f04ca   Administrator   15.04.16 seo widget
81
82
83
84
85
86
87
88
89
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
                          'content' =>  $description
                      ]);
  
                  }
  
                  break;
          }
fa68c38d   Administrator   12.04.16 finish ...
90
  
cb6805b8   Administrator   12.04.16 finish ...
91
  
cb6805b8   Administrator   12.04.16 finish ...
92
93
      }
  
fa68c38d   Administrator   12.04.16 finish ...
94
      protected function replaceData($str)
cb6805b8   Administrator   12.04.16 finish ...
95
      {
fa68c38d   Administrator   12.04.16 finish ...
96
97
98
99
100
  
          if(!empty($this->fields)){
              foreach($this->fields as $field_name => $field_value){
                  $str = str_replace('{'.$field_name.'}', $field_value, $str);
              }
cb6805b8   Administrator   12.04.16 finish ...
101
          }
585f04ca   Administrator   15.04.16 seo widget
102
          $str = str_replace('{project_name}', $this->project_name, $str);
fa68c38d   Administrator   12.04.16 finish ...
103
104
105
106
107
108
109
110
111
112
          return Html::encode($str);
      }
  
      protected function findSeoByUrl()
      {
          return  \common\models\Seo::findOne(['url'=>$this->url]);
      }
  
      protected function findSeoByDynamic()
      {
585f04ca   Administrator   15.04.16 seo widget
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
          $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller'=> \Yii::$app->controller->id, 'action'=>\Yii::$app->controller->action->id]);
          if(!empty($this->key)){
              $query->andWhere(['key'=>$this->key]);
          }
          return $query->one();
      }
  
  
      protected function getViewData(){
          $params = $this->getView()->params;
          if(isset($params['seo'])){
              return $params['seo'];
          } else {
              return [];
          }
      }
  
      protected function selectSeoData($param){
          $result = '';
  
31c230f6   Administrator   15.04.16 seo widget
133
          $widgetData = $this->findSeoByUrl();
585f04ca   Administrator   15.04.16 seo widget
134
  
31c230f6   Administrator   15.04.16 seo widget
135
          if($widgetData instanceof \common\models\Seo){
585f04ca   Administrator   15.04.16 seo widget
136
  
31c230f6   Administrator   15.04.16 seo widget
137
138
139
              $result =  $widgetData->$param;
  
          }else if(!empty($this->$param)){
585f04ca   Administrator   15.04.16 seo widget
140
141
142
143
144
  
              $result = $this->$param;
  
          } else {
  
31c230f6   Administrator   15.04.16 seo widget
145
              $widgetData = $this->findSeoByDynamic();
585f04ca   Administrator   15.04.16 seo widget
146
  
31c230f6   Administrator   15.04.16 seo widget
147
              if($widgetData instanceof SeoDynamic){
585f04ca   Administrator   15.04.16 seo widget
148
149
  
                  $result =  $widgetData->$param;
585f04ca   Administrator   15.04.16 seo widget
150
  
585f04ca   Administrator   15.04.16 seo widget
151
              }
31c230f6   Administrator   15.04.16 seo widget
152
  
585f04ca   Administrator   15.04.16 seo widget
153
154
155
156
          }
  
          return $this->replaceData($result);
  
cb6805b8   Administrator   12.04.16 finish ...
157
      }
585f04ca   Administrator   15.04.16 seo widget
158
159
  
  
cb6805b8   Administrator   12.04.16 finish ...
160
  }