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