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