3f2bc3d0
Administrator
first commit
|
1
2
|
<?php
namespace frontend\widgets;
|
e21450c9
Dmytry Fedorchuk
SEO
|
3
|
|
3f2bc3d0
Administrator
first commit
|
4
5
6
7
8
9
10
|
use common\models\SeoDynamic;
use yii\base\Widget;
use yii\helpers\Html;
class Seo extends Widget
{
private $url;
|
e21450c9
Dmytry Fedorchuk
SEO
|
11
12
13
|
public $row;
public $own_attr;
public $fields;
|
3f2bc3d0
Administrator
first commit
|
14
15
|
public $description;
public $title;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
16
|
public $meta;
|
3f2bc3d0
Administrator
first commit
|
17
18
19
20
|
public $seo_text;
public $h1;
public $key;
public $project_name;
|
7d20bafe
Dmytry Fedorchuk
htacess www
|
21
22
|
|
3f2bc3d0
Administrator
first commit
|
23
24
|
const SEO_TEXT = 'seo_text';
const DESCRIPTION = 'description';
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
25
|
const META = 'meta';
|
3f2bc3d0
Administrator
first commit
|
26
27
28
|
const H1 = 'h1';
const TITLE = 'title';
|
e21450c9
Dmytry Fedorchuk
SEO
|
29
30
31
32
|
public function init()
{
$this->url = \Yii::$app->request->url;
$this->project_name = \Yii::$app->name;
|
3f2bc3d0
Administrator
first commit
|
33
34
35
36
37
38
39
40
41
|
parent::init();
}
public function run()
{
$seoData = $this->getViewData();
|
e21450c9
Dmytry Fedorchuk
SEO
|
42
|
foreach ($seoData as $key => $value) {
|
3f2bc3d0
Administrator
first commit
|
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
$this->$key = $value;
}
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...
|
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
$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
|
71
72
73
74
|
$title = $this->selectSeoData(self::TITLE);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
75
76
77
78
|
// if(!empty($filter_row)){
// return $filter_row;
// }
if (!empty($title)) {
|
3f2bc3d0
Administrator
first commit
|
79
80
81
82
83
84
85
86
87
|
return $title;
} else {
return $this->project_name;
}
break;
case self::DESCRIPTION:
$description = $this->selectSeoData(self::DESCRIPTION);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
88
|
if (!empty($description)) {
|
3f2bc3d0
Administrator
first commit
|
89
90
91
|
$this->getView()->registerMetaTag([
'name' => 'description',
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
92
|
'content' => $description
|
3f2bc3d0
Administrator
first commit
|
93
94
95
96
97
|
]);
}
break;
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
98
99
100
101
|
case self::META:
$meta = $this->selectSeoData(self::META);
$filter = \Yii::$app->request->get('filter', []);
|
e21450c9
Dmytry Fedorchuk
SEO
|
102
|
$sort = \Yii::$app->request->get('sort', []);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
103
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
104
|
if (!empty($meta)) {
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
105
106
107
|
$this->getView()->registerMetaTag([
'name' => 'robots',
|
e21450c9
Dmytry Fedorchuk
SEO
|
108
|
'content' => $meta
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
109
110
|
]);
|
e21450c9
Dmytry Fedorchuk
SEO
|
111
|
} else if (
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
112
113
114
115
|
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...
|
116
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
117
118
119
120
121
|
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,nofollow'
]);
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
122
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
123
124
125
126
127
128
129
130
131
132
|
} 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) || isset($filter['prices'])
) {
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'noindex,follow'
]);
} else {
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
133
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
134
135
136
137
138
|
$this->getView()->registerMetaTag([
'name' => 'robots',
'content' => 'index,follow'
]);
}
|
0d0c080c
Dmytry Fedorchuk
seo module filter...
|
139
140
141
|
break;
|
3f2bc3d0
Administrator
first commit
|
142
143
144
145
146
147
148
149
|
}
}
protected function replaceData($str)
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
150
151
152
|
if (!empty($this->fields)) {
foreach ($this->fields as $field_name => $field_value) {
$str = str_replace('{' . $field_name . '}', $field_value, $str);
|
3f2bc3d0
Administrator
first commit
|
153
154
155
|
}
}
$str = str_replace('{project_name}', $this->project_name, $str);
|
4495dea0
Administrator
проапдейтил роли
|
156
|
return $str;
|
3f2bc3d0
Administrator
first commit
|
157
158
159
160
|
}
protected function findSeoByUrl()
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
161
|
return \common\models\Seo::findOne(['url' => $this->url]);
|
3f2bc3d0
Administrator
first commit
|
162
163
164
165
|
}
protected function findSeoByDynamic()
{
|
e21450c9
Dmytry Fedorchuk
SEO
|
166
167
168
|
$query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
if (!empty($this->key)) {
$query->andWhere(['key' => $this->key]);
|
3f2bc3d0
Administrator
first commit
|
169
170
171
172
173
|
}
return $query->one();
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
174
175
|
protected function getViewData()
{
|
3f2bc3d0
Administrator
first commit
|
176
|
$params = $this->getView()->params;
|
e21450c9
Dmytry Fedorchuk
SEO
|
177
|
if (isset($params['seo'])) {
|
3f2bc3d0
Administrator
first commit
|
178
179
180
181
182
183
|
return $params['seo'];
} else {
return [];
}
}
|
e21450c9
Dmytry Fedorchuk
SEO
|
184
185
|
protected function selectSeoData($param)
{
|
3f2bc3d0
Administrator
first commit
|
186
187
188
189
|
$result = '';
$widgetData = $this->findSeoByUrl();
|
e21450c9
Dmytry Fedorchuk
SEO
|
190
|
if ($widgetData instanceof \common\models\Seo) {
|
3f2bc3d0
Administrator
first commit
|
191
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
192
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
193
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
194
|
} else if (!empty($this->$param)) {
|
3f2bc3d0
Administrator
first commit
|
195
196
|
$result = $this->$param;
|
3f2bc3d0
Administrator
first commit
|
197
198
199
200
|
} else {
$widgetData = $this->findSeoByDynamic();
|
e21450c9
Dmytry Fedorchuk
SEO
|
201
|
if ($widgetData instanceof SeoDynamic) {
|
3f2bc3d0
Administrator
first commit
|
202
|
|
e21450c9
Dmytry Fedorchuk
SEO
|
203
|
$result = $widgetData->$param;
|
3f2bc3d0
Administrator
first commit
|
204
205
206
207
208
209
210
211
212
213
214
|
}
}
return $this->replaceData($result);
}
}
|