Blame view

widgets/Seo.php 12.9 KB
feffea0a   Yarik   Namespaces
1
  <?php
aef3b793   Yarik   For Leha commit
2
  namespace artweb\artbox\seo\widgets;
feffea0a   Yarik   Namespaces
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  
  use artweb\artbox\seo\models\SeoDynamic;
  use artweb\artbox\ecommerce\models\Brand;
  use artweb\artbox\ecommerce\models\TaxGroup;
  use artweb\artbox\ecommerce\models\TaxOption;
  use yii\base\Widget;
  use yii\helpers\ArrayHelper;
  
  class Seo extends Widget
  {
      private $url;
      public $row;
      public $own_attr;
      public $fields;
      public $category_name;
      public $description;
      public $title;
      public $meta;
      public $seo_text;
      public $h1;
      public $key;
      public $name;
      public $project_name;
feffea0a   Yarik   Namespaces
26
27
28
29
30
31
      public static $optionsList;
      protected static $check_url;
      protected static $check_url_bool;
  
  
      const SEO_TEXT = 'seo_text';
bf6de24b   Administrator   add variantSku
32
      const DESCRIPTION = 'meta_description';
feffea0a   Yarik   Namespaces
33
34
35
36
37
38
39
      const META = 'meta';
      const H1 = 'h1';
      const TITLE = 'title';
  
      public function init()
      {
          $this->url = \Yii::$app->request->url;
feffea0a   Yarik   Namespaces
40
          $this->project_name = \Yii::$app->name;
feffea0a   Yarik   Namespaces
41
          if(empty(self::$optionsList)){
76f5d86f   Administrator   add variantSku
42
              self::$optionsList = ArrayHelper::getColumn(TaxGroup::find()->joinWith('lang')->where(['is_filter' => 'TRUE'])->asArray()->all(),'lang.alias');
feffea0a   Yarik   Namespaces
43
44
45
46
47
48
          }
  
          parent::init();
  
      }
  
9e39764a   Administrator   add variantSku
49
50
51
      /**
       * @return mixed
       */
feffea0a   Yarik   Namespaces
52
53
54
55
56
57
58
59
60
      public function run()
      {
  
          $seoData = $this->getViewData();
          foreach ($seoData as $key => $value) {
              $this->$key = $value;
          }
  
  
feffea0a   Yarik   Namespaces
61
62
63
64
65
66
67
68
69
70
          switch ($this->row) {
              case self::SEO_TEXT:
  
  
                  $filter = \Yii::$app->request->get('filters', []);
                  $sort = \Yii::$app->request->get('sort', []);
                  $paginate = \Yii::$app->request->get('page', []);
  
                  if(empty($filter) && empty($sort) && empty($paginate) ){
  
76f5d86f   Administrator   add variantSku
71
                      return $this->prepareString($this->selectSeoData(self::SEO_TEXT,$filter,$priority));
feffea0a   Yarik   Namespaces
72
73
74
  
                  } else {
  
76f5d86f   Administrator   add variantSku
75
                      $widgetData = static::findSeoByUrl($this->url);
feffea0a   Yarik   Namespaces
76
77
78
  
                      $result = '';
  
76f5d86f   Administrator   add variantSku
79
                      if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
feffea0a   Yarik   Namespaces
80
  
76f5d86f   Administrator   add variantSku
81
                          $result = $widgetData->{self::SEO_TEXT};
feffea0a   Yarik   Namespaces
82
83
84
  
                      } else {
  
76f5d86f   Administrator   add variantSku
85
                          $widgetData = $this->findSeoByDynamic();
feffea0a   Yarik   Namespaces
86
  
76f5d86f   Administrator   add variantSku
87
88
89
                          if ($widgetData instanceof SeoDynamic) {
  
                              $result = $widgetData->lang->{self::SEO_TEXT};
feffea0a   Yarik   Namespaces
90
91
92
93
94
  
                          }
  
                      }
  
30d2133c   Administrator   add variantSku
95
                      return $this->prepareString($this->replaceData($result));
feffea0a   Yarik   Namespaces
96
97
98
99
100
101
102
103
                  }
  
  
                  break;
              case self::H1:
  
                  $filter = \Yii::$app->request->get('filters', []);
  
76f5d86f   Administrator   add variantSku
104
                  $default = $this->selectSeoData(self::H1, $filter,$priority);
feffea0a   Yarik   Namespaces
105
106
107
  
                  if ($default != $this->{self::H1}) {
  
30d2133c   Administrator   add variantSku
108
                      return $this->prepareString($default);
feffea0a   Yarik   Namespaces
109
110
111
  
  
                  } else if(!empty($filter) && !$this->checkFilter($filter)){
feffea0a   Yarik   Namespaces
112
                      $array = $this->arrayBuilder($filter);
30d2133c   Administrator   add variantSku
113
                      return $this->prepareString($this->getNameString($array,$default));
feffea0a   Yarik   Namespaces
114
115
116
                  }
                  else {
  
30d2133c   Administrator   add variantSku
117
                      return $this->prepareString($default);
feffea0a   Yarik   Namespaces
118
                  }
30d2133c   Administrator   add variantSku
119
                  break;
feffea0a   Yarik   Namespaces
120
121
122
123
124
              case self::TITLE:
  
                  $filter = \Yii::$app->request->get('filters', []);
  
  
0436d2e2   Administrator   add variantSku
125
                  $title = $this->selectSeoData(self::TITLE, $filter, $priority);
22083bd3   Administrator   add variantSku
126
  
feffea0a   Yarik   Namespaces
127
  
0436d2e2   Administrator   add variantSku
128
                  if(!empty($filter) &&  $priority==3 || !empty($filter) && empty($this->{Seo::TITLE})) {
feffea0a   Yarik   Namespaces
129
130
131
  
                      $array = $this->arrayBuilder($filter);
  
30d2133c   Administrator   add variantSku
132
                      $title_string = $this->getTitleString($array, $title);
feffea0a   Yarik   Namespaces
133
134
  
                      if($title_string){
30d2133c   Administrator   add variantSku
135
                          return $this->prepareString($title_string);
feffea0a   Yarik   Namespaces
136
137
138
139
                      }
  
                  }
  
bf6de24b   Administrator   add variantSku
140
  
feffea0a   Yarik   Namespaces
141
                  if (!empty($title)) {
30d2133c   Administrator   add variantSku
142
                      return $this->prepareString($title);
feffea0a   Yarik   Namespaces
143
                  } else  {
30d2133c   Administrator   add variantSku
144
                      return $this->prepareString($this->project_name);
feffea0a   Yarik   Namespaces
145
                  }
feffea0a   Yarik   Namespaces
146
147
                  break;
              case self::DESCRIPTION:
4656e4ee   Administrator   add variantSku
148
149
150
  
                  $filter = \Yii::$app->request->get('filters', []);
  
76f5d86f   Administrator   add variantSku
151
                  $description = $this->selectSeoData(self::DESCRIPTION, $filter,$priority);
feffea0a   Yarik   Namespaces
152
153
154
155
156
  
                  if (!empty($description)) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
30d2133c   Administrator   add variantSku
157
                          'content' => $this->prepareString($description)
feffea0a   Yarik   Namespaces
158
159
160
161
                      ]);
  
                  } else {
  
feffea0a   Yarik   Namespaces
162
163
164
165
                      if(!empty($filter)){
                          $array = $this->arrayBuilder($filter);
                          $this->getView()->registerMetaTag([
                              'name' => 'description',
30d2133c   Administrator   add variantSku
166
                              'content' => $this->prepareString($this->getDescriptionString($array,$description))
feffea0a   Yarik   Namespaces
167
168
169
170
171
172
173
174
                          ]);
                      }
  
                  }
  
                  break;
              case self::META:
  
feffea0a   Yarik   Namespaces
175
176
177
178
179
  
                  $filter = \Yii::$app->request->get('filters', []);
                  $sort = \Yii::$app->request->get('sort', []);
                  $paginate = \Yii::$app->request->get('page', []);
  
76f5d86f   Administrator   add variantSku
180
                  $meta = $this->selectSeoData(self::META, $filter,$priority);
4656e4ee   Administrator   add variantSku
181
  
b42f465a   Administrator   add variantSku
182
183
184
185
                  if(!empty($filter) && !$this->checkFilter($filter) && count($filter, COUNT_RECURSIVE) == 2){
                      $key = array_keys ( $filter);
                      if(isset($key[0])){
                          $metaGroup = TaxGroup::find()->joinWith('lang')->where(['alias'=>$key[0]])->one();
abab5f69   Administrator   add variantSku
186
                          if($metaGroup != null && !empty($metaGroup->meta_robots)){
b42f465a   Administrator   add variantSku
187
188
189
190
191
192
193
194
195
196
                              $this->getView()->registerMetaTag([
                                  'name' => 'robots',
                                  'content' => $metaGroup->meta_robots
                              ]);
                              break;
                          }
                      }
                  }
  
  
feffea0a   Yarik   Namespaces
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
                  if (!empty($meta) && empty($sort) &&  empty($paginate) && !isset($filter['prices']) ) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => $meta
                      ]);
  
                  } else if(!empty($filter['special'])){
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
  
                  } else if (
                      isset($filter['brands']) && count($filter['brands']) > 1
                      || isset($filter)  && $this->checkFilter($filter)
  
                  ) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
  
                  } else if (
30d2133c   Administrator   add variantSku
223
224
                      isset($filter['brands']) && count($filter['brands']) > 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 2
                      || isset($filter) && count($filter, COUNT_RECURSIVE) > 2
feffea0a   Yarik   Namespaces
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
                      || !empty($sort) ||  !empty($paginate) || isset($filter['prices'])
                  ) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
                  } else {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
                  }
  
  
  
  
                  break;
          }
  
  
      }
  
9e39764a   Administrator   add variantSku
249
250
251
252
      /**
       * @param $str
       * @return mixed
       */
feffea0a   Yarik   Namespaces
253
254
255
256
257
258
259
260
261
262
263
264
      protected function replaceData($str)
      {
  
          if (!empty($this->fields)) {
              foreach ($this->fields as $field_name => $field_value) {
                  $str = str_replace('{' . $field_name . '}', $field_value, $str);
              }
          }
          $str = str_replace('{project_name}', $this->project_name, $str);
          return $str;
      }
  
9e39764a   Administrator   add variantSku
265
266
267
268
      /**
       * @param $url
       * @return static
       */
feffea0a   Yarik   Namespaces
269
270
271
272
273
274
275
276
277
      protected static function findSeoByUrl($url)
      {
          if(empty(self::$check_url_bool)){
              self::$check_url = \artweb\artbox\seo\models\Seo::findOne(['url' => $url]);
              self::$check_url_bool = true;
          }
          return self::$check_url;
      }
  
9e39764a   Administrator   add variantSku
278
279
280
      /**
       * @return array|null|\yii\db\ActiveRecord
       */
feffea0a   Yarik   Namespaces
281
282
      protected function findSeoByDynamic()
      {
30d2133c   Administrator   add variantSku
283
  
b5777d78   Administrator   add variantSku
284
285
286
  //        print_r(\Yii::$app->controller->id);
  //        print_r(\Yii::$app->controller->action->id);
  //        die();
feffea0a   Yarik   Namespaces
287
288
289
290
291
292
293
294
295
296
297
298
          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 {
  
  
              $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
          }
  
          return $query->one();
      }
  
9e39764a   Administrator   add variantSku
299
300
301
      /**
       * @return array|null|\yii\db\ActiveRecord
       */
feffea0a   Yarik   Namespaces
302
303
304
305
      protected function findSeoByDynamicForFilters(){
          return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
      }
  
9e39764a   Administrator   add variantSku
306
307
308
      /**
       * @return array
       */
feffea0a   Yarik   Namespaces
309
310
311
312
313
314
315
316
317
318
      protected function getViewData()
      {
          $params = $this->getView()->params;
          if (isset($params['seo'])) {
              return $params['seo'];
          } else {
              return [];
          }
      }
  
bf6de24b   Administrator   add variantSku
319
320
321
  
      /**
       * @param $param
4656e4ee   Administrator   add variantSku
322
       * @param $filter
b5777d78   Administrator   add variantSku
323
       * @param $priority
bf6de24b   Administrator   add variantSku
324
325
       * @return mixed
       */
76f5d86f   Administrator   add variantSku
326
      protected function selectSeoData($param, $filter, &$priority)
feffea0a   Yarik   Namespaces
327
      {
feffea0a   Yarik   Namespaces
328
329
          $result = '';
  
76f5d86f   Administrator   add variantSku
330
          $widgetData = static::findSeoByUrl($this->url);
feffea0a   Yarik   Namespaces
331
  
76f5d86f   Administrator   add variantSku
332
          $widgetDynamicData = $this->findSeoByDynamic();
30d2133c   Administrator   add variantSku
333
  
feffea0a   Yarik   Namespaces
334
          if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
b5777d78   Administrator   add variantSku
335
              $priority = 1;
feffea0a   Yarik   Namespaces
336
337
              $result = $widgetData->$param;
  
4656e4ee   Administrator   add variantSku
338
          }else if(!empty($this->$param) && empty($filter)) {
b5777d78   Administrator   add variantSku
339
              $priority = 2;
68d49205   Administrator   add variantSku
340
341
              $result = $this->$param;
  
30d2133c   Administrator   add variantSku
342
          } else if ($widgetDynamicData instanceof SeoDynamic) {
b5777d78   Administrator   add variantSku
343
              $priority = 3;
30d2133c   Administrator   add variantSku
344
              $result = $widgetDynamicData->lang->$param;
bf6de24b   Administrator   add variantSku
345
  
feffea0a   Yarik   Namespaces
346
347
348
349
350
351
          }
  
          return $this->replaceData($result);
  
      }
  
9e39764a   Administrator   add variantSku
352
353
354
355
356
      /**
       * @param $array
       * @param $title
       * @return mixed
       */
30d2133c   Administrator   add variantSku
357
358
      public function getTitleString($array, $title){
  
feffea0a   Yarik   Namespaces
359
360
          $row = '';
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
361
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
362
          }
feffea0a   Yarik   Namespaces
363
  
30d2133c   Administrator   add variantSku
364
          $template =  preg_replace('/{filter}/',$row,$title);
feffea0a   Yarik   Namespaces
365
  
30d2133c   Administrator   add variantSku
366
          return $template;
feffea0a   Yarik   Namespaces
367
368
369
  
      }
  
9e39764a   Administrator   add variantSku
370
371
372
373
374
      /**
       * @param $array
       * @param $description
       * @return mixed
       */
30d2133c   Administrator   add variantSku
375
      public function getDescriptionString($array, $description){
feffea0a   Yarik   Namespaces
376
  
30d2133c   Administrator   add variantSku
377
378
          $row = '';
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
379
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
380
          }
feffea0a   Yarik   Namespaces
381
  
95ca022f   Administrator   add variantSku
382
          $template =  preg_replace('/{filter}/',$row, $description);
feffea0a   Yarik   Namespaces
383
  
30d2133c   Administrator   add variantSku
384
          return $template;
feffea0a   Yarik   Namespaces
385
386
387
388
  
      }
  
  
9e39764a   Administrator   add variantSku
389
390
391
392
393
      /**
       * @param $array
       * @param $h1
       * @return mixed
       */
30d2133c   Administrator   add variantSku
394
395
      public function getNameString($array, $h1){
  
4656e4ee   Administrator   add variantSku
396
          $row = ' ';
feffea0a   Yarik   Namespaces
397
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
398
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
399
          }
feffea0a   Yarik   Namespaces
400
  
95ca022f   Administrator   add variantSku
401
          $template =  preg_replace('/{filter}/',$row, $h1 );
feffea0a   Yarik   Namespaces
402
  
30d2133c   Administrator   add variantSku
403
          return $template;
feffea0a   Yarik   Namespaces
404
405
406
  
      }
  
30d2133c   Administrator   add variantSku
407
408
409
410
      /**
       * @param $filter
       * @return mixed
       */
feffea0a   Yarik   Namespaces
411
412
      public function arrayBuilder($filter)
      {
95ca022f   Administrator   add variantSku
413
          $array = [];
feffea0a   Yarik   Namespaces
414
              if (isset($filter['brands']) && count($filter['brands']) == 1) {
5cfbf2a2   Administrator   slider
415
                  $model = Brand::find()->joinWith('lang')->where(['alias' => $filter['brands'][0]])->one();
feffea0a   Yarik   Namespaces
416
417
418
419
420
                  if (!$model instanceof Brand) {
  
                      \Yii::$app->response->redirect(['/site/error'], 404);
                  } else {
                      $array['brand']['name'] = 'Бренд';
e5f77089   Administrator   full commit
421
                      $array['brand']['value'] = $model->lang->title;
feffea0a   Yarik   Namespaces
422
423
424
425
426
                  }
  
              }
  
  
76f5d86f   Administrator   add variantSku
427
              $optionsList = ArrayHelper::map(TaxGroup::find()->joinWith('lang')->where(['is_filter' => 'TRUE'])->asArray()->all(), 'lang.alias', 'name');
feffea0a   Yarik   Namespaces
428
429
430
431
432
433
434
  
  
              foreach ($optionsList as $optionList => $name) {
  
  
                  if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
  
e5f77089   Administrator   full commit
435
                      $model = TaxOption::find()->joinWith('lang')->where(['alias' => $filter[$optionList]])->one();
feffea0a   Yarik   Namespaces
436
437
438
439
                      if (!$model instanceof TaxOption) {
  
                          \Yii::$app->response->redirect(['site/error'], 404);
                      } else {
e5f77089   Administrator   full commit
440
                          $array[$optionList]['value'] = $model->lang->value;
feffea0a   Yarik   Namespaces
441
442
443
444
445
446
447
448
449
450
451
452
453
                          $array[$optionList]['name'] = $name;
                      }
  
  
                  }
  
  
              }
  
          return $array;
  
      }
  
30d2133c   Administrator   add variantSku
454
455
456
457
      /**
       * @param $filter
       * @return bool
       */
feffea0a   Yarik   Namespaces
458
459
460
461
462
463
464
465
466
467
468
      protected function checkFilter($filter){
          foreach(self::$optionsList as $optionList){
  
              if(isset($filter[$optionList]) && count($filter[$optionList])  > 1){
                  return true;
              }
  
          }
          return false;
      }
  
30d2133c   Administrator   add variantSku
469
470
      /**
       * @param $string
9e39764a   Administrator   add variantSku
471
       * @return mixed
30d2133c   Administrator   add variantSku
472
473
474
475
       */
      public function prepareString($string){
         return preg_replace('/\{.[^\}]*\}/','',$string);
      }
feffea0a   Yarik   Namespaces
476
477
  
  }