Blame view

frontend/widgets/Seo.php 6.66 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
  
40366ecb   Dmytry Fedorchuk   All seo
84
                   if (!empty($title)) {
baa8bcaf   Dmytry Fedorchuk   All seo
85
                      return $title;
d0108705   Dmytry Fedorchuk   All seo
86
87
                  } else  {
                      return $this->project_name;
1f3add0a   Dmytry Fedorchuk   All seo
88
                  }
1f3add0a   Dmytry Fedorchuk   All seo
89
  
3f2bc3d0   Administrator   first commit
90
91
92
93
                  break;
              case self::DESCRIPTION:
                  $description = $this->selectSeoData(self::DESCRIPTION);
  
0d0c080c   Dmytry Fedorchuk   seo module filter...
94
                  if (!empty($description)) {
3f2bc3d0   Administrator   first commit
95
96
97
  
                      $this->getView()->registerMetaTag([
                          'name' => 'description',
0d0c080c   Dmytry Fedorchuk   seo module filter...
98
                          'content' => $description
3f2bc3d0   Administrator   first commit
99
100
101
102
103
                      ]);
  
                  }
  
                  break;
0d0c080c   Dmytry Fedorchuk   seo module filter...
104
105
106
107
              case self::META:
                  $meta = $this->selectSeoData(self::META);
  
                  $filter = \Yii::$app->request->get('filter', []);
e21450c9   Dmytry Fedorchuk   SEO
108
                  $sort = \Yii::$app->request->get('sort', []);
0e51e661   Dmytry Fedorchuk   paginate seo
109
                  $paginate = \Yii::$app->request->get('page', []);
e21450c9   Dmytry Fedorchuk   SEO
110
                  if (!empty($meta)) {
0d0c080c   Dmytry Fedorchuk   seo module filter...
111
112
113
  
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
e21450c9   Dmytry Fedorchuk   SEO
114
                          'content' => $meta
0d0c080c   Dmytry Fedorchuk   seo module filter...
115
116
                      ]);
  
446efeeb   Dmytry Fedorchuk   SEO
117
                  } else if (
0d0c080c   Dmytry Fedorchuk   seo module filter...
118
119
120
121
                      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...
122
  
e21450c9   Dmytry Fedorchuk   SEO
123
124
125
126
127
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,nofollow'
                      ]);
0d0c080c   Dmytry Fedorchuk   seo module filter...
128
  
e21450c9   Dmytry Fedorchuk   SEO
129
130
131
                  } 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
132
                      || !empty($sort) ||  !empty($paginate) || isset($filter['prices'])
e21450c9   Dmytry Fedorchuk   SEO
133
134
135
136
137
138
                  ) {
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'noindex,follow'
                      ]);
                  } else {
0d0c080c   Dmytry Fedorchuk   seo module filter...
139
  
e21450c9   Dmytry Fedorchuk   SEO
140
141
142
143
144
                      $this->getView()->registerMetaTag([
                          'name' => 'robots',
                          'content' => 'index,follow'
                      ]);
                  }
0d0c080c   Dmytry Fedorchuk   seo module filter...
145
146
147
  
  
                  break;
3f2bc3d0   Administrator   first commit
148
149
150
151
152
153
154
155
          }
  
  
      }
  
      protected function replaceData($str)
      {
  
e21450c9   Dmytry Fedorchuk   SEO
156
157
158
          if (!empty($this->fields)) {
              foreach ($this->fields as $field_name => $field_value) {
                  $str = str_replace('{' . $field_name . '}', $field_value, $str);
3f2bc3d0   Administrator   first commit
159
160
161
              }
          }
          $str = str_replace('{project_name}', $this->project_name, $str);
4495dea0   Administrator   проапдейтил роли
162
          return $str;
3f2bc3d0   Administrator   first commit
163
164
165
166
      }
  
      protected function findSeoByUrl()
      {
e21450c9   Dmytry Fedorchuk   SEO
167
          return \common\models\Seo::findOne(['url' => $this->url]);
3f2bc3d0   Administrator   first commit
168
169
170
171
      }
  
      protected function findSeoByDynamic()
      {
1f3add0a   Dmytry Fedorchuk   All seo
172
173
174
175
176
177
178
  
          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
179
          }
1f3add0a   Dmytry Fedorchuk   All seo
180
  
3f2bc3d0   Administrator   first commit
181
182
183
184
          return $query->one();
      }
  
  
e21450c9   Dmytry Fedorchuk   SEO
185
186
      protected function getViewData()
      {
3f2bc3d0   Administrator   first commit
187
          $params = $this->getView()->params;
e21450c9   Dmytry Fedorchuk   SEO
188
          if (isset($params['seo'])) {
3f2bc3d0   Administrator   first commit
189
190
191
192
193
194
              return $params['seo'];
          } else {
              return [];
          }
      }
  
e21450c9   Dmytry Fedorchuk   SEO
195
196
      protected function selectSeoData($param)
      {
3f2bc3d0   Administrator   first commit
197
198
199
200
          $result = '';
  
          $widgetData = $this->findSeoByUrl();
  
e21450c9   Dmytry Fedorchuk   SEO
201
          if ($widgetData instanceof \common\models\Seo) {
3f2bc3d0   Administrator   first commit
202
  
e21450c9   Dmytry Fedorchuk   SEO
203
              $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
204
  
e21450c9   Dmytry Fedorchuk   SEO
205
          } else if (!empty($this->$param)) {
3f2bc3d0   Administrator   first commit
206
207
  
              $result = $this->$param;
3f2bc3d0   Administrator   first commit
208
209
210
211
          } else {
  
              $widgetData = $this->findSeoByDynamic();
  
e21450c9   Dmytry Fedorchuk   SEO
212
              if ($widgetData instanceof SeoDynamic) {
3f2bc3d0   Administrator   first commit
213
  
e21450c9   Dmytry Fedorchuk   SEO
214
                  $result = $widgetData->$param;
3f2bc3d0   Administrator   first commit
215
216
217
218
219
220
221
222
223
  
              }
  
          }
  
          return $this->replaceData($result);
  
      }
  
1f3add0a   Dmytry Fedorchuk   All seo
224
225
226
227
228
229
230
231
232
233
      public function getTitleString($array){
          $template = "{category} {naz} {brand}  {sex} {year} купить в Украине, Киев, Харькове - цены, фото, отзывы | Rukzachok.com.ua";
          foreach ($array as $field_name => $field_value) {
              $template = str_replace('{' . $field_name . '}', $field_value, $template);
          }
          $template =  preg_replace('/\{.[^\}]*\}\s/','',$template);
          return $template;
  
      }
  
3f2bc3d0   Administrator   first commit
234
235
  
  }