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