38ed47e1
Administrator
20.07.16
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php
namespace console\controllers;
use common\models\Articles;
use common\models\Seo;
use common\modules\product\helpers\FilterHelper;
use common\modules\product\models\Brand;
use common\modules\product\models\Category;
use common\modules\product\models\Product;
use frontend\models\ProductFrontendSearch;
use Yii;
use common\models\Page;
use common\models\PageSearch;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\console\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use developeruz\db_rbac\behaviors\AccessBehavior;
|
315ebf90
Alex Savenko
sitemap controlle...
|
21
22
|
|
38ed47e1
Administrator
20.07.16
|
23
24
25
26
27
28
29
30
31
|
/**
* PageController implements the CRUD actions for Page model.
*/
class SiteMapController extends Controller
{
private $urlList = ['http://www.rukzachok.com.ua/'];
private $count = 1;
|
315ebf90
Alex Savenko
sitemap controlle...
|
32
|
public function getAddStatic() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
33
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
34
35
36
37
|
return [
'http://www.rukzachok.com.ua',
'http://www.rukzachok.com.ua/catalog'
];
|
3d1a900d
Alex Savenko
sitemap controlle...
|
38
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
39
40
41
|
}
public function getStaticPages() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
42
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
43
|
return Page::find()->all();
|
3d1a900d
Alex Savenko
sitemap controlle...
|
44
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
45
46
47
|
}
public function getCategories() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
48
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
49
|
return Category::find()->andWhere(['meta_robots' => ''])->all();
|
3d1a900d
Alex Savenko
sitemap controlle...
|
50
|
|
315ebf90
Alex Savenko
sitemap controlle...
|
51
|
}
|
38ed47e1
Administrator
20.07.16
|
52
|
|
d57c2c62
Alex Savenko
sitemap controlle...
|
53
|
public function checkFilter($category, $filter) {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
54
|
|
38ed47e1
Administrator
20.07.16
|
55
56
|
$productModel = new ProductFrontendSearch();
$productProvider = $productModel->search($category, $filter);
|
a54d86cf
Alex Savenko
sitemapcontroller...
|
57
|
if(!empty($productProvider->models)){
|
38ed47e1
Administrator
20.07.16
|
58
|
return true;
|
a54d86cf
Alex Savenko
sitemapcontroller...
|
59
|
} else {
|
38ed47e1
Administrator
20.07.16
|
60
|
return false;
|
a54d86cf
Alex Savenko
sitemapcontroller...
|
61
|
}
|
3d1a900d
Alex Savenko
sitemap controlle...
|
62
|
|
38ed47e1
Administrator
20.07.16
|
63
64
|
}
|
38ed47e1
Administrator
20.07.16
|
65
|
public function getProducts() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
66
|
|
38ed47e1
Administrator
20.07.16
|
67
68
69
70
|
return Product::find()->all();
}
|
38ed47e1
Administrator
20.07.16
|
71
|
public function getSeoLinks() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
72
|
|
38ed47e1
Administrator
20.07.16
|
73
|
return Seo::find()->where(['meta' => ''])->all();
|
3d1a900d
Alex Savenko
sitemap controlle...
|
74
|
|
38ed47e1
Administrator
20.07.16
|
75
76
|
}
|
d57c2c62
Alex Savenko
sitemap controlle...
|
77
|
public function getArticles() {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
78
|
|
38ed47e1
Administrator
20.07.16
|
79
|
return Articles::find()->all();
|
3d1a900d
Alex Savenko
sitemap controlle...
|
80
|
|
38ed47e1
Administrator
20.07.16
|
81
82
|
}
|
d57c2c62
Alex Savenko
sitemap controlle...
|
83
|
public function getBrands($category) {
|
38ed47e1
Administrator
20.07.16
|
84
85
86
87
|
return $category->brands;
}
|
f9849059
Administrator
06.09.16
|
88
89
90
91
|
/**
* @param $category Category;
* @return mixed
*/
|
d57c2c62
Alex Savenko
sitemap controlle...
|
92
|
public function getFilters($category) {
|
38ed47e1
Administrator
20.07.16
|
93
94
95
96
97
|
return $category->getActiveFilters()->all();
}
|
d57c2c62
Alex Savenko
sitemap controlle...
|
98
|
public function checkUrl($url) {
|
a54d86cf
Alex Savenko
sitemapcontroller...
|
99
100
101
102
103
|
if (preg_match('/filters:[^=]+=[^=]+;[^=]+=[^=]+/', $url)) {
$reverse_url = preg_replace('/filters:([^=]+=[^=]+);([^=]+=[^=]+)/', 'filters:$2;$1', $url);
}
|
11ffb77e
Alex Savenko
sitemapcontroller...
|
104
|
if(in_array($url, $this->urlList) || (isset($reverse_url) && in_array($reverse_url, $this->urlList))) {
|
a54d86cf
Alex Savenko
sitemapcontroller...
|
105
106
|
return false;
} else {
|
38ed47e1
Administrator
20.07.16
|
107
108
|
$this->urlList[] = $url;
return true;
|
38ed47e1
Administrator
20.07.16
|
109
|
}
|
3d1a900d
Alex Savenko
sitemap controlle...
|
110
|
|
38ed47e1
Administrator
20.07.16
|
111
112
|
}
|
d57c2c62
Alex Savenko
sitemap controlle...
|
113
|
public function createRow( $url, $priority, &$content ) {
|
3d1a900d
Alex Savenko
sitemap controlle...
|
114
|
|
38ed47e1
Administrator
20.07.16
|
115
116
117
118
119
120
121
122
123
|
if($this->checkUrl($url)){
print $this->count++ . "\n";
$content .= '<url>' .
'<loc>' . $url . '</loc>' .
'<lastmod>' . date('Y-m-d') . '</lastmod>' .
'<changefreq>Daily</changefreq>' .
'<priority>' . $priority .'</priority>' .
'</url>';
}
|
3d1a900d
Alex Savenko
sitemap controlle...
|
124
|
|
38ed47e1
Administrator
20.07.16
|
125
126
|
}
|
38ed47e1
Administrator
20.07.16
|
127
128
129
130
131
132
133
134
135
136
|
public function actionProcess() {
$config = ArrayHelper::merge(
require(__DIR__ . '/../../frontend/config/main.php'),
require(__DIR__ . '/../../common/config/main.php')
);
Yii::$app->urlManager->addRules($config['components']['urlManager']['rules']);
|
dbceaf12
Administrator
20.07.16
|
137
|
$dirName = Yii::getAlias('@frontend').'/web';
|
38ed47e1
Administrator
20.07.16
|
138
|
|
dbceaf12
Administrator
20.07.16
|
139
|
$filename = 'sitemap.xml';
|
38ed47e1
Administrator
20.07.16
|
140
141
|
setlocale(LC_ALL, 'ru_RU.CP1251');
|
3d1a900d
Alex Savenko
sitemap controlle...
|
142
|
|
38ed47e1
Administrator
20.07.16
|
143
144
145
146
147
|
$handle = fopen($dirName .'/'. $filename, "w");
$content = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach ($this->getAddStatic() as $page) {
|
dbceaf12
Administrator
20.07.16
|
148
|
$this->createRow($page , 1,$content);
|
38ed47e1
Administrator
20.07.16
|
149
150
151
152
153
154
155
156
157
158
159
160
|
}
foreach ($this->getStaticPages() as $page) {
$url = Url::to(['text/index','translit' => $page->translit]);
$this->createRow($url , 1,$content);
}
foreach ($this->getCategories() as $category) {
$url = Url::to(['catalog/category', 'category' => $category]);
$this->createRow($url , 1,$content);
}
|
3d1a900d
Alex Savenko
sitemap controlle...
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
foreach ($this->getProducts() as $product) {
$url = Url::to(['catalog/product', 'product' => $product]);
$this->createRow($url , 0.9, $content);
}
foreach ($this->getArticles() as $article) {
$url = Url::to(['articles/show', 'translit' => $article->translit, 'id' => $article->id,]);
$this->createRow($url , 0.8,$content);
}
//brands
|
8fd6962f
Alex Savenko
sitemap controlle...
|
175
176
177
178
179
180
181
182
|
foreach($this->getCategories() as $category) {
foreach ($this->getBrands($category) as $brand) {
if($this->checkFilter($category, ['brands' => [$brand->brand_id]])){
$url = Url::to(['catalog/category', 'category' => $category, 'filters' => ['brands' => [$brand->alias]]]) ;
$this->createRow($url , 0.8, $content);
}
}
}
|
315ebf90
Alex Savenko
sitemap controlle...
|
183
|
//
|
3d1a900d
Alex Savenko
sitemap controlle...
|
184
|
// //filters 1 lvl
|
315ebf90
Alex Savenko
sitemap controlle...
|
185
186
187
188
189
190
191
192
193
194
|
// foreach($this->getCategories() as $category) {
// foreach ($this->getFilters($category) as $filter) {
// if($this->checkFilter($category, [$filter['group_alias'] => [$filter['option_alias']]])){
// $url = Url::to(['catalog/category', 'category' => $category, 'filters' => [$filter['group_alias'] => [$filter['option_alias']]] ]);
// $this->createRow($url , 0.8, $content);
// }
//
// }
// }
//
|
3d1a900d
Alex Savenko
sitemap controlle...
|
195
|
// //seo links
|
315ebf90
Alex Savenko
sitemap controlle...
|
196
197
198
199
200
201
|
// foreach($this->getSeoLinks() as $link) {
// $url = Yii::$app->urlManager->baseUrl.$link->url;
// $this->createRow($url , 0.7, $content);
//
// }
//
|
3d1a900d
Alex Savenko
sitemap controlle...
|
202
|
// //filters 2 lvl
|
315ebf90
Alex Savenko
sitemap controlle...
|
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
// foreach($this->getCategories() as $category) {
// foreach ($this->getFilters($category) as $filter1) {
// foreach ($this->getFilters($category) as $filter2) {
// if($this->checkFilter($category, [$filter1['group_alias'] => [$filter1['option_alias']],$filter2['group_alias'] => [$filter2['option_alias']]] )){
// $url = Url::to(['catalog/category', 'category' => $category, 'filters' => [$filter1['group_alias'] => [$filter1['option_alias']],$filter2['group_alias'] => [$filter2['option_alias']]] ]);
// $this->createRow($url , 0.7, $content);
// }
//
// }
//
// foreach ($this->getBrands($category) as $brand) {
// if($this->checkFilter($category, ['brands' => [$brand->brand_id], $filter1['group_alias'] => [$filter1['option_alias']]] )){
// $url = Url::to(['catalog/category', 'category' => $category, 'filters' => ['brands' => [$brand->alias],$filter1['group_alias'] => [$filter1['option_alias']]]]);
// $this->createRow($url , 0.7,$content);
// }
//
// }
// }
// }
|
38ed47e1
Administrator
20.07.16
|
222
223
224
225
226
227
228
229
230
231
232
233
|
$content .= '</urlset>';
fwrite($handle, $content);
fclose($handle);
print $dirName .'/'. $filename;
}
}
|