search($category, $filter); if (!empty( $productProvider->models )) { return true; } else { return false; } } public function getAddStatic() { return [ 'https://dev.extremstyle.ua/ru', ]; } public function getVariants() { return ProductVariant::find() ->with('lang') ->with('product.lang') ->batch(1000); } public function getSeoLinks() { return Seo::find() ->where([ 'meta' => '' ]) ->all(); } public function getStaticPages() { return Page::find() ->with('lang') ->all(); } public function getCategories() { return Category::find() ->with('lang') ->all(); } public function getCategoriesWithFilters() { return Category::find() ->with('lang') ->joinWith('taxGroups.lang') ->with('taxGroups.taxOptions.lang') ->where(['tax_group.meta_robots' => '',]) ->all(); } public function getBrands() { return Brand::find() ->joinWith('lang') ->all(); } /** * @param $category Category; * * @return mixed */ public function getFilters($category) { return $category->getActiveFilters() ->andWhere( [ 'tax_group.meta_robots' => '', ] ) ->all(); } public function checkUrl($url) { if (!in_array($url, $this->urlList)) { $this->urlList[] = $url; return true; } else { return false; } } public function createRow($url, $priority, &$content) { if ($this->checkUrl($url)) { print $this->count++ . $url . "\n"; $content .= '' . '' . $url . '' . '' . date( 'Y-m-d' ) . '' . 'Weekly' . '' . $priority . '' . ''; } } public function actionProcess() { $config = ArrayHelper::merge( require( \Yii::getAlias('@frontend/config/') . 'main.php' ), require( \Yii::getAlias('@common/config/') . 'main.php' ) ); Yii::$app->urlManager->addRules($config[ 'components' ][ 'urlManager' ][ 'rules' ]); $dirName = Yii::getAlias('@frontend') . '/web'; $filename = 'test_sitemap.xml'; setlocale(LC_ALL, 'ru_RU.CP1251'); $handle = fopen($dirName . '/' . $filename, "w"); $content = ''; foreach ($this->getAddStatic() as $page) { $this->createRow($page, 1, $content); } foreach ($this->getStaticPages() as $page) { $url = Url::to( [ 'site/page', 'slug' => $page->lang->alias, ] ); $this->createRow($url, 1, $content); } foreach ($this->getCategories() as $category) { $url = Url::to( [ 'catalog/category', 'category' => $category->lang->alias, ] ); $this->createRow($url, 0.8, $content); } foreach ($this->getVariants() as $rows) { foreach ($rows as $row) { $url = Url::to( [ 'catalog/product', 'product' => $row->product->lang->alias, 'variant' => $row->sku, ] ); $this->createRow($url, 0.9, $content); } } foreach ($this->getBrands() as $brand) { $url = Url::to( [ 'brand/view', 'slug' => $brand->lang->alias, ] ); $this->createRow($url, 0.7, $content); } foreach ($this->getCategoriesWithFilters() as $category) { foreach ($category->taxGroups as $group) { foreach ($group->taxOptions as $option) { $url = Url::to( [ 'catalog/category', 'category' => $category, 'filters' => [ $group->lang->alias => [ $option->lang->alias ] ], ] ); $this->createRow($url, 0.8, $content); } } } foreach ($this->getSeoLinks() as $link) { $url = Yii::$app->urlManager->baseUrl . $link->url; $this->createRow($url, 0.7, $content); } // 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->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); // } // // } // } // } $content .= ''; fwrite($handle, $content); fclose($handle); print $dirName . '/' . $filename; } }