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
54
55
56
57
58
59
60
61
|
switch ($this->row) {
case self::SEO_TEXT:
return $this->selectSeoData(self::SEO_TEXT);
break;
case self::H1:
return $this->selectSeoData(self::H1);
break;
case self::TITLE:
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
$filter = \Yii::$app->request->get('filter', []);
// var_dump($filter );die();
// if(!empty($filter)){
// $filter_row = '';
// foreach($filter as $sub_filter_name => $sub_filter_array){
// if($sub_filter_name=='options'){
// foreach($sub_filter_array as $f_name=>$f_values){
// $filter_row .= $f_name.':'.implode(',',$f_values).'|';
// }
// }
//
// }
// $this->fields['name'] = $filter_row;
// }
|
3f2bc3d0
Administrator
first commit
|
76
77
78
79
|
$title = $this->selectSeoData(self::TITLE);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
80
81
82
|
// if(!empty($filter_row)){
// return $filter_row;
// }
|
1f3add0a
Dmytry Fedorchuk
All seo
|
83
|
|
40366ecb
Dmytry Fedorchuk
All seo
|
84
|
if (!empty($title)) {
|
baa8bcaf
Dmytry Fedorchuk
All seo
|
85
|
return $title;
|
d0108705
Dmytry Fedorchuk
All seo
|
86
87
|
} else {
return $this->project_name;
|
1f3add0a
Dmytry Fedorchuk
All seo
|
88
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
89
|
|
3f2bc3d0
Administrator
first commit
|
90
91
92
93
|
break;
case self::DESCRIPTION:
$description = $this->selectSeoData(self::DESCRIPTION);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
94
|
if (!empty($description)) {
|
3f2bc3d0
Administrator
first commit
|
95
96
97
|
$this->getView()->registerMetaTag([
'name' => 'description',
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
98
|
'content' => $description
|
3f2bc3d0
Administrator
first commit
|
99
100
101
102
103
|
]);
}
break;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
104
105
106
107
|
case self::META:
$meta = $this->selectSeoData(self::META);
$filter = \Yii::$app->request->get('filter', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
108
|
$sort = \Yii::$app->request->get('sort', []);
|
0e51e661
Dmytry Fedorchuk
paginate seo
|
109
|
$paginate = \Yii::$app->request->get('page', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
110
|
if (!empty($meta)) {
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
111
112
113
|
$this->getView()->registerMetaTag([
'name' => 'robots',
|
e21450c9
Dmytry Fedorchuk
SEO
|
114
|
'content' => $meta
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
115
116
|
]);
|
446efeeb
Dmytry Fedorchuk
SEO
|
117
|
} else if (
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
118
119
120
121
|
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
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
122
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
123
124
125
126
127
|
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
128
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
129
130
131
|
} 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
|
0e51e661
Dmytry Fedorchuk
paginate seo
|
132
|
|| !empty($sort) || !empty($paginate) || isset($filter['prices'])
|
e21450c9
Dmytry Fedorchuk
SEO
|
133
134
135
136
137
138
|
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
} else {
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
139
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
140
141
142
143
144
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'index,follow'
]);
}
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
145
146
147
|
break;
|
3f2bc3d0
Administrator
first commit
|
148
149
150
151
152
153
154
155
|
}
}
protected function replaceData($str)
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
156
157
158
|
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
|
3f2bc3d0
Administrator
first commit
|
159
160
161
|
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
|
4495dea0
Administrator
проапдейтил роли
|
162
|
return $str;
|
3f2bc3d0
Administrator
first commit
|
163
164
165
166
|
}
protected function findSeoByUrl()
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
167
|
return \common\models\Seo::findOne(['url' => $this->url]);
|
3f2bc3d0
Administrator
first commit
|
168
169
170
171
|
}
protected function findSeoByDynamic()
{
|
1f3add0a
Dmytry Fedorchuk
All seo
|
172
173
174
175
176
177
178
|
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
|
179
|
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
180
|
|
3f2bc3d0
Administrator
first commit
|
181
182
183
184
|
return $query->one();
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
185
186
|
protected function getViewData()
{
|
3f2bc3d0
Administrator
first commit
|
187
|
$params = $this->getView()->params;
|
e21450c9
Dmytry Fedorchuk
SEO
|
188
|
if (isset($params['seo'])) {
|
3f2bc3d0
Administrator
first commit
|
189
190
191
192
193
194
|
return $params['seo'];
} else {
return [];
}
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
195
196
|
protected function selectSeoData($param)
{
|
3f2bc3d0
Administrator
first commit
|
197
198
199
200
|
$result = '';
$widgetData = $this->findSeoByUrl();
|
e21450c9
Dmytry Fedorchuk
SEO
|
201
|
if ($widgetData instanceof \common\models\Seo) {
|
3f2bc3d0
Administrator
first commit
|
202
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
203
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
204
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
205
|
} else if (!empty($this->$param)) {
|
3f2bc3d0
Administrator
first commit
|
206
207
|
$result = $this->$param;
|
3f2bc3d0
Administrator
first commit
|
208
209
210
211
|
} else {
$widgetData = $this->findSeoByDynamic();
|
e21450c9
Dmytry Fedorchuk
SEO
|
212
|
if ($widgetData instanceof SeoDynamic) {
|
3f2bc3d0
Administrator
first commit
|
213
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
214
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
215
216
217
218
219
220
221
222
223
|
}
}
return $this->replaceData($result);
}
|
1f3add0a
Dmytry Fedorchuk
All seo
|
224
225
226
227
228
229
230
231
232
233
|
public function getTitleString($array){
$template = "{category} {naz} {brand} {sex} {year} купить в Украине, Киев, Харькове - цены, фото, отзывы | Rukzachok.com.ua";
foreach ($array as $field_name => $field_value) {
$template = str_replace('{' . $field_name . '}', $field_value, $template);
}
$template = preg_replace('/\{.[^\}]*\}\s/','',$template);
return $template;
}
|
3f2bc3d0
Administrator
first commit
|
234
235
|
}
|