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