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;
}
|
446efeeb
Dmytry Fedorchuk
SEO
|
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
104
105
|
|
4b4be5ea
Administrator
29.06.16
|
106
|
if (isset($filter['brands']) && count($filter['brands']) == 1) {
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
107
|
|
4b4be5ea
Administrator
29.06.16
|
108
|
$model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
|
38b2f003
Administrator
20.07.16
|
109
|
if(!$model instanceof Brand){
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
110
|
|
38b2f003
Administrator
20.07.16
|
111
112
113
|
\Yii::$app->response->redirect(['/site/error'],404);
} else {
if($this->selectSeoData(self::H1) == $this->category_name) {
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
114
|
|
bdc6c84c
Administrator
14.09.16
|
115
|
return $this->selectSeoData(self::H1) . ' ' . $model->name ;
|
38b2f003
Administrator
20.07.16
|
116
|
}else {
|
d482cb6f
Administrator
29.06.16
|
117
|
|
38b2f003
Administrator
20.07.16
|
118
|
return $this->selectSeoData(self::H1);
|
9173c97b
Dmytry Fedorchuk
Seo naznach h1
|
119
|
|
38b2f003
Administrator
20.07.16
|
120
|
}
|
4b4be5ea
Administrator
29.06.16
|
121
|
}
|
9173c97b
Dmytry Fedorchuk
Seo naznach h1
|
122
|
|
38b2f003
Administrator
20.07.16
|
123
124
|
|
a4d63ed9
Administrator
20.07.16
|
125
|
} else if (isset($filter["naznacenie"]) && count($filter["naznacenie"]) == 1) {
|
9173c97b
Dmytry Fedorchuk
Seo naznach h1
|
126
|
|
a4d63ed9
Administrator
20.07.16
|
127
|
$model = TaxOption::find()->where(['alias' => $filter["naznacenie"]])->one();
|
38b2f003
Administrator
20.07.16
|
128
129
130
131
132
|
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
|
133
|
|
bdc6c84c
Administrator
14.09.16
|
134
|
return $this->selectSeoData(self::H1) . ' ' . $model->value->value;
|
38b2f003
Administrator
20.07.16
|
135
|
}else {
|
63e7825d
Administrator
29.06.16
|
136
|
|
38b2f003
Administrator
20.07.16
|
137
138
139
|
return $this->selectSeoData(self::H1);
}
|
63e7825d
Administrator
29.06.16
|
140
141
142
|
}
|
d482cb6f
Administrator
29.06.16
|
143
144
|
|
4b4be5ea
Administrator
29.06.16
|
145
146
147
|
} else {
return $this->selectSeoData(self::H1);
}
|
51774c5a
Dmytry Fedorchuk
Seo brand
|
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
223
224
225
|
]);
}
break;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
226
|
case self::META:
|
e8923005
Administrator
29.06.16
|
227
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
228
229
|
$meta = $this->selectSeoData(self::META);
|
64e48993
Administrator
14.09.16
|
230
231
|
$widgetData = static::findSeoByUrl($this->url);
|
f5bc3759
Administrator
20.07.16
|
232
|
$filter = \Yii::$app->request->get('filters', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
233
|
$sort = \Yii::$app->request->get('sort', []);
|
0e51e661
Dmytry Fedorchuk
paginate seo
|
234
|
$paginate = \Yii::$app->request->get('page', []);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
235
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
236
|
|
8afa1bf2
Administrator
29.06.16
|
237
|
if (!empty($meta)) {
|
d29a2cfa
Yarik
Seo fix
|
238
|
|
8afa1bf2
Administrator
29.06.16
|
239
240
241
242
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => $meta
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
243
|
|
64e48993
Administrator
14.09.16
|
244
245
246
247
248
249
250
251
252
253
254
|
}
else if ($widgetData instanceof \common\models\Seo) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' =>'index,follow'
]);
}
else if(!empty($filter['special'])){
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
255
|
|
8afa1bf2
Administrator
29.06.16
|
256
257
258
259
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
260
|
|
8afa1bf2
Administrator
29.06.16
|
261
|
} else if (
|
bdc6c84c
Administrator
14.09.16
|
262
|
isset($filter['brands']) && count($filter['brands']) > 1 || isset($filter) && $this->checkFilter($filter)
|
e8923005
Administrator
29.06.16
|
263
|
|
8afa1bf2
Administrator
29.06.16
|
264
|
) {
|
8afa1bf2
Administrator
29.06.16
|
265
266
267
268
269
270
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
} else if (
|
d29a2cfa
Yarik
Seo fix
|
271
272
|
isset($filter['brands']) && count($filter['brands']) <= 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 2
|| isset($filter) && count($filter, COUNT_RECURSIVE) >= 2
|
8afa1bf2
Administrator
29.06.16
|
273
274
275
276
277
278
279
280
281
282
283
284
|
|| !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
|
285
|
}
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
286
287
|
|
e8923005
Administrator
29.06.16
|
288
289
|
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
290
|
break;
|
3f2bc3d0
Administrator
first commit
|
291
292
293
294
295
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
296
297
298
|
protected function checkFilter($filter){
|
bdc6c84c
Administrator
14.09.16
|
299
300
|
foreach(self::$optionsList as $optionList){
|
7b18ef88
Administrator
14.09.16
|
301
|
if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){
|
efa83867
Administrator
14.09.16
|
302
|
return true;
|
7b18ef88
Administrator
14.09.16
|
303
|
}
|
bdc6c84c
Administrator
14.09.16
|
304
305
|
}
|
efa83867
Administrator
14.09.16
|
306
|
return false;
|
bdc6c84c
Administrator
14.09.16
|
307
308
|
}
|
3f2bc3d0
Administrator
first commit
|
309
310
311
|
protected function replaceData($str)
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
312
313
314
|
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
|
3f2bc3d0
Administrator
first commit
|
315
316
317
|
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
|
4495dea0
Administrator
проапдейтил роли
|
318
|
return $str;
|
3f2bc3d0
Administrator
first commit
|
319
320
|
}
|
1b898c16
Administrator
20.07.16
|
321
|
protected static function findSeoByUrl($url)
|
3f2bc3d0
Administrator
first commit
|
322
|
{
|
1b898c16
Administrator
20.07.16
|
323
324
325
326
327
|
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
|
328
329
330
331
|
}
protected function findSeoByDynamic()
{
|
1f3add0a
Dmytry Fedorchuk
All seo
|
332
333
334
335
336
337
|
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
|
338
|
|
1f3add0a
Dmytry Fedorchuk
All seo
|
339
|
$query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
|
3f2bc3d0
Administrator
first commit
|
340
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
341
|
|
3f2bc3d0
Administrator
first commit
|
342
343
344
345
|
return $query->one();
}
|
466144f8
Administrator
20.07.16
|
346
347
348
349
350
|
protected function findSeoByDynamicForFilters(){
return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
351
352
|
protected function getViewData()
{
|
3f2bc3d0
Administrator
first commit
|
353
|
$params = $this->getView()->params;
|
e21450c9
Dmytry Fedorchuk
SEO
|
354
|
if (isset($params['seo'])) {
|
3f2bc3d0
Administrator
first commit
|
355
356
357
358
359
360
|
return $params['seo'];
} else {
return [];
}
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
361
362
|
protected function selectSeoData($param)
{
|
3f2bc3d0
Administrator
first commit
|
363
364
|
$result = '';
|
1b898c16
Administrator
20.07.16
|
365
|
$widgetData = static::findSeoByUrl($this->url);
|
d29a2cfa
Yarik
Seo fix
|
366
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
367
|
if ($widgetData instanceof \common\models\Seo) {
|
3f2bc3d0
Administrator
first commit
|
368
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
369
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
370
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
371
|
} else if (!empty($this->$param)) {
|
3f2bc3d0
Administrator
first commit
|
372
|
$result = $this->$param;
|
d29a2cfa
Yarik
Seo fix
|
373
|
|
3f2bc3d0
Administrator
first commit
|
374
375
376
|
} else {
$widgetData = $this->findSeoByDynamic();
|
d29a2cfa
Yarik
Seo fix
|
377
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
378
|
if ($widgetData instanceof SeoDynamic) {
|
3f2bc3d0
Administrator
first commit
|
379
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
380
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
381
382
383
384
385
|
}
}
|
bdc6c84c
Administrator
14.09.16
|
386
|
return $this->replaceData($result);
|
3f2bc3d0
Administrator
first commit
|
387
388
389
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
390
|
public function getTitleString($array){
|
466144f8
Administrator
20.07.16
|
391
392
393
394
395
396
397
398
|
$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
|
399
|
}
|
466144f8
Administrator
20.07.16
|
400
401
|
return false;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
402
403
|
}
|
d29a2cfa
Yarik
Seo fix
|
404
405
406
407
408
409
|
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
|
410
411
|
}
|