Blame view

frontend/widgets/Seo.php 5.82 KB
3f2bc3d0   Administrator   first commit
1
2
  <?php
  namespace frontend\widgets;
e21450c9   Dmytry Fedorchuk   SEO
3
  
3f2bc3d0   Administrator   first commit
4
5
6
7
8
9
10
  use common\models\SeoDynamic;
  use yii\base\Widget;
  use yii\helpers\Html;
  
  class Seo extends Widget
  {
      private $url;
e21450c9   Dmytry Fedorchuk   SEO
11
12
13
      public $row;
      public $own_attr;
      public $fields;
3f2bc3d0   Administrator   first commit
14
15
      public $description;
      public $title;
0d0c080c   Dmytry Fedorchuk   seo module filter...
16
      public $meta;
3f2bc3d0   Administrator   first commit
17
18
19
20
      public $seo_text;
      public $h1;
      public $key;
      public $project_name;
7d20bafe   Dmytry Fedorchuk   htacess www
21
22
  
  
3f2bc3d0   Administrator   first commit
23
24
      const SEO_TEXT = 'seo_text';
      const DESCRIPTION = 'description';
0d0c080c   Dmytry Fedorchuk   seo module filter...
25
      const META = 'meta';
3f2bc3d0   Administrator   first commit
26
27
28
      const H1 = 'h1';
      const TITLE = 'title';
  
e21450c9   Dmytry Fedorchuk   SEO
29
30
31
32
      public function init()
      {
          $this->url = \Yii::$app->request->url;
          $this->project_name = \Yii::$app->name;
3f2bc3d0   Administrator   first commit
33
34
35
36
37
38
39
40
41
          parent::init();
  
      }
  
  
      public function run()
      {
  
          $seoData = $this->getViewData();
e21450c9   Dmytry Fedorchuk   SEO
42
          foreach ($seoData as $key => $value) {
3f2bc3d0   Administrator   first commit
43
44
              $this->$key = $value;
          }
446efeeb   Dmytry Fedorchuk   SEO
45
   
3f2bc3d0   Administrator   first commit
46
47
48
49
50
51
52
53
54
55
56
  
          switch ($this->row) {
              case self::SEO_TEXT:
                  return $this->selectSeoData(self::SEO_TEXT);
  
                  break;
              case self::H1:
                  return $this->selectSeoData(self::H1);
                  break;
              case self::TITLE:
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
57
58
59
60
61
62
63
64
65
66
67
68
69
70
                  $filter = \Yii::$app->request->get('filter', []);
                  //        var_dump($filter );die();
  //                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;
  //                }
3f2bc3d0   Administrator   first commit
71
72
73
74
  
                  $title = $this->selectSeoData(self::TITLE);
  
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
75
76
77
78
  //                if(!empty($filter_row)){
  //                    return $filter_row;
  //                }
                  if (!empty($title)) {
3f2bc3d0   Administrator   first commit
79
80
81
82
83
84
85
86
87
                      return $title;
                  } else {
                      return $this->project_name;
                  }
  
                  break;
              case self::DESCRIPTION:
                  $description = $this->selectSeoData(self::DESCRIPTION);
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
88
                  if (!empty($description)) {
3f2bc3d0   Administrator   first commit
89
90
91
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
0d0c080c   Dmytry Fedorchuk   seo module filter...
92
                          'content' => $description
3f2bc3d0   Administrator   first commit
93
94
95
96
97
                      ]);
  
                  }
  
                  break;
0d0c080c   Dmytry Fedorchuk   seo module filter...
98
99
100
101
              case self::META:
                  $meta = $this->selectSeoData(self::META);
  
                  $filter = \Yii::$app->request->get('filter', []);
e21450c9   Dmytry Fedorchuk   SEO
102
                  $sort = \Yii::$app->request->get('sort', []);
0d0c080c   Dmytry Fedorchuk   seo module filter...
103
  
e21450c9   Dmytry Fedorchuk   SEO
104
                  if (!empty($meta)) {
0d0c080c   Dmytry Fedorchuk   seo module filter...
105
106
107
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
e21450c9   Dmytry Fedorchuk   SEO
108
                          'content' => $meta
0d0c080c   Dmytry Fedorchuk   seo module filter...
109
110
                      ]);
  
446efeeb   Dmytry Fedorchuk   SEO
111
                  } else if (
0d0c080c   Dmytry Fedorchuk   seo module filter...
112
113
114
115
                      isset($filter['brands']) && count($filter['brands']) > 1
                      || isset($filter['options']["pol"]) && count($filter['options']["pol"]) > 1
                      || isset($filter['options']["naznacenie"]) && count($filter['options']["naznacenie"]) > 1
                      || isset($filter['options']["god"]) && count($filter['options']["god"]) > 1
0d0c080c   Dmytry Fedorchuk   seo module filter...
116
  
e21450c9   Dmytry Fedorchuk   SEO
117
118
119
120
121
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
0d0c080c   Dmytry Fedorchuk   seo module filter...
122
  
e21450c9   Dmytry Fedorchuk   SEO
123
124
125
126
127
128
129
130
131
132
                  } else if (
                      isset($filter['brands']) && count($filter['brands']) <= 1 && isset($filter['options']) && count($filter['options'], COUNT_RECURSIVE) >= 4
                      || isset($filter['options']) && count($filter['options'], COUNT_RECURSIVE) > 4
                      || !empty($sort) || isset($filter['prices'])
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
                  } else {
0d0c080c   Dmytry Fedorchuk   seo module filter...
133
  
e21450c9   Dmytry Fedorchuk   SEO
134
135
136
137
138
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
                  }
0d0c080c   Dmytry Fedorchuk   seo module filter...
139
140
141
  
  
                  break;
3f2bc3d0   Administrator   first commit
142
143
144
145
146
147
148
149
          }
  
  
      }
  
      protected function replaceData($str)
      {
  
e21450c9   Dmytry Fedorchuk   SEO
150
151
152
          if (!empty($this->fields)) {
              foreach ($this->fields as $field_name => $field_value) {
                  $str = str_replace('{' . $field_name . '}', $field_value, $str);
3f2bc3d0   Administrator   first commit
153
154
155
              }
          }
          $str = str_replace('{project_name}', $this->project_name, $str);
4495dea0   Administrator   проапдейтил роли
156
          return $str;
3f2bc3d0   Administrator   first commit
157
158
159
160
      }
  
      protected function findSeoByUrl()
      {
e21450c9   Dmytry Fedorchuk   SEO
161
          return \common\models\Seo::findOne(['url' => $this->url]);
3f2bc3d0   Administrator   first commit
162
163
164
165
      }
  
      protected function findSeoByDynamic()
      {
e21450c9   Dmytry Fedorchuk   SEO
166
167
168
          $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]);
3f2bc3d0   Administrator   first commit
169
170
171
172
173
          }
          return $query->one();
      }
  
  
e21450c9   Dmytry Fedorchuk   SEO
174
175
      protected function getViewData()
      {
3f2bc3d0   Administrator   first commit
176
          $params = $this->getView()->params;
e21450c9   Dmytry Fedorchuk   SEO
177
          if (isset($params['seo'])) {
3f2bc3d0   Administrator   first commit
178
179
180
181
182
183
              return $params['seo'];
          } else {
              return [];
          }
      }
  
e21450c9   Dmytry Fedorchuk   SEO
184
185
      protected function selectSeoData($param)
      {
3f2bc3d0   Administrator   first commit
186
187
188
189
          $result = '';
  
          $widgetData = $this->findSeoByUrl();
  
e21450c9   Dmytry Fedorchuk   SEO
190
          if ($widgetData instanceof \common\models\Seo) {
3f2bc3d0   Administrator   first commit
191
  
e21450c9   Dmytry Fedorchuk   SEO
192
              $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
193
  
e21450c9   Dmytry Fedorchuk   SEO
194
          } else if (!empty($this->$param)) {
3f2bc3d0   Administrator   first commit
195
196
  
              $result = $this->$param;
3f2bc3d0   Administrator   first commit
197
198
199
200
          } else {
  
              $widgetData = $this->findSeoByDynamic();
  
e21450c9   Dmytry Fedorchuk   SEO
201
              if ($widgetData instanceof SeoDynamic) {
3f2bc3d0   Administrator   first commit
202
  
e21450c9   Dmytry Fedorchuk   SEO
203
                  $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
204
205
206
207
208
209
210
211
212
213
214
  
              }
  
          }
  
          return $this->replaceData($result);
  
      }
  
  
  }