Blame view

console/controllers/SiteMapController.php 6.78 KB
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;
      }
  
  }