Blame view

widgets/Seo.php 13.2 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';
4b62b15f   Administrator   add variantSku
32
      const DESCRIPTION = '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
  
30c23186   Alex Savenko   up admin seo modu...
106
                  if ($default != $this->{self::H1} || $priority == 1) {
feffea0a   Yarik   Namespaces
107
  
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);
c351d5b0   Administrator   add variantSku
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
  
                  if (!empty($description)) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
                          'content' => $this->prepareString($description)
                      ]);
  
                  } else {
  
                      if(!empty($filter)){
                          $array = $this->arrayBuilder($filter);
                          $this->getView()->registerMetaTag([
                              'name' => 'description',
                              'content' => $this->prepareString($this->getDescriptionString($array,$description))
                          ]);
                      }
  
                  }
feffea0a   Yarik   Namespaces
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);
91cdb31d   Administrator   add variantSku
181
  
af40200b   Administrator   add variantSku
182
                  if(!empty($filter) && !$this->checkFilter($filter) && count($filter, COUNT_RECURSIVE) == 2 && $priority==3){
b42f465a   Administrator   add variantSku
183
184
185
                      $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
                      || !empty($sort) ||  !empty($paginate) || isset($filter['prices'])
                  ) {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
e2a4136b   Administrator   site map
232
233
234
235
236
237
                  } else if(!empty($this->{Seo::META})){
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => $this->{Seo::META}
                      ]);
feffea0a   Yarik   Namespaces
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
                  } else {
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
                  }
  
  
  
  
                  break;
          }
  
  
      }
  
9e39764a   Administrator   add variantSku
255
256
257
258
      /**
       * @param $str
       * @return mixed
       */
feffea0a   Yarik   Namespaces
259
260
261
262
263
264
265
266
267
268
269
270
      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
271
272
273
274
      /**
       * @param $url
       * @return static
       */
feffea0a   Yarik   Namespaces
275
276
277
278
279
280
281
282
283
      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
284
285
286
      /**
       * @return array|null|\yii\db\ActiveRecord
       */
feffea0a   Yarik   Namespaces
287
288
      protected function findSeoByDynamic()
      {
30d2133c   Administrator   add variantSku
289
  
b5777d78   Administrator   add variantSku
290
291
292
  //        print_r(\Yii::$app->controller->id);
  //        print_r(\Yii::$app->controller->action->id);
  //        die();
feffea0a   Yarik   Namespaces
293
294
295
296
297
298
299
300
301
302
303
304
          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
305
306
307
      /**
       * @return array|null|\yii\db\ActiveRecord
       */
feffea0a   Yarik   Namespaces
308
309
310
311
      protected function findSeoByDynamicForFilters(){
          return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
      }
  
9e39764a   Administrator   add variantSku
312
313
314
      /**
       * @return array
       */
feffea0a   Yarik   Namespaces
315
316
317
318
319
320
321
322
323
324
      protected function getViewData()
      {
          $params = $this->getView()->params;
          if (isset($params['seo'])) {
              return $params['seo'];
          } else {
              return [];
          }
      }
  
bf6de24b   Administrator   add variantSku
325
326
327
  
      /**
       * @param $param
4656e4ee   Administrator   add variantSku
328
       * @param $filter
b5777d78   Administrator   add variantSku
329
       * @param $priority
bf6de24b   Administrator   add variantSku
330
331
       * @return mixed
       */
76f5d86f   Administrator   add variantSku
332
      protected function selectSeoData($param, $filter, &$priority)
feffea0a   Yarik   Namespaces
333
      {
feffea0a   Yarik   Namespaces
334
335
          $result = '';
  
76f5d86f   Administrator   add variantSku
336
          $widgetData = static::findSeoByUrl($this->url);
feffea0a   Yarik   Namespaces
337
  
76f5d86f   Administrator   add variantSku
338
          $widgetDynamicData = $this->findSeoByDynamic();
30d2133c   Administrator   add variantSku
339
  
feffea0a   Yarik   Namespaces
340
          if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
b5777d78   Administrator   add variantSku
341
              $priority = 1;
feffea0a   Yarik   Namespaces
342
343
              $result = $widgetData->$param;
  
4656e4ee   Administrator   add variantSku
344
          }else if(!empty($this->$param) && empty($filter)) {
b5777d78   Administrator   add variantSku
345
              $priority = 2;
68d49205   Administrator   add variantSku
346
347
              $result = $this->$param;
  
30d2133c   Administrator   add variantSku
348
          } else if ($widgetDynamicData instanceof SeoDynamic) {
b5777d78   Administrator   add variantSku
349
              $priority = 3;
30d2133c   Administrator   add variantSku
350
              $result = $widgetDynamicData->lang->$param;
bf6de24b   Administrator   add variantSku
351
  
feffea0a   Yarik   Namespaces
352
353
354
355
356
357
          }
  
          return $this->replaceData($result);
  
      }
  
9e39764a   Administrator   add variantSku
358
359
360
361
362
      /**
       * @param $array
       * @param $title
       * @return mixed
       */
30d2133c   Administrator   add variantSku
363
364
      public function getTitleString($array, $title){
  
feffea0a   Yarik   Namespaces
365
366
          $row = '';
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
367
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
368
          }
feffea0a   Yarik   Namespaces
369
  
30d2133c   Administrator   add variantSku
370
          $template =  preg_replace('/{filter}/',$row,$title);
feffea0a   Yarik   Namespaces
371
  
30d2133c   Administrator   add variantSku
372
          return $template;
feffea0a   Yarik   Namespaces
373
374
375
  
      }
  
9e39764a   Administrator   add variantSku
376
377
378
379
380
      /**
       * @param $array
       * @param $description
       * @return mixed
       */
30d2133c   Administrator   add variantSku
381
      public function getDescriptionString($array, $description){
feffea0a   Yarik   Namespaces
382
  
30d2133c   Administrator   add variantSku
383
384
          $row = '';
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
385
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
386
          }
feffea0a   Yarik   Namespaces
387
  
95ca022f   Administrator   add variantSku
388
          $template =  preg_replace('/{filter}/',$row, $description);
feffea0a   Yarik   Namespaces
389
  
30d2133c   Administrator   add variantSku
390
          return $template;
feffea0a   Yarik   Namespaces
391
392
393
394
  
      }
  
  
9e39764a   Administrator   add variantSku
395
396
397
398
399
      /**
       * @param $array
       * @param $h1
       * @return mixed
       */
30d2133c   Administrator   add variantSku
400
401
      public function getNameString($array, $h1){
  
4656e4ee   Administrator   add variantSku
402
          $row = ' ';
feffea0a   Yarik   Namespaces
403
          foreach($array as $name => $field){
4656e4ee   Administrator   add variantSku
404
              $row .= $field['value'].' '  ;
30d2133c   Administrator   add variantSku
405
          }
feffea0a   Yarik   Namespaces
406
  
95ca022f   Administrator   add variantSku
407
          $template =  preg_replace('/{filter}/',$row, $h1 );
feffea0a   Yarik   Namespaces
408
  
30d2133c   Administrator   add variantSku
409
          return $template;
feffea0a   Yarik   Namespaces
410
411
412
  
      }
  
30d2133c   Administrator   add variantSku
413
414
415
416
      /**
       * @param $filter
       * @return mixed
       */
feffea0a   Yarik   Namespaces
417
418
      public function arrayBuilder($filter)
      {
95ca022f   Administrator   add variantSku
419
          $array = [];
feffea0a   Yarik   Namespaces
420
              if (isset($filter['brands']) && count($filter['brands']) == 1) {
5cfbf2a2   Administrator   slider
421
                  $model = Brand::find()->joinWith('lang')->where(['alias' => $filter['brands'][0]])->one();
feffea0a   Yarik   Namespaces
422
423
424
425
426
                  if (!$model instanceof Brand) {
  
                      \Yii::$app->response->redirect(['/site/error'], 404);
                  } else {
                      $array['brand']['name'] = 'Бренд';
e5f77089   Administrator   full commit
427
                      $array['brand']['value'] = $model->lang->title;
feffea0a   Yarik   Namespaces
428
429
430
431
432
                  }
  
              }
  
  
76f5d86f   Administrator   add variantSku
433
              $optionsList = ArrayHelper::map(TaxGroup::find()->joinWith('lang')->where(['is_filter' => 'TRUE'])->asArray()->all(), 'lang.alias', 'name');
feffea0a   Yarik   Namespaces
434
435
436
437
438
439
440
  
  
              foreach ($optionsList as $optionList => $name) {
  
  
                  if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
  
e5f77089   Administrator   full commit
441
                      $model = TaxOption::find()->joinWith('lang')->where(['alias' => $filter[$optionList]])->one();
feffea0a   Yarik   Namespaces
442
443
444
445
                      if (!$model instanceof TaxOption) {
  
                          \Yii::$app->response->redirect(['site/error'], 404);
                      } else {
e5f77089   Administrator   full commit
446
                          $array[$optionList]['value'] = $model->lang->value;
feffea0a   Yarik   Namespaces
447
448
449
450
451
452
453
454
455
456
457
458
459
                          $array[$optionList]['name'] = $name;
                      }
  
  
                  }
  
  
              }
  
          return $array;
  
      }
  
30d2133c   Administrator   add variantSku
460
461
462
463
      /**
       * @param $filter
       * @return bool
       */
feffea0a   Yarik   Namespaces
464
465
466
467
468
469
470
471
472
473
474
      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
475
476
      /**
       * @param $string
9e39764a   Administrator   add variantSku
477
       * @return mixed
30d2133c   Administrator   add variantSku
478
479
480
481
       */
      public function prepareString($string){
         return preg_replace('/\{.[^\}]*\}/','',$string);
      }
feffea0a   Yarik   Namespaces
482
483
  
  }