feffea0a
Yarik
Namespaces
|
1
|
<?php
|
aef3b793
Yarik
For Leha commit
|
2
|
namespace artweb\artbox\seo\widgets;
|
feffea0a
Yarik
Namespaces
|
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
use artweb\artbox\seo\models\SeoDynamic;
use artweb\artbox\ecommerce\models\Brand;
use artweb\artbox\ecommerce\models\TaxGroup;
use artweb\artbox\ecommerce\models\TaxOption;
use yii\base\Widget;
use yii\helpers\ArrayHelper;
class Seo extends Widget
{
private $url;
public $row;
public $own_attr;
public $fields;
public $category_name;
public $description;
public $title;
public $meta;
public $seo_text;
public $h1;
public $key;
public $name;
public $project_name;
|
feffea0a
Yarik
Namespaces
|
26
27
28
29
30
31
|
public static $optionsList;
protected static $check_url;
protected static $check_url_bool;
const SEO_TEXT = 'seo_text';
|
bf6de24b
Administrator
add variantSku
|
32
|
const DESCRIPTION = 'meta_description';
|
feffea0a
Yarik
Namespaces
|
33
34
35
36
37
38
39
|
const META = 'meta';
const H1 = 'h1';
const TITLE = 'title';
public function init()
{
$this->url = \Yii::$app->request->url;
|
feffea0a
Yarik
Namespaces
|
40
|
$this->project_name = \Yii::$app->name;
|
feffea0a
Yarik
Namespaces
|
41
|
if(empty(self::$optionsList)){
|
76f5d86f
Administrator
add variantSku
|
42
|
self::$optionsList = ArrayHelper::getColumn(TaxGroup::find()->joinWith('lang')->where(['is_filter' => 'TRUE'])->asArray()->all(),'lang.alias');
|
feffea0a
Yarik
Namespaces
|
43
44
45
46
47
48
|
}
parent::init();
}
|
9e39764a
Administrator
add variantSku
|
49
50
51
|
/**
* @return mixed
*/
|
feffea0a
Yarik
Namespaces
|
52
53
54
55
56
57
58
59
60
|
public function run()
{
$seoData = $this->getViewData();
foreach ($seoData as $key => $value) {
$this->$key = $value;
}
|
feffea0a
Yarik
Namespaces
|
61
62
63
64
65
66
67
68
69
70
|
switch ($this->row) {
case self::SEO_TEXT:
$filter = \Yii::$app->request->get('filters', []);
$sort = \Yii::$app->request->get('sort', []);
$paginate = \Yii::$app->request->get('page', []);
if(empty($filter) && empty($sort) && empty($paginate) ){
|
76f5d86f
Administrator
add variantSku
|
71
|
return $this->prepareString($this->selectSeoData(self::SEO_TEXT,$filter,$priority));
|
feffea0a
Yarik
Namespaces
|
72
73
74
|
} else {
|
76f5d86f
Administrator
add variantSku
|
75
|
$widgetData = static::findSeoByUrl($this->url);
|
feffea0a
Yarik
Namespaces
|
76
77
78
|
$result = '';
|
76f5d86f
Administrator
add variantSku
|
79
|
if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
|
feffea0a
Yarik
Namespaces
|
80
|
|
76f5d86f
Administrator
add variantSku
|
81
|
$result = $widgetData->{self::SEO_TEXT};
|
feffea0a
Yarik
Namespaces
|
82
83
84
|
} else {
|
76f5d86f
Administrator
add variantSku
|
85
|
$widgetData = $this->findSeoByDynamic();
|
feffea0a
Yarik
Namespaces
|
86
|
|
76f5d86f
Administrator
add variantSku
|
87
88
89
|
if ($widgetData instanceof SeoDynamic) {
$result = $widgetData->lang->{self::SEO_TEXT};
|
feffea0a
Yarik
Namespaces
|
90
91
92
93
94
|
}
}
|
30d2133c
Administrator
add variantSku
|
95
|
return $this->prepareString($this->replaceData($result));
|
feffea0a
Yarik
Namespaces
|
96
97
98
99
100
101
102
103
|
}
break;
case self::H1:
$filter = \Yii::$app->request->get('filters', []);
|
76f5d86f
Administrator
add variantSku
|
104
|
$default = $this->selectSeoData(self::H1, $filter,$priority);
|
feffea0a
Yarik
Namespaces
|
105
106
107
|
if ($default != $this->{self::H1}) {
|
30d2133c
Administrator
add variantSku
|
108
|
return $this->prepareString($default);
|
feffea0a
Yarik
Namespaces
|
109
110
111
|
} else if(!empty($filter) && !$this->checkFilter($filter)){
|
feffea0a
Yarik
Namespaces
|
112
|
$array = $this->arrayBuilder($filter);
|
30d2133c
Administrator
add variantSku
|
113
|
return $this->prepareString($this->getNameString($array,$default));
|
feffea0a
Yarik
Namespaces
|
114
115
116
|
}
else {
|
30d2133c
Administrator
add variantSku
|
117
|
return $this->prepareString($default);
|
feffea0a
Yarik
Namespaces
|
118
|
}
|
30d2133c
Administrator
add variantSku
|
119
|
break;
|
feffea0a
Yarik
Namespaces
|
120
121
122
123
124
|
case self::TITLE:
$filter = \Yii::$app->request->get('filters', []);
|
0436d2e2
Administrator
add variantSku
|
125
|
$title = $this->selectSeoData(self::TITLE, $filter, $priority);
|
22083bd3
Administrator
add variantSku
|
126
|
|
feffea0a
Yarik
Namespaces
|
127
|
|
0436d2e2
Administrator
add variantSku
|
128
|
if(!empty($filter) && $priority==3 || !empty($filter) && empty($this->{Seo::TITLE})) {
|
feffea0a
Yarik
Namespaces
|
129
130
131
|
$array = $this->arrayBuilder($filter);
|
30d2133c
Administrator
add variantSku
|
132
|
$title_string = $this->getTitleString($array, $title);
|
feffea0a
Yarik
Namespaces
|
133
134
|
if($title_string){
|
30d2133c
Administrator
add variantSku
|
135
|
return $this->prepareString($title_string);
|
feffea0a
Yarik
Namespaces
|
136
137
138
139
|
}
}
|
bf6de24b
Administrator
add variantSku
|
140
|
|
feffea0a
Yarik
Namespaces
|
141
|
if (!empty($title)) {
|
30d2133c
Administrator
add variantSku
|
142
|
return $this->prepareString($title);
|
feffea0a
Yarik
Namespaces
|
143
|
} else {
|
30d2133c
Administrator
add variantSku
|
144
|
return $this->prepareString($this->project_name);
|
feffea0a
Yarik
Namespaces
|
145
|
}
|
feffea0a
Yarik
Namespaces
|
146
147
|
break;
case self::DESCRIPTION:
|
4656e4ee
Administrator
add variantSku
|
148
149
150
|
$filter = \Yii::$app->request->get('filters', []);
|
76f5d86f
Administrator
add variantSku
|
151
|
$description = $this->selectSeoData(self::DESCRIPTION, $filter,$priority);
|
feffea0a
Yarik
Namespaces
|
152
153
154
155
156
|
if (!empty($description)) {
$this->getView()->registerMetaTag([
'name' => 'description',
|
30d2133c
Administrator
add variantSku
|
157
|
'content' => $this->prepareString($description)
|
feffea0a
Yarik
Namespaces
|
158
159
160
161
|
]);
} else {
|
feffea0a
Yarik
Namespaces
|
162
163
164
165
|
if(!empty($filter)){
$array = $this->arrayBuilder($filter);
$this->getView()->registerMetaTag([
'name' => 'description',
|
30d2133c
Administrator
add variantSku
|
166
|
'content' => $this->prepareString($this->getDescriptionString($array,$description))
|
feffea0a
Yarik
Namespaces
|
167
168
169
170
171
172
173
174
|
]);
}
}
break;
case self::META:
|
feffea0a
Yarik
Namespaces
|
175
176
177
178
179
|
$filter = \Yii::$app->request->get('filters', []);
$sort = \Yii::$app->request->get('sort', []);
$paginate = \Yii::$app->request->get('page', []);
|
76f5d86f
Administrator
add variantSku
|
180
|
$meta = $this->selectSeoData(self::META, $filter,$priority);
|
4656e4ee
Administrator
add variantSku
|
181
|
|
b42f465a
Administrator
add variantSku
|
182
183
184
185
|
if(!empty($filter) && !$this->checkFilter($filter) && count($filter, COUNT_RECURSIVE) == 2){
$key = array_keys ( $filter);
if(isset($key[0])){
$metaGroup = TaxGroup::find()->joinWith('lang')->where(['alias'=>$key[0]])->one();
|
abab5f69
Administrator
add variantSku
|
186
|
if($metaGroup != null && !empty($metaGroup->meta_robots)){
|
b42f465a
Administrator
add variantSku
|
187
188
189
190
191
192
193
194
195
196
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => $metaGroup->meta_robots
]);
break;
}
}
}
|
feffea0a
Yarik
Namespaces
|
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
if (!empty($meta) && empty($sort) && empty($paginate) && !isset($filter['prices']) ) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => $meta
]);
} else if(!empty($filter['special'])){
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
} else if (
isset($filter['brands']) && count($filter['brands']) > 1
|| isset($filter) && $this->checkFilter($filter)
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
} else if (
|
30d2133c
Administrator
add variantSku
|
223
224
|
isset($filter['brands']) && count($filter['brands']) > 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 2
|| isset($filter) && count($filter, COUNT_RECURSIVE) > 2
|
feffea0a
Yarik
Namespaces
|
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
|
|| !empty($sort) || !empty($paginate) || isset($filter['prices'])
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
} else {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'index,follow'
]);
}
break;
}
}
|
9e39764a
Administrator
add variantSku
|
249
250
251
252
|
/**
* @param $str
* @return mixed
*/
|
feffea0a
Yarik
Namespaces
|
253
254
255
256
257
258
259
260
261
262
263
264
|
protected function replaceData($str)
{
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
return $str;
}
|
9e39764a
Administrator
add variantSku
|
265
266
267
268
|
/**
* @param $url
* @return static
*/
|
feffea0a
Yarik
Namespaces
|
269
270
271
272
273
274
275
276
277
|
protected static function findSeoByUrl($url)
{
if(empty(self::$check_url_bool)){
self::$check_url = \artweb\artbox\seo\models\Seo::findOne(['url' => $url]);
self::$check_url_bool = true;
}
return self::$check_url;
}
|
9e39764a
Administrator
add variantSku
|
278
279
280
|
/**
* @return array|null|\yii\db\ActiveRecord
*/
|
feffea0a
Yarik
Namespaces
|
281
282
|
protected function findSeoByDynamic()
{
|
30d2133c
Administrator
add variantSku
|
283
|
|
b5777d78
Administrator
add variantSku
|
284
285
286
|
// print_r(\Yii::$app->controller->id);
// print_r(\Yii::$app->controller->action->id);
// die();
|
feffea0a
Yarik
Namespaces
|
287
288
289
290
291
292
293
294
295
296
297
298
|
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]);
}
return $query->one();
}
|
9e39764a
Administrator
add variantSku
|
299
300
301
|
/**
* @return array|null|\yii\db\ActiveRecord
*/
|
feffea0a
Yarik
Namespaces
|
302
303
304
305
|
protected function findSeoByDynamicForFilters(){
return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
}
|
9e39764a
Administrator
add variantSku
|
306
307
308
|
/**
* @return array
*/
|
feffea0a
Yarik
Namespaces
|
309
310
311
312
313
314
315
316
317
318
|
protected function getViewData()
{
$params = $this->getView()->params;
if (isset($params['seo'])) {
return $params['seo'];
} else {
return [];
}
}
|
bf6de24b
Administrator
add variantSku
|
319
320
321
|
/**
* @param $param
|
4656e4ee
Administrator
add variantSku
|
322
|
* @param $filter
|
b5777d78
Administrator
add variantSku
|
323
|
* @param $priority
|
bf6de24b
Administrator
add variantSku
|
324
325
|
* @return mixed
*/
|
76f5d86f
Administrator
add variantSku
|
326
|
protected function selectSeoData($param, $filter, &$priority)
|
feffea0a
Yarik
Namespaces
|
327
|
{
|
feffea0a
Yarik
Namespaces
|
328
329
|
$result = '';
|
76f5d86f
Administrator
add variantSku
|
330
|
$widgetData = static::findSeoByUrl($this->url);
|
feffea0a
Yarik
Namespaces
|
331
|
|
76f5d86f
Administrator
add variantSku
|
332
|
$widgetDynamicData = $this->findSeoByDynamic();
|
30d2133c
Administrator
add variantSku
|
333
|
|
feffea0a
Yarik
Namespaces
|
334
|
if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
|
b5777d78
Administrator
add variantSku
|
335
|
$priority = 1;
|
feffea0a
Yarik
Namespaces
|
336
337
|
$result = $widgetData->$param;
|
4656e4ee
Administrator
add variantSku
|
338
|
}else if(!empty($this->$param) && empty($filter)) {
|
b5777d78
Administrator
add variantSku
|
339
|
$priority = 2;
|
68d49205
Administrator
add variantSku
|
340
341
|
$result = $this->$param;
|
30d2133c
Administrator
add variantSku
|
342
|
} else if ($widgetDynamicData instanceof SeoDynamic) {
|
b5777d78
Administrator
add variantSku
|
343
|
$priority = 3;
|
30d2133c
Administrator
add variantSku
|
344
|
$result = $widgetDynamicData->lang->$param;
|
bf6de24b
Administrator
add variantSku
|
345
|
|
feffea0a
Yarik
Namespaces
|
346
347
348
349
350
351
|
}
return $this->replaceData($result);
}
|
9e39764a
Administrator
add variantSku
|
352
353
354
355
356
|
/**
* @param $array
* @param $title
* @return mixed
*/
|
30d2133c
Administrator
add variantSku
|
357
358
|
public function getTitleString($array, $title){
|
feffea0a
Yarik
Namespaces
|
359
360
|
$row = '';
foreach($array as $name => $field){
|
4656e4ee
Administrator
add variantSku
|
361
|
$row .= $field['value'].' ' ;
|
30d2133c
Administrator
add variantSku
|
362
|
}
|
feffea0a
Yarik
Namespaces
|
363
|
|
30d2133c
Administrator
add variantSku
|
364
|
$template = preg_replace('/{filter}/',$row,$title);
|
feffea0a
Yarik
Namespaces
|
365
|
|
30d2133c
Administrator
add variantSku
|
366
|
return $template;
|
feffea0a
Yarik
Namespaces
|
367
368
369
|
}
|
9e39764a
Administrator
add variantSku
|
370
371
372
373
374
|
/**
* @param $array
* @param $description
* @return mixed
*/
|
30d2133c
Administrator
add variantSku
|
375
|
public function getDescriptionString($array, $description){
|
feffea0a
Yarik
Namespaces
|
376
|
|
30d2133c
Administrator
add variantSku
|
377
378
|
$row = '';
foreach($array as $name => $field){
|
4656e4ee
Administrator
add variantSku
|
379
|
$row .= $field['value'].' ' ;
|
30d2133c
Administrator
add variantSku
|
380
|
}
|
feffea0a
Yarik
Namespaces
|
381
|
|
95ca022f
Administrator
add variantSku
|
382
|
$template = preg_replace('/{filter}/',$row, $description);
|
feffea0a
Yarik
Namespaces
|
383
|
|
30d2133c
Administrator
add variantSku
|
384
|
return $template;
|
feffea0a
Yarik
Namespaces
|
385
386
387
388
|
}
|
9e39764a
Administrator
add variantSku
|
389
390
391
392
393
|
/**
* @param $array
* @param $h1
* @return mixed
*/
|
30d2133c
Administrator
add variantSku
|
394
395
|
public function getNameString($array, $h1){
|
4656e4ee
Administrator
add variantSku
|
396
|
$row = ' ';
|
feffea0a
Yarik
Namespaces
|
397
|
foreach($array as $name => $field){
|
4656e4ee
Administrator
add variantSku
|
398
|
$row .= $field['value'].' ' ;
|
30d2133c
Administrator
add variantSku
|
399
|
}
|
feffea0a
Yarik
Namespaces
|
400
|
|
95ca022f
Administrator
add variantSku
|
401
|
$template = preg_replace('/{filter}/',$row, $h1 );
|
feffea0a
Yarik
Namespaces
|
402
|
|
30d2133c
Administrator
add variantSku
|
403
|
return $template;
|
feffea0a
Yarik
Namespaces
|
404
405
406
|
}
|
30d2133c
Administrator
add variantSku
|
407
408
409
410
|
/**
* @param $filter
* @return mixed
*/
|
feffea0a
Yarik
Namespaces
|
411
412
|
public function arrayBuilder($filter)
{
|
95ca022f
Administrator
add variantSku
|
413
|
$array = [];
|
feffea0a
Yarik
Namespaces
|
414
|
if (isset($filter['brands']) && count($filter['brands']) == 1) {
|
5cfbf2a2
Administrator
slider
|
415
|
$model = Brand::find()->joinWith('lang')->where(['alias' => $filter['brands'][0]])->one();
|
feffea0a
Yarik
Namespaces
|
416
417
418
419
420
|
if (!$model instanceof Brand) {
\Yii::$app->response->redirect(['/site/error'], 404);
} else {
$array['brand']['name'] = 'Бренд';
|
e5f77089
Administrator
full commit
|
421
|
$array['brand']['value'] = $model->lang->title;
|
feffea0a
Yarik
Namespaces
|
422
423
424
425
426
|
}
}
|
76f5d86f
Administrator
add variantSku
|
427
|
$optionsList = ArrayHelper::map(TaxGroup::find()->joinWith('lang')->where(['is_filter' => 'TRUE'])->asArray()->all(), 'lang.alias', 'name');
|
feffea0a
Yarik
Namespaces
|
428
429
430
431
432
433
434
|
foreach ($optionsList as $optionList => $name) {
if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
|
e5f77089
Administrator
full commit
|
435
|
$model = TaxOption::find()->joinWith('lang')->where(['alias' => $filter[$optionList]])->one();
|
feffea0a
Yarik
Namespaces
|
436
437
438
439
|
if (!$model instanceof TaxOption) {
\Yii::$app->response->redirect(['site/error'], 404);
} else {
|
e5f77089
Administrator
full commit
|
440
|
$array[$optionList]['value'] = $model->lang->value;
|
feffea0a
Yarik
Namespaces
|
441
442
443
444
445
446
447
448
449
450
451
452
453
|
$array[$optionList]['name'] = $name;
}
}
}
return $array;
}
|
30d2133c
Administrator
add variantSku
|
454
455
456
457
|
/**
* @param $filter
* @return bool
*/
|
feffea0a
Yarik
Namespaces
|
458
459
460
461
462
463
464
465
466
467
468
|
protected function checkFilter($filter){
foreach(self::$optionsList as $optionList){
if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){
return true;
}
}
return false;
}
|
30d2133c
Administrator
add variantSku
|
469
470
|
/**
* @param $string
|
9e39764a
Administrator
add variantSku
|
471
|
* @return mixed
|
30d2133c
Administrator
add variantSku
|
472
473
474
475
|
*/
public function prepareString($string){
return preg_replace('/\{.[^\}]*\}/','',$string);
}
|
feffea0a
Yarik
Namespaces
|
476
477
|
}
|