Blame view

frontend/widgets/Seo.php 9.55 KB
3f2bc3d0   Administrator   first commit
1
2
  <?php
  namespace frontend\widgets;
e21450c9   Dmytry Fedorchuk   SEO
3
  
3f2bc3d0   Administrator   first commit
4
  use common\models\SeoDynamic;
1f3add0a   Dmytry Fedorchuk   All seo
5
6
7
  
  use common\modules\product\models\Brand;
  use common\modules\rubrication\models\TaxOption;
3f2bc3d0   Administrator   first commit
8
9
10
11
12
13
  use yii\base\Widget;
  use yii\helpers\Html;
  
  class Seo extends Widget
  {
      private $url;
e21450c9   Dmytry Fedorchuk   SEO
14
15
16
      public $row;
      public $own_attr;
      public $fields;
1f3add0a   Dmytry Fedorchuk   All seo
17
      public $category_name;
3f2bc3d0   Administrator   first commit
18
19
      public $description;
      public $title;
0d0c080c   Dmytry Fedorchuk   seo module filter...
20
      public $meta;
3f2bc3d0   Administrator   first commit
21
22
23
      public $seo_text;
      public $h1;
      public $key;
1f3add0a   Dmytry Fedorchuk   All seo
24
      public $name;
3f2bc3d0   Administrator   first commit
25
      public $project_name;
1b898c16   Administrator   20.07.16
26
27
      protected static $check_url;
      protected static $check_url_bool;
7d20bafe   Dmytry Fedorchuk   htacess www
28
29
  
  
3f2bc3d0   Administrator   first commit
30
31
      const SEO_TEXT = 'seo_text';
      const DESCRIPTION = 'description';
0d0c080c   Dmytry Fedorchuk   seo module filter...
32
      const META = 'meta';
3f2bc3d0   Administrator   first commit
33
34
35
      const H1 = 'h1';
      const TITLE = 'title';
  
e21450c9   Dmytry Fedorchuk   SEO
36
37
38
39
      public function init()
      {
          $this->url = \Yii::$app->request->url;
          $this->project_name = \Yii::$app->name;
3f2bc3d0   Administrator   first commit
40
41
42
43
44
45
46
47
48
          parent::init();
  
      }
  
  
      public function run()
      {
  
          $seoData = $this->getViewData();
e21450c9   Dmytry Fedorchuk   SEO
49
          foreach ($seoData as $key => $value) {
3f2bc3d0   Administrator   first commit
50
51
              $this->$key = $value;
          }
446efeeb   Dmytry Fedorchuk   SEO
52
   
3f2bc3d0   Administrator   first commit
53
54
55
  
          switch ($this->row) {
              case self::SEO_TEXT:
54330e07   Administrator   29.06.16
56
57
  
  
a4d63ed9   Administrator   20.07.16
58
                  $filter = \Yii::$app->request->get('filters', []);
54330e07   Administrator   29.06.16
59
60
61
62
63
64
65
66
67
                  $sort = \Yii::$app->request->get('sort', []);
                  $paginate = \Yii::$app->request->get('page', []);
  
                  if(empty($filter) && empty($sort) && empty($paginate) ){
  
                      return $this->selectSeoData(self::SEO_TEXT);
  
                  } else {
  
1b898c16   Administrator   20.07.16
68
                      $widgetData = static::findSeoByUrl($this->url);
54330e07   Administrator   29.06.16
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  
                      $result = '';
  
                      if ($widgetData instanceof \common\models\Seo) {
  
                          $result = $widgetData->{self::SEO_TEXT};
  
                      } else {
  
                          $widgetData = $this->findSeoByDynamic();
  
                          if ($widgetData instanceof SeoDynamic) {
  
                              $result = $widgetData->{self::SEO_TEXT};
  
                          }
  
                      }
  
                      return $this->replaceData($result);
                  }
  
3f2bc3d0   Administrator   first commit
91
92
93
  
                  break;
              case self::H1:
51774c5a   Dmytry Fedorchuk   Seo brand
94
  
a4d63ed9   Administrator   20.07.16
95
                  $filter = \Yii::$app->request->get('filters', []);
51774c5a   Dmytry Fedorchuk   Seo brand
96
97
98
  
  
  
4b4be5ea   Administrator   29.06.16
99
                  if (isset($filter['brands']) && count($filter['brands']) == 1) {
51774c5a   Dmytry Fedorchuk   Seo brand
100
  
4b4be5ea   Administrator   29.06.16
101
                      $model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
51774c5a   Dmytry Fedorchuk   Seo brand
102
  
4b4be5ea   Administrator   29.06.16
103
                      if($this->selectSeoData(self::H1) == $this->category_name) {
51774c5a   Dmytry Fedorchuk   Seo brand
104
  
4b4be5ea   Administrator   29.06.16
105
106
                          return $this->selectSeoData(self::H1) . ' ' . $model->name;
                      }else {
d482cb6f   Administrator   29.06.16
107
  
4b4be5ea   Administrator   29.06.16
108
                          return $this->selectSeoData(self::H1);
9173c97b   Dmytry Fedorchuk   Seo naznach h1
109
  
4b4be5ea   Administrator   29.06.16
110
                      }
9173c97b   Dmytry Fedorchuk   Seo naznach h1
111
  
a4d63ed9   Administrator   20.07.16
112
                  } else  if (isset($filter["naznacenie"]) && count($filter["naznacenie"]) == 1) {
9173c97b   Dmytry Fedorchuk   Seo naznach h1
113
  
a4d63ed9   Administrator   20.07.16
114
                  $model = TaxOption::find()->where(['alias' => $filter["naznacenie"]])->one();
63e7825d   Administrator   29.06.16
115
116
117
118
119
120
121
122
123
                      if($this->selectSeoData(self::H1) == $this->category_name) {
  
                          return $this->selectSeoData(self::H1) . ' ' . $model->value->value;
                      }else {
  
                          return $this->selectSeoData(self::H1);
  
                      }
  
d482cb6f   Administrator   29.06.16
124
125
  
  
4b4be5ea   Administrator   29.06.16
126
127
128
                  } else {
                      return $this->selectSeoData(self::H1);
                  }
51774c5a   Dmytry Fedorchuk   Seo brand
129
                      break;
3f2bc3d0   Administrator   first commit
130
131
              case self::TITLE:
  
a4d63ed9   Administrator   20.07.16
132
                  $filter = \Yii::$app->request->get('filters', []);
1c02ab59   Administrator   29.06.16
133
  
3f2bc3d0   Administrator   first commit
134
135
136
  
                  $title = $this->selectSeoData(self::TITLE);
  
1c02ab59   Administrator   29.06.16
137
  
7f7c8e5e   Dmytry Fedorchuk   Seo brand
138
                  if(!empty($filter) && $title == $this->fields['meta-title']) {
dc6809dc   Administrator   23.06.16
139
140
141
142
143
144
145
146
147
148
149
150
  
                      $array = [
                          'category' => $this->category_name
                      ];
  
  
                      if (isset($filter['brands']) && count($filter['brands']) == 1) {
                          $model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
  
                          $array['brand'] = $model->name;
                      }
  
a4d63ed9   Administrator   20.07.16
151
                      if (isset($filter["pol"]) && count($filter["pol"]) == 1) {
dc6809dc   Administrator   23.06.16
152
  
a4d63ed9   Administrator   20.07.16
153
                          $model = TaxOption::find()->where(['alias' => $filter["pol"]])->one();
dc6809dc   Administrator   23.06.16
154
155
156
157
158
                          $array['sex'] = $model->value->value;
  
  
                      }
  
a4d63ed9   Administrator   20.07.16
159
                      if (isset($filter["naznacenie"]) && count($filter["naznacenie"]) == 1) {
dc6809dc   Administrator   23.06.16
160
  
a4d63ed9   Administrator   20.07.16
161
                          $model = TaxOption::find()->where(['alias' => $filter["naznacenie"]])->one();
dc6809dc   Administrator   23.06.16
162
163
164
165
                          $array['naz'] = $model->value->value;
  
                      }
  
a4d63ed9   Administrator   20.07.16
166
                      if (isset($filter["god"]) && count($filter["god"]) == 1) {
dc6809dc   Administrator   23.06.16
167
  
a4d63ed9   Administrator   20.07.16
168
                          $model = TaxOption::find()->where(['alias' => $filter["god"]])->one();
dc6809dc   Administrator   23.06.16
169
170
171
                          $array['year'] = $model->value->value;
  
                      }
7f7c8e5e   Dmytry Fedorchuk   Seo brand
172
  
d482cb6f   Administrator   29.06.16
173
                      return $this->getTitleString($array);
dc6809dc   Administrator   23.06.16
174
  
7f7c8e5e   Dmytry Fedorchuk   Seo brand
175
                  } else if (!empty($title)) {
d482cb6f   Administrator   29.06.16
176
                      return $title;
7f7c8e5e   Dmytry Fedorchuk   Seo brand
177
                  } else  {
d482cb6f   Administrator   29.06.16
178
                      return $this->project_name;
1f3add0a   Dmytry Fedorchuk   All seo
179
                  }
1f3add0a   Dmytry Fedorchuk   All seo
180
  
3f2bc3d0   Administrator   first commit
181
182
183
184
                  break;
              case self::DESCRIPTION:
                  $description = $this->selectSeoData(self::DESCRIPTION);
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
185
                  if (!empty($description)) {
3f2bc3d0   Administrator   first commit
186
187
188
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
0d0c080c   Dmytry Fedorchuk   seo module filter...
189
                          'content' => $description
3f2bc3d0   Administrator   first commit
190
191
192
193
194
                      ]);
  
                  }
  
                  break;
0d0c080c   Dmytry Fedorchuk   seo module filter...
195
              case self::META:
e8923005   Administrator   29.06.16
196
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
197
198
                  $meta = $this->selectSeoData(self::META);
  
f5bc3759   Administrator   20.07.16
199
                  $filter = \Yii::$app->request->get('filters', []);
e21450c9   Dmytry Fedorchuk   SEO
200
                  $sort = \Yii::$app->request->get('sort', []);
0e51e661   Dmytry Fedorchuk   paginate seo
201
                  $paginate = \Yii::$app->request->get('page', []);
0d0c080c   Dmytry Fedorchuk   seo module filter...
202
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
203
  
9fae793b   Dmytry Fedorchuk   All seo
204
  
8afa1bf2   Administrator   29.06.16
205
                  if (!empty($meta)) {
9fae793b   Dmytry Fedorchuk   All seo
206
  
8afa1bf2   Administrator   29.06.16
207
208
209
210
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => $meta
                      ]);
0d0c080c   Dmytry Fedorchuk   seo module filter...
211
  
8afa1bf2   Administrator   29.06.16
212
                  } else if(!empty($filter['special'])){
0d0c080c   Dmytry Fedorchuk   seo module filter...
213
  
8afa1bf2   Administrator   29.06.16
214
215
216
217
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
0d0c080c   Dmytry Fedorchuk   seo module filter...
218
  
8afa1bf2   Administrator   29.06.16
219
220
                  } else if (
                      isset($filter['brands']) && count($filter['brands']) > 1
a4d63ed9   Administrator   20.07.16
221
222
223
                      || isset($filter["pol"]) && count($filter["pol"]) > 1
                      || isset($filter["naznacenie"]) && count($filter["naznacenie"]) > 1
                      || isset($filter["god"]) && count($filter["god"]) > 1
e8923005   Administrator   29.06.16
224
  
8afa1bf2   Administrator   29.06.16
225
226
227
228
229
230
231
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
  
                  } else if (
a4d63ed9   Administrator   20.07.16
232
233
                      isset($filter['brands']) && count($filter['brands']) <= 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 4
                      || isset($filter) && count($filter, COUNT_RECURSIVE) > 4
8afa1bf2   Administrator   29.06.16
234
235
236
237
238
239
240
241
242
243
244
245
                      || !empty($sort) ||  !empty($paginate) || isset($filter['prices'])
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
                  } else {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
e21450c9   Dmytry Fedorchuk   SEO
246
                  }
0d0c080c   Dmytry Fedorchuk   seo module filter...
247
248
  
  
e8923005   Administrator   29.06.16
249
250
  
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
251
                  break;
3f2bc3d0   Administrator   first commit
252
253
254
255
256
257
258
259
          }
  
  
      }
  
      protected function replaceData($str)
      {
  
e21450c9   Dmytry Fedorchuk   SEO
260
261
262
          if (!empty($this->fields)) {
              foreach ($this->fields as $field_name => $field_value) {
                  $str = str_replace('{' . $field_name . '}', $field_value, $str);
3f2bc3d0   Administrator   first commit
263
264
265
              }
          }
          $str = str_replace('{project_name}', $this->project_name, $str);
4495dea0   Administrator   проапдейтил роли
266
          return $str;
3f2bc3d0   Administrator   first commit
267
268
      }
  
1b898c16   Administrator   20.07.16
269
      protected static function findSeoByUrl($url)
3f2bc3d0   Administrator   first commit
270
      {
1b898c16   Administrator   20.07.16
271
272
273
274
275
          if(empty(self::$check_url_bool)){
              self::$check_url = \common\models\Seo::findOne(['url' => $url]);
              self::$check_url_bool = true;
          }
          return self::$check_url;
3f2bc3d0   Administrator   first commit
276
277
278
279
      }
  
      protected function findSeoByDynamic()
      {
1f3add0a   Dmytry Fedorchuk   All seo
280
281
282
283
284
285
  
          if(!empty($this->key)){
  
              $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id, 'key' => $this->key]);
          } else {
  
0f852b51   Administrator   29.06.16
286
  
1f3add0a   Dmytry Fedorchuk   All seo
287
              $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
3f2bc3d0   Administrator   first commit
288
          }
1f3add0a   Dmytry Fedorchuk   All seo
289
  
3f2bc3d0   Administrator   first commit
290
291
292
293
          return $query->one();
      }
  
  
e21450c9   Dmytry Fedorchuk   SEO
294
295
      protected function getViewData()
      {
3f2bc3d0   Administrator   first commit
296
          $params = $this->getView()->params;
e21450c9   Dmytry Fedorchuk   SEO
297
          if (isset($params['seo'])) {
3f2bc3d0   Administrator   first commit
298
299
300
301
302
303
              return $params['seo'];
          } else {
              return [];
          }
      }
  
e21450c9   Dmytry Fedorchuk   SEO
304
305
      protected function selectSeoData($param)
      {
3f2bc3d0   Administrator   first commit
306
307
          $result = '';
  
1b898c16   Administrator   20.07.16
308
          $widgetData = static::findSeoByUrl($this->url);
3f2bc3d0   Administrator   first commit
309
  
e21450c9   Dmytry Fedorchuk   SEO
310
          if ($widgetData instanceof \common\models\Seo) {
3f2bc3d0   Administrator   first commit
311
  
e21450c9   Dmytry Fedorchuk   SEO
312
              $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
313
  
e21450c9   Dmytry Fedorchuk   SEO
314
          } else if (!empty($this->$param)) {
3f2bc3d0   Administrator   first commit
315
316
  
              $result = $this->$param;
3f2bc3d0   Administrator   first commit
317
318
319
320
          } else {
  
              $widgetData = $this->findSeoByDynamic();
  
e21450c9   Dmytry Fedorchuk   SEO
321
              if ($widgetData instanceof SeoDynamic) {
3f2bc3d0   Administrator   first commit
322
  
e21450c9   Dmytry Fedorchuk   SEO
323
                  $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
324
325
326
327
328
329
330
331
332
  
              }
  
          }
  
          return $this->replaceData($result);
  
      }
  
1f3add0a   Dmytry Fedorchuk   All seo
333
334
335
      public function getTitleString($array){
          $template = "{category} {naz} {brand}  {sex} {year} купить в Украине, Киев, Харькове - цены, фото, отзывы | Rukzachok.com.ua";
          foreach ($array as $field_name => $field_value) {
d3b9384a   Administrator   29.06.16
336
              $template = str_replace('{' . $field_name . '}', mb_strtolower($field_value), $template);
1f3add0a   Dmytry Fedorchuk   All seo
337
338
339
340
341
342
          }
          $template =  preg_replace('/\{.[^\}]*\}\s/','',$template);
          return $template;
  
      }
  
3f2bc3d0   Administrator   first commit
343
344
  
  }