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
|
use common\modules\product\models\Brand;
|
466144f8
Administrator
20.07.16
|
6
|
use common\modules\rubrication\models\TaxGroup;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
7
|
use common\modules\rubrication\models\TaxOption;
|
3f2bc3d0
Administrator
first commit
|
8
|
use yii\base\Widget;
|
466144f8
Administrator
20.07.16
|
9
|
use yii\helpers\ArrayHelper;
|
3f2bc3d0
Administrator
first commit
|
10
11
12
13
|
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;
|
bdc6c84c
Administrator
14.09.16
|
26
|
public static $optionsList;
|
1b898c16
Administrator
20.07.16
|
27
28
|
protected static $check_url;
protected static $check_url_bool;
|
7d20bafe
Dmytry Fedorchuk
htacess www
|
29
30
|
|
3f2bc3d0
Administrator
first commit
|
31
32
|
const SEO_TEXT = 'seo_text';
const DESCRIPTION = 'description';
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
33
|
const META = 'meta';
|
3f2bc3d0
Administrator
first commit
|
34
35
36
|
const H1 = 'h1';
const TITLE = 'title';
|
e21450c9
Dmytry Fedorchuk
SEO
|
37
38
39
40
|
public function init()
{
$this->url = \Yii::$app->request->url;
$this->project_name = \Yii::$app->name;
|
bdc6c84c
Administrator
14.09.16
|
41
42
43
44
|
if(empty(self::$optionsList)){
self::$optionsList = ArrayHelper::getColumn(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(),'alias');
}
|
3f2bc3d0
Administrator
first commit
|
45
46
47
48
49
50
51
52
53
|
parent::init();
}
public function run()
{
$seoData = $this->getViewData();
|
bdc6c84c
Administrator
14.09.16
|
54
55
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
56
|
foreach ($seoData as $key => $value) {
|
3f2bc3d0
Administrator
first commit
|
57
58
|
$this->$key = $value;
}
|
9fa9adf7
Administrator
14.09.16
|
59
|
|
3f2bc3d0
Administrator
first commit
|
60
61
62
|
switch ($this->row) {
case self::SEO_TEXT:
|
54330e07
Administrator
29.06.16
|
63
64
|
|
a4d63ed9
Administrator
20.07.16
|
65
|
$filter = \Yii::$app->request->get('filters', []);
|
54330e07
Administrator
29.06.16
|
66
67
68
69
70
71
72
73
74
|
$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
|
75
|
$widgetData = static::findSeoByUrl($this->url);
|
54330e07
Administrator
29.06.16
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
$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
|
98
99
100
|
break;
case self::H1:
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
101
|
|
a4d63ed9
Administrator
20.07.16
|
102
|
$filter = \Yii::$app->request->get('filters', []);
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
103
|
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
104
|
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
105
|
|
3da72a43
Administrator
14.09.16
|
106
|
if (isset($filter['brands']) && count($filter['brands']) == 1) {
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
107
|
|
3da72a43
Administrator
14.09.16
|
108
109
|
$model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
if(!$model instanceof Brand){
|
e57ad02f
Administrator
14.09.16
|
110
|
|
3da72a43
Administrator
14.09.16
|
111
112
113
|
\Yii::$app->response->redirect(['/site/error'],404);
} else {
if($this->selectSeoData(self::H1) == $this->category_name) {
|
e57ad02f
Administrator
14.09.16
|
114
|
|
3da72a43
Administrator
14.09.16
|
115
116
117
118
119
120
121
|
return $this->selectSeoData(self::H1) . ' ' . $model->name ;
}else {
return $this->selectSeoData(self::H1);
}
}
|
e57ad02f
Administrator
14.09.16
|
122
|
|
3da72a43
Administrator
14.09.16
|
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
} else if (isset($filter["naznacenie"]) && count($filter["naznacenie"]) == 1) {
$model = TaxOption::find()->where(['alias' => $filter["naznacenie"]])->one();
if(!$model instanceof TaxOption){
\Yii::$app->response->redirect(['/site/error'],404);
} else {
if($this->selectSeoData(self::H1) == $this->category_name) {
return $this->selectSeoData(self::H1) . ' ' . $model->value->value;
}else {
return $this->selectSeoData(self::H1);
}
}
} else {
return $this->selectSeoData(self::H1);
|
4b4be5ea
Administrator
29.06.16
|
147
|
}
|
9fa9adf7
Administrator
14.09.16
|
148
|
break;
|
3f2bc3d0
Administrator
first commit
|
149
150
|
case self::TITLE:
|
a4d63ed9
Administrator
20.07.16
|
151
|
$filter = \Yii::$app->request->get('filters', []);
|
1c02ab59
Administrator
29.06.16
|
152
|
|
3f2bc3d0
Administrator
first commit
|
153
154
155
|
$title = $this->selectSeoData(self::TITLE);
|
1c02ab59
Administrator
29.06.16
|
156
|
|
ac8ab861
Administrator
20.07.16
|
157
|
if(!empty($filter) && isset($this->fields['meta-title']) && $title == $this->fields['meta-title']) {
|
dc6809dc
Administrator
23.06.16
|
158
159
160
161
162
163
164
165
|
$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
|
166
167
168
169
170
171
|
if(!$model instanceof Brand){
\Yii::$app->response->redirect(['/site/error'],404);
} else {
$array['brand'] = $model->name;
}
|
dc6809dc
Administrator
23.06.16
|
172
|
|
dc6809dc
Administrator
23.06.16
|
173
174
|
}
|
dc6809dc
Administrator
23.06.16
|
175
|
|
dc6809dc
Administrator
23.06.16
|
176
|
|
bdc6c84c
Administrator
14.09.16
|
177
|
foreach(self::$optionsList as $optionList){
|
dc6809dc
Administrator
23.06.16
|
178
|
|
dc6809dc
Administrator
23.06.16
|
179
|
|
466144f8
Administrator
20.07.16
|
180
|
if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
|
dc6809dc
Administrator
23.06.16
|
181
|
|
466144f8
Administrator
20.07.16
|
182
|
$model = TaxOption::find()->where(['alias' =>$filter[$optionList]])->one();
|
38b2f003
Administrator
20.07.16
|
183
184
185
186
187
188
189
|
if(!$model instanceof TaxOption){
\Yii::$app->response->redirect(['site/error'],404);
} else {
$array[$optionList] = $model->value->value;
}
|
466144f8
Administrator
20.07.16
|
190
191
192
|
}
|
dc6809dc
Administrator
23.06.16
|
193
|
|
dc6809dc
Administrator
23.06.16
|
194
|
|
dc6809dc
Administrator
23.06.16
|
195
196
|
}
|
7f7c8e5e
Dmytry Fedorchuk
Seo brand
|
197
|
|
466144f8
Administrator
20.07.16
|
198
199
200
|
$title_string = $this->getTitleString($array);
if($title_string){
|
d29a2cfa
Yarik
Seo fix
|
201
|
return $this->my_mb_ucfirst(trim($title_string));
|
466144f8
Administrator
20.07.16
|
202
|
}
|
dc6809dc
Administrator
23.06.16
|
203
|
|
466144f8
Administrator
20.07.16
|
204
205
206
|
}
if (!empty($title)) {
|
d482cb6f
Administrator
29.06.16
|
207
|
return $title;
|
7f7c8e5e
Dmytry Fedorchuk
Seo brand
|
208
|
} else {
|
d482cb6f
Administrator
29.06.16
|
209
|
return $this->project_name;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
210
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
211
|
|
3f2bc3d0
Administrator
first commit
|
212
213
214
215
|
break;
case self::DESCRIPTION:
$description = $this->selectSeoData(self::DESCRIPTION);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
216
|
if (!empty($description)) {
|
3f2bc3d0
Administrator
first commit
|
217
218
219
|
$this->getView()->registerMetaTag([
'name' => 'description',
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
220
|
'content' => $description
|
3f2bc3d0
Administrator
first commit
|
221
222
|
]);
|
9fa9adf7
Administrator
14.09.16
|
223
224
225
226
227
228
229
230
231
232
233
234
|
} else {
$filter = \Yii::$app->request->get('filters', []);
if(!empty($filter)){
$array = $this->arrayBuilder($filter);
$this->getView()->registerMetaTag([
'name' => 'description',
'content' => $this->getDescriptionString($array)
]);
}
|
3f2bc3d0
Administrator
first commit
|
235
236
237
|
}
break;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
238
|
case self::META:
|
e8923005
Administrator
29.06.16
|
239
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
240
241
|
$meta = $this->selectSeoData(self::META);
|
f5bc3759
Administrator
20.07.16
|
242
|
$filter = \Yii::$app->request->get('filters', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
243
|
$sort = \Yii::$app->request->get('sort', []);
|
0e51e661
Dmytry Fedorchuk
paginate seo
|
244
|
$paginate = \Yii::$app->request->get('page', []);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
245
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
246
|
|
64e48993
Administrator
14.09.16
|
247
|
|
9fa9adf7
Administrator
14.09.16
|
248
|
if (!empty($meta) && empty($sort) && empty($paginate) && !isset($filter['prices']) ) {
|
e57ad02f
Administrator
14.09.16
|
249
250
251
|
$this->getView()->registerMetaTag([
'name' => 'robots',
|
9fa9adf7
Administrator
14.09.16
|
252
|
'content' => $meta
|
e57ad02f
Administrator
14.09.16
|
253
254
|
]);
|
9fa9adf7
Administrator
14.09.16
|
255
|
} else if(!empty($filter['special'])){
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
256
|
|
8afa1bf2
Administrator
29.06.16
|
257
258
259
260
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
261
|
|
8afa1bf2
Administrator
29.06.16
|
262
|
} else if (
|
9fa9adf7
Administrator
14.09.16
|
263
264
|
isset($filter['brands']) && count($filter['brands']) > 1
|| isset($filter) && $this->checkFilter($filter)|| !empty($sort) || !empty($paginate) || isset($filter['prices'])
|
e8923005
Administrator
29.06.16
|
265
|
|
8afa1bf2
Administrator
29.06.16
|
266
|
) {
|
9fa9adf7
Administrator
14.09.16
|
267
268
|
|
8afa1bf2
Administrator
29.06.16
|
269
270
271
272
273
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
|
9fa9adf7
Administrator
14.09.16
|
274
|
} else if ( isset($filter) && count($filter, COUNT_RECURSIVE) > 4) {
|
8afa1bf2
Administrator
29.06.16
|
275
276
277
278
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
|
9fa9adf7
Administrator
14.09.16
|
279
280
|
}
else {
|
8afa1bf2
Administrator
29.06.16
|
281
282
283
284
285
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'index,follow'
]);
|
e21450c9
Dmytry Fedorchuk
SEO
|
286
|
}
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
287
288
|
|
e8923005
Administrator
29.06.16
|
289
290
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
291
|
break;
|
3f2bc3d0
Administrator
first commit
|
292
293
294
295
296
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
297
298
299
|
protected function checkFilter($filter){
|
bdc6c84c
Administrator
14.09.16
|
300
301
|
foreach(self::$optionsList as $optionList){
|
7b18ef88
Administrator
14.09.16
|
302
|
if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){
|
efa83867
Administrator
14.09.16
|
303
|
return true;
|
7b18ef88
Administrator
14.09.16
|
304
|
}
|
bdc6c84c
Administrator
14.09.16
|
305
306
|
}
|
efa83867
Administrator
14.09.16
|
307
|
return false;
|
bdc6c84c
Administrator
14.09.16
|
308
309
|
}
|
3f2bc3d0
Administrator
first commit
|
310
311
312
|
protected function replaceData($str)
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
313
314
315
|
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
|
3f2bc3d0
Administrator
first commit
|
316
317
318
|
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
|
4495dea0
Administrator
проапдейтил роли
|
319
|
return $str;
|
3f2bc3d0
Administrator
first commit
|
320
321
|
}
|
1b898c16
Administrator
20.07.16
|
322
|
protected static function findSeoByUrl($url)
|
3f2bc3d0
Administrator
first commit
|
323
|
{
|
1b898c16
Administrator
20.07.16
|
324
325
326
327
328
|
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
|
329
330
331
332
|
}
protected function findSeoByDynamic()
{
|
1f3add0a
Dmytry Fedorchuk
All seo
|
333
334
335
336
337
338
|
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
|
339
|
|
1f3add0a
Dmytry Fedorchuk
All seo
|
340
|
$query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
|
3f2bc3d0
Administrator
first commit
|
341
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
342
|
|
3f2bc3d0
Administrator
first commit
|
343
344
345
346
|
return $query->one();
}
|
466144f8
Administrator
20.07.16
|
347
348
349
350
351
|
protected function findSeoByDynamicForFilters(){
return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
352
353
|
protected function getViewData()
{
|
3f2bc3d0
Administrator
first commit
|
354
|
$params = $this->getView()->params;
|
e21450c9
Dmytry Fedorchuk
SEO
|
355
|
if (isset($params['seo'])) {
|
3f2bc3d0
Administrator
first commit
|
356
357
358
359
360
361
|
return $params['seo'];
} else {
return [];
}
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
362
363
|
protected function selectSeoData($param)
{
|
3f2bc3d0
Administrator
first commit
|
364
365
|
$result = '';
|
1b898c16
Administrator
20.07.16
|
366
|
$widgetData = static::findSeoByUrl($this->url);
|
9fa9adf7
Administrator
14.09.16
|
367
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
368
|
if ($widgetData instanceof \common\models\Seo) {
|
3f2bc3d0
Administrator
first commit
|
369
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
370
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
371
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
372
|
} else if (!empty($this->$param)) {
|
3f2bc3d0
Administrator
first commit
|
373
|
$result = $this->$param;
|
9fa9adf7
Administrator
14.09.16
|
374
|
|
3f2bc3d0
Administrator
first commit
|
375
376
377
|
} else {
$widgetData = $this->findSeoByDynamic();
|
9fa9adf7
Administrator
14.09.16
|
378
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
379
|
if ($widgetData instanceof SeoDynamic) {
|
3f2bc3d0
Administrator
first commit
|
380
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
381
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
382
383
384
385
386
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
387
|
return $this->replaceData($result);
|
3f2bc3d0
Administrator
first commit
|
388
389
390
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
391
|
public function getTitleString($array){
|
466144f8
Administrator
20.07.16
|
392
393
394
395
396
397
398
399
|
$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
|
400
|
}
|
466144f8
Administrator
20.07.16
|
401
402
|
return false;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
403
404
|
}
|
9fa9adf7
Administrator
14.09.16
|
405
|
|
d29a2cfa
Yarik
Seo fix
|
406
407
408
409
410
|
public function my_mb_ucfirst($str) {
$str = strtolower($str);
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
|
3f2bc3d0
Administrator
first commit
|
411
|
|
9fa9adf7
Administrator
14.09.16
|
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
|
public function getDescriptionString($array){
// "{Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. по самой лучшей цене с гарантией от производителя - Ruzkachok.com.ua";
$row = '';
foreach($array as $name => $field){
if($name == 'category' ){
$row = $field.' '.$row;
} else {
$row .= $field['name'] .' '.$field['value'].' ' ;
}
}
$row = substr($row, 0,-2 );
$row .= " по самой лучшей цене с гарантией от производителя - Ruzkachok.com.ua";
return $row;
}
public function getNameString($array){
$row = '';
foreach($array as $name => $field){
if($name == 'category' ){
$row = $field.' '.$row;
} else {
$row .= $field['name'] .' '.$field['value'].' ' ;
}
}
$row = substr($row, 0,-2 );
return $row;
}
public function arrayBuilder($filter)
{
$array = [
'category' => $this->category_name
];
if (isset($filter['brands']) && count($filter['brands']) == 1) {
$model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
if (!$model instanceof Brand) {
\Yii::$app->response->redirect(['/site/error'], 404);
} else {
$array['brand']['name'] = 'Бренд';
$array['brand']['value'] = $model->name;
}
}
$optionsList = ArrayHelper::map(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(), 'alias', 'name');
foreach ($optionsList as $optionList => $name) {
if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
$model = TaxOption::find()->where(['alias' => $filter[$optionList]])->one();
if (!$model instanceof TaxOption) {
\Yii::$app->response->redirect(['site/error'], 404);
} else {
$array[$optionList]['value'] = $model->value;
$array[$optionList]['name'] = $name;
}
}
}
return $array;
}
|
3f2bc3d0
Administrator
first commit
|
501
|
}
|