Blame view

frontend/widgets/Seo.php 8.03 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;
7d20bafe   Dmytry Fedorchuk   htacess www
26
27
  
  
3f2bc3d0   Administrator   first commit
28
29
      const SEO_TEXT = 'seo_text';
      const DESCRIPTION = 'description';
0d0c080c   Dmytry Fedorchuk   seo module filter...
30
      const META = 'meta';
3f2bc3d0   Administrator   first commit
31
32
33
      const H1 = 'h1';
      const TITLE = 'title';
  
e21450c9   Dmytry Fedorchuk   SEO
34
35
36
37
      public function init()
      {
          $this->url = \Yii::$app->request->url;
          $this->project_name = \Yii::$app->name;
3f2bc3d0   Administrator   first commit
38
39
40
41
42
43
44
45
46
          parent::init();
  
      }
  
  
      public function run()
      {
  
          $seoData = $this->getViewData();
e21450c9   Dmytry Fedorchuk   SEO
47
          foreach ($seoData as $key => $value) {
3f2bc3d0   Administrator   first commit
48
49
              $this->$key = $value;
          }
446efeeb   Dmytry Fedorchuk   SEO
50
   
3f2bc3d0   Administrator   first commit
51
52
53
54
55
56
57
58
59
60
61
  
          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...
62
63
64
65
66
67
68
69
70
71
72
73
74
75
                  $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
76
77
78
79
  
                  $title = $this->selectSeoData(self::TITLE);
  
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
80
81
82
  //                if(!empty($filter_row)){
  //                    return $filter_row;
  //                }
1f3add0a   Dmytry Fedorchuk   All seo
83
  
dc6809dc   Administrator   23.06.16
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
                  if(!empty($filter)) {
  
                      $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;
                      }
  
                      if (isset($filter['options']["pol"]) && count($filter['options']["pol"]) == 1) {
  
                          $model = TaxOption::find()->where(['alias' => $filter['options']["pol"]])->one();
                          $array['sex'] = $model->value->value;
  
  
                      }
  
                      if (isset($filter['options']["naznacenie"]) && count($filter['options']["naznacenie"]) == 1) {
  
                          $model = TaxOption::find()->where(['alias' => $filter['options']["naznacenie"]])->one();
                          $array['naz'] = $model->value->value;
  
                      }
  
                      if (isset($filter['options']["god"]) && count($filter['options']["god"]) == 1) {
  
                          $model = TaxOption::find()->where(['alias' => $filter['options']["god"]])->one();
                          $array['year'] = $model->value->value;
  
                      }
                      return $this->getTitleString($array);
  
                  } else if (!empty($title)) {
baa8bcaf   Dmytry Fedorchuk   All seo
121
                      return $title;
d0108705   Dmytry Fedorchuk   All seo
122
123
                  } else  {
                      return $this->project_name;
1f3add0a   Dmytry Fedorchuk   All seo
124
                  }
1f3add0a   Dmytry Fedorchuk   All seo
125
  
3f2bc3d0   Administrator   first commit
126
127
128
129
                  break;
              case self::DESCRIPTION:
                  $description = $this->selectSeoData(self::DESCRIPTION);
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
130
                  if (!empty($description)) {
3f2bc3d0   Administrator   first commit
131
132
133
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
0d0c080c   Dmytry Fedorchuk   seo module filter...
134
                          'content' => $description
3f2bc3d0   Administrator   first commit
135
136
137
138
139
                      ]);
  
                  }
  
                  break;
0d0c080c   Dmytry Fedorchuk   seo module filter...
140
141
142
143
              case self::META:
                  $meta = $this->selectSeoData(self::META);
  
                  $filter = \Yii::$app->request->get('filter', []);
e21450c9   Dmytry Fedorchuk   SEO
144
                  $sort = \Yii::$app->request->get('sort', []);
0e51e661   Dmytry Fedorchuk   paginate seo
145
                  $paginate = \Yii::$app->request->get('page', []);
e21450c9   Dmytry Fedorchuk   SEO
146
                  if (!empty($meta)) {
0d0c080c   Dmytry Fedorchuk   seo module filter...
147
148
149
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
e21450c9   Dmytry Fedorchuk   SEO
150
                          'content' => $meta
0d0c080c   Dmytry Fedorchuk   seo module filter...
151
152
                      ]);
  
446efeeb   Dmytry Fedorchuk   SEO
153
                  } else if (
0d0c080c   Dmytry Fedorchuk   seo module filter...
154
155
156
157
                      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...
158
  
e21450c9   Dmytry Fedorchuk   SEO
159
160
161
162
163
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
0d0c080c   Dmytry Fedorchuk   seo module filter...
164
  
e21450c9   Dmytry Fedorchuk   SEO
165
166
167
                  } 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
0e51e661   Dmytry Fedorchuk   paginate seo
168
                      || !empty($sort) ||  !empty($paginate) || isset($filter['prices'])
e21450c9   Dmytry Fedorchuk   SEO
169
170
171
172
173
174
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
                  } else {
0d0c080c   Dmytry Fedorchuk   seo module filter...
175
  
e21450c9   Dmytry Fedorchuk   SEO
176
177
178
179
180
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
                  }
0d0c080c   Dmytry Fedorchuk   seo module filter...
181
182
183
  
  
                  break;
3f2bc3d0   Administrator   first commit
184
185
186
187
188
189
190
191
          }
  
  
      }
  
      protected function replaceData($str)
      {
  
e21450c9   Dmytry Fedorchuk   SEO
192
193
194
          if (!empty($this->fields)) {
              foreach ($this->fields as $field_name => $field_value) {
                  $str = str_replace('{' . $field_name . '}', $field_value, $str);
3f2bc3d0   Administrator   first commit
195
196
197
              }
          }
          $str = str_replace('{project_name}', $this->project_name, $str);
4495dea0   Administrator   проапдейтил роли
198
          return $str;
3f2bc3d0   Administrator   first commit
199
200
201
202
      }
  
      protected function findSeoByUrl()
      {
e21450c9   Dmytry Fedorchuk   SEO
203
          return \common\models\Seo::findOne(['url' => $this->url]);
3f2bc3d0   Administrator   first commit
204
205
206
207
      }
  
      protected function findSeoByDynamic()
      {
1f3add0a   Dmytry Fedorchuk   All seo
208
209
210
211
212
213
214
  
          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]);
3f2bc3d0   Administrator   first commit
215
          }
1f3add0a   Dmytry Fedorchuk   All seo
216
  
3f2bc3d0   Administrator   first commit
217
218
219
220
          return $query->one();
      }
  
  
e21450c9   Dmytry Fedorchuk   SEO
221
222
      protected function getViewData()
      {
3f2bc3d0   Administrator   first commit
223
          $params = $this->getView()->params;
e21450c9   Dmytry Fedorchuk   SEO
224
          if (isset($params['seo'])) {
3f2bc3d0   Administrator   first commit
225
226
227
228
229
230
              return $params['seo'];
          } else {
              return [];
          }
      }
  
e21450c9   Dmytry Fedorchuk   SEO
231
232
      protected function selectSeoData($param)
      {
3f2bc3d0   Administrator   first commit
233
234
235
236
          $result = '';
  
          $widgetData = $this->findSeoByUrl();
  
e21450c9   Dmytry Fedorchuk   SEO
237
          if ($widgetData instanceof \common\models\Seo) {
3f2bc3d0   Administrator   first commit
238
  
e21450c9   Dmytry Fedorchuk   SEO
239
              $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
240
  
e21450c9   Dmytry Fedorchuk   SEO
241
          } else if (!empty($this->$param)) {
3f2bc3d0   Administrator   first commit
242
243
  
              $result = $this->$param;
3f2bc3d0   Administrator   first commit
244
245
246
247
          } else {
  
              $widgetData = $this->findSeoByDynamic();
  
e21450c9   Dmytry Fedorchuk   SEO
248
              if ($widgetData instanceof SeoDynamic) {
3f2bc3d0   Administrator   first commit
249
  
e21450c9   Dmytry Fedorchuk   SEO
250
                  $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
251
252
253
254
255
256
257
258
259
  
              }
  
          }
  
          return $this->replaceData($result);
  
      }
  
1f3add0a   Dmytry Fedorchuk   All seo
260
261
262
      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
263
              $template = str_replace('{' . $field_name . '}', mb_strtolower($field_value), $template);
1f3add0a   Dmytry Fedorchuk   All seo
264
265
266
267
268
269
          }
          $template =  preg_replace('/\{.[^\}]*\}\s/','',$template);
          return $template;
  
      }
  
3f2bc3d0   Administrator   first commit
270
271
  
  }