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