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
|
|
b161c194
Administrator
14.09.16
|
102
|
$filter = \Yii::$app->request->get('filters', []);
|
3da72a43
Administrator
14.09.16
|
103
|
|
9270bbe6
Alex Savenko
seo h1 fix
|
104
|
$default = $this->selectSeoData(self::H1, $priority);
|
3da72a43
Administrator
14.09.16
|
105
|
|
9270bbe6
Alex Savenko
seo h1 fix
|
106
|
if (($default != $this->{self::H1}) || $priority == 1) {
|
3da72a43
Administrator
14.09.16
|
107
|
|
b161c194
Administrator
14.09.16
|
108
|
return $default;
|
9511ef18
Alex Savenko
seo h1 fix
|
109
110
111
112
113
114
115
116
117
118
119
|
} else if(!empty($filter) && !$this->checkFilter($filter)){
$array = $this->arrayBuilder($filter);
return $this->getNameString($array);
}
else {
return $default;
}
|
9fa9adf7
Administrator
14.09.16
|
120
|
break;
|
3f2bc3d0
Administrator
first commit
|
121
122
|
case self::TITLE:
|
a4d63ed9
Administrator
20.07.16
|
123
|
$filter = \Yii::$app->request->get('filters', []);
|
1c02ab59
Administrator
29.06.16
|
124
|
|
3f2bc3d0
Administrator
first commit
|
125
126
127
|
$title = $this->selectSeoData(self::TITLE);
|
1c02ab59
Administrator
29.06.16
|
128
|
|
ac8ab861
Administrator
20.07.16
|
129
|
if(!empty($filter) && isset($this->fields['meta-title']) && $title == $this->fields['meta-title']) {
|
dc6809dc
Administrator
23.06.16
|
130
131
132
133
134
135
136
137
|
$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
|
138
139
140
141
142
143
|
if(!$model instanceof Brand){
\Yii::$app->response->redirect(['/site/error'],404);
} else {
$array['brand'] = $model->name;
}
|
dc6809dc
Administrator
23.06.16
|
144
|
|
dc6809dc
Administrator
23.06.16
|
145
146
|
}
|
dc6809dc
Administrator
23.06.16
|
147
|
|
dc6809dc
Administrator
23.06.16
|
148
|
|
bdc6c84c
Administrator
14.09.16
|
149
|
foreach(self::$optionsList as $optionList){
|
dc6809dc
Administrator
23.06.16
|
150
|
|
dc6809dc
Administrator
23.06.16
|
151
|
|
466144f8
Administrator
20.07.16
|
152
|
if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
|
dc6809dc
Administrator
23.06.16
|
153
|
|
466144f8
Administrator
20.07.16
|
154
|
$model = TaxOption::find()->where(['alias' =>$filter[$optionList]])->one();
|
38b2f003
Administrator
20.07.16
|
155
156
157
158
159
160
161
|
if(!$model instanceof TaxOption){
\Yii::$app->response->redirect(['site/error'],404);
} else {
$array[$optionList] = $model->value->value;
}
|
466144f8
Administrator
20.07.16
|
162
163
164
|
}
|
dc6809dc
Administrator
23.06.16
|
165
|
|
dc6809dc
Administrator
23.06.16
|
166
|
|
dc6809dc
Administrator
23.06.16
|
167
168
|
}
|
7f7c8e5e
Dmytry Fedorchuk
Seo brand
|
169
|
|
466144f8
Administrator
20.07.16
|
170
171
172
|
$title_string = $this->getTitleString($array);
if($title_string){
|
d29a2cfa
Yarik
Seo fix
|
173
|
return $this->my_mb_ucfirst(trim($title_string));
|
466144f8
Administrator
20.07.16
|
174
|
}
|
dc6809dc
Administrator
23.06.16
|
175
|
|
466144f8
Administrator
20.07.16
|
176
177
178
|
}
if (!empty($title)) {
|
d482cb6f
Administrator
29.06.16
|
179
|
return $title;
|
7f7c8e5e
Dmytry Fedorchuk
Seo brand
|
180
|
} else {
|
d482cb6f
Administrator
29.06.16
|
181
|
return $this->project_name;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
182
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
183
|
|
3f2bc3d0
Administrator
first commit
|
184
185
186
187
|
break;
case self::DESCRIPTION:
$description = $this->selectSeoData(self::DESCRIPTION);
|
3f2bc3d0
Administrator
first commit
|
188
|
|
7d1462af
Administrator
14.09.16
|
189
190
191
192
|
$filter = \Yii::$app->request->get('filters', []);
if(!empty($filter) && $description == $this->{self::DESCRIPTION}){
$array = $this->arrayBuilder($filter);
|
3f2bc3d0
Administrator
first commit
|
193
194
|
$this->getView()->registerMetaTag([
'name' => 'description',
|
7d1462af
Administrator
14.09.16
|
195
|
'content' => $this->getDescriptionString($array)
|
3f2bc3d0
Administrator
first commit
|
196
|
]);
|
419a21c1
Administrator
14.09.16
|
197
|
}elseif (!empty($description)) {
|
9fa9adf7
Administrator
14.09.16
|
198
|
|
7d1462af
Administrator
14.09.16
|
199
200
201
202
|
$this->getView()->registerMetaTag([
'name' => 'description',
'content' => $description
]);
|
9fa9adf7
Administrator
14.09.16
|
203
|
|
3f2bc3d0
Administrator
first commit
|
204
205
206
|
}
break;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
207
|
case self::META:
|
e8923005
Administrator
29.06.16
|
208
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
209
210
|
$meta = $this->selectSeoData(self::META);
|
f5bc3759
Administrator
20.07.16
|
211
|
$filter = \Yii::$app->request->get('filters', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
212
|
$sort = \Yii::$app->request->get('sort', []);
|
0e51e661
Dmytry Fedorchuk
paginate seo
|
213
|
$paginate = \Yii::$app->request->get('page', []);
|
04a908d9
Alex Savenko
get param "langua...
|
214
|
$language = \Yii::$app->request->get('language', []);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
215
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
216
|
|
64e48993
Administrator
14.09.16
|
217
|
|
9fa9adf7
Administrator
14.09.16
|
218
|
if (!empty($meta) && empty($sort) && empty($paginate) && !isset($filter['prices']) ) {
|
e57ad02f
Administrator
14.09.16
|
219
220
221
|
$this->getView()->registerMetaTag([
'name' => 'robots',
|
9fa9adf7
Administrator
14.09.16
|
222
|
'content' => $meta
|
e57ad02f
Administrator
14.09.16
|
223
224
|
]);
|
9fa9adf7
Administrator
14.09.16
|
225
|
} else if(!empty($filter['special'])){
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
226
|
|
8afa1bf2
Administrator
29.06.16
|
227
228
229
230
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
231
|
|
8afa1bf2
Administrator
29.06.16
|
232
|
} else if (
|
9fa9adf7
Administrator
14.09.16
|
233
234
|
isset($filter['brands']) && count($filter['brands']) > 1
|| isset($filter) && $this->checkFilter($filter)|| !empty($sort) || !empty($paginate) || isset($filter['prices'])
|
e8923005
Administrator
29.06.16
|
235
|
|
8afa1bf2
Administrator
29.06.16
|
236
|
) {
|
9fa9adf7
Administrator
14.09.16
|
237
238
|
|
8afa1bf2
Administrator
29.06.16
|
239
240
241
242
243
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
|
9fa9adf7
Administrator
14.09.16
|
244
|
} else if ( isset($filter) && count($filter, COUNT_RECURSIVE) > 4) {
|
8afa1bf2
Administrator
29.06.16
|
245
246
247
248
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
|
9fa9adf7
Administrator
14.09.16
|
249
|
}
|
fc89c3de
Alex Savenko
get param "langua...
|
250
|
else if (isset($language) && $language == 'ua') {
|
1964a4cf
Alex Savenko
get param "langua...
|
251
252
253
254
255
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
}
|
9fa9adf7
Administrator
14.09.16
|
256
|
else {
|
8afa1bf2
Administrator
29.06.16
|
257
258
259
260
261
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'index,follow'
]);
|
e21450c9
Dmytry Fedorchuk
SEO
|
262
|
}
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
263
264
|
|
e8923005
Administrator
29.06.16
|
265
266
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
267
|
break;
|
3f2bc3d0
Administrator
first commit
|
268
269
270
271
272
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
273
274
275
|
protected function checkFilter($filter){
|
bdc6c84c
Administrator
14.09.16
|
276
277
|
foreach(self::$optionsList as $optionList){
|
7b18ef88
Administrator
14.09.16
|
278
|
if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){
|
efa83867
Administrator
14.09.16
|
279
|
return true;
|
7b18ef88
Administrator
14.09.16
|
280
|
}
|
bdc6c84c
Administrator
14.09.16
|
281
282
|
}
|
efa83867
Administrator
14.09.16
|
283
|
return false;
|
bdc6c84c
Administrator
14.09.16
|
284
285
|
}
|
3f2bc3d0
Administrator
first commit
|
286
287
288
|
protected function replaceData($str)
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
289
290
291
|
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
|
3f2bc3d0
Administrator
first commit
|
292
293
294
|
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
|
4495dea0
Administrator
проапдейтил роли
|
295
|
return $str;
|
3f2bc3d0
Administrator
first commit
|
296
297
|
}
|
1b898c16
Administrator
20.07.16
|
298
|
protected static function findSeoByUrl($url)
|
3f2bc3d0
Administrator
first commit
|
299
|
{
|
1b898c16
Administrator
20.07.16
|
300
301
302
303
304
|
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
|
305
306
307
308
|
}
protected function findSeoByDynamic()
{
|
1f3add0a
Dmytry Fedorchuk
All seo
|
309
310
311
312
313
314
|
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
|
315
|
|
1f3add0a
Dmytry Fedorchuk
All seo
|
316
|
$query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
|
3f2bc3d0
Administrator
first commit
|
317
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
318
|
|
3f2bc3d0
Administrator
first commit
|
319
320
321
|
return $query->one();
}
|
466144f8
Administrator
20.07.16
|
322
323
324
325
|
protected function findSeoByDynamicForFilters(){
return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
326
327
|
protected function getViewData()
{
|
3f2bc3d0
Administrator
first commit
|
328
|
$params = $this->getView()->params;
|
e21450c9
Dmytry Fedorchuk
SEO
|
329
|
if (isset($params['seo'])) {
|
3f2bc3d0
Administrator
first commit
|
330
331
332
333
334
335
|
return $params['seo'];
} else {
return [];
}
}
|
9270bbe6
Alex Savenko
seo h1 fix
|
336
|
protected function selectSeoData($param, &$priority)
|
e21450c9
Dmytry Fedorchuk
SEO
|
337
|
{
|
3f2bc3d0
Administrator
first commit
|
338
339
|
$result = '';
|
1b898c16
Administrator
20.07.16
|
340
|
$widgetData = static::findSeoByUrl($this->url);
|
9fa9adf7
Administrator
14.09.16
|
341
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
342
|
if ($widgetData instanceof \common\models\Seo) {
|
3f2bc3d0
Administrator
first commit
|
343
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
344
|
$result = $widgetData->$param;
|
9270bbe6
Alex Savenko
seo h1 fix
|
345
|
$priority = 1;
|
3f2bc3d0
Administrator
first commit
|
346
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
347
|
} else if (!empty($this->$param)) {
|
9270bbe6
Alex Savenko
seo h1 fix
|
348
|
|
3f2bc3d0
Administrator
first commit
|
349
|
$result = $this->$param;
|
9270bbe6
Alex Savenko
seo h1 fix
|
350
|
$priority = 2;
|
9fa9adf7
Administrator
14.09.16
|
351
|
|
3f2bc3d0
Administrator
first commit
|
352
353
354
|
} else {
$widgetData = $this->findSeoByDynamic();
|
9fa9adf7
Administrator
14.09.16
|
355
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
356
|
if ($widgetData instanceof SeoDynamic) {
|
3f2bc3d0
Administrator
first commit
|
357
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
358
|
$result = $widgetData->$param;
|
9270bbe6
Alex Savenko
seo h1 fix
|
359
|
$priority = 3;
|
3f2bc3d0
Administrator
first commit
|
360
361
362
363
364
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
365
|
return $this->replaceData($result);
|
3f2bc3d0
Administrator
first commit
|
366
367
368
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
369
|
public function getTitleString($array){
|
466144f8
Administrator
20.07.16
|
370
371
372
373
374
375
376
377
|
$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
|
378
|
}
|
466144f8
Administrator
20.07.16
|
379
380
|
return false;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
381
382
|
}
|
9fa9adf7
Administrator
14.09.16
|
383
|
|
d29a2cfa
Yarik
Seo fix
|
384
385
386
387
388
|
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
|
389
|
|
9fa9adf7
Administrator
14.09.16
|
390
391
392
393
394
395
396
397
|
public function getDescriptionString($array){
// "{Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. по самой лучшей цене с гарантией от производителя - Ruzkachok.com.ua";
$row = '';
foreach($array as $name => $field){
if($name == 'category' ){
$row = $field.' '.$row;
} else {
|
16688be2
Administrator
14.09.16
|
398
|
$row .= $field['value'].' ' ;
|
9fa9adf7
Administrator
14.09.16
|
399
400
401
402
403
|
}
}
|
9fa9adf7
Administrator
14.09.16
|
404
405
406
407
408
|
$row .= " по самой лучшей цене с гарантией от производителя - Ruzkachok.com.ua";
return $row;
}
|
9fa9adf7
Administrator
14.09.16
|
409
410
411
412
413
414
415
|
public function getNameString($array){
$row = '';
foreach($array as $name => $field){
if($name == 'category' ){
$row = $field.' '.$row;
} else {
|
b161c194
Administrator
14.09.16
|
416
|
$row .= $field['value'].' ' ;
|
9fa9adf7
Administrator
14.09.16
|
417
418
419
420
421
|
}
}
|
b161c194
Administrator
14.09.16
|
422
|
|
9fa9adf7
Administrator
14.09.16
|
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
|
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 {
|
b161c194
Administrator
14.09.16
|
461
|
$array[$optionList]['value'] = $model->value->value;
|
9fa9adf7
Administrator
14.09.16
|
462
463
464
465
466
467
468
469
470
471
472
473
474
|
$array[$optionList]['name'] = $name;
}
}
}
return $array;
}
|
3f2bc3d0
Administrator
first commit
|
475
|
}
|