urlManager->baseUrl . '/ru', ]; } public function getHost() { return Yii::$app->urlManager->baseUrl . '/ru'; } public function getVariants() { return Product::find()->select('product.*', 'DISTINCT ON (product_id)') ->with('lang') ->innerJoinWith('enabledVariants.lang'); } public function getProducts() { $products = Product::find() ->innerJoinWith('variant') ->innerJoinWith('brand.lang')->with('lang') ->where([ '!=', 'product_variant.price', 0 ]) ->andWhere([ '!=', 'product_variant.stock', 0 ]) ->all(); return $products; } public function getSeoLinks() { return Seo::find() ->where( [ '!=', 'meta', 'noindex,nofollow', ] ) ->all(); } public function getStaticPages() { return Page::find() ->with('lang') ->all(); } public function getCategories() { return Category::find() ->joinWith('lang') ->where( [ '!=', 'parent_id', 0, ] ) ->andWhere( [ 'not', [ 'meta_robots' => [ 'noindex,nofollow', 'noindex, nofollow', 'noindex,follow', 'noindex, follow', ], ], ] ) ->all(); } public function getCategoriesWithFilters() { return Category::find() ->with('lang') ->joinWith('taxGroups.lang') ->with('taxGroups.taxOptions.lang') ->where( [ '!=', 'parent_id', 0, ] ) ->andWhere( [ 'not', [ 'tax_group.meta_robots' => [ 'noindex,nofollow', 'noindex, nofollow', 'noindex,follow', 'noindex, follow', ], ], ] ) ->andWhere([ 'tax_group.is_filter' => true ]) ->all(); } public function getBrands() { return Brand::find() ->joinWith('lang') ->andWhere( [ 'not', [ 'meta_robots' => [ 'noindex,nofollow', 'noindex, nofollow', 'noindex,follow', 'noindex, follow', ], ], ] ) ->all(); } public function checkUrl($url) { if (!in_array($url, $this->urlList)) { $this->urlList[] = $url; return true; } else { return false; } } public function createRow($url, $priority, $freq = 'Weekly') { if(in_array($url, $this->robots)) { return; } // if ($this->checkUrl($url)) { if ($this->count % 500 == 0) { $this->stdout($this->count . " : ", Console::BOLD); $this->stdout($url . "\n", Console::FG_YELLOW); } $this->content .= '' . '' . $url . '' . '' . date( 'Y-m-d' ) . '' . '' . $freq . '' . '' . $priority . '' . ''; $this->count++; if ($this->count % 10000 == 0) { $this->content .= ''; $this->stdout('Added unset' . "\n", Console::FG_CYAN); fwrite($this->handle, $this->content); fclose($this->handle); $this->mapNumber++; $this->mainMap .= '' . 'https://extremstyle.ua/' . $this->fileName . '' . '' . date( 'Y-m-d' ) . '' . ''; $this->fileName = 'sitemap' . $this->mapNumber . '.xml'; $this->handle = fopen(Yii::getAlias('@frontend') . '/web' . '/' . $this->fileName, "w"); $this->content = ''; } // } } public function actionProcess() { Language::setCurrent('ru'); $config = ArrayHelper::merge( require( \Yii::getAlias('@frontend/config/') . 'main.php' ), require( \Yii::getAlias('@common/config/') . 'main.php' ), [ 'components' => [ 'urlManager' => [ 'hostInfo' => 'https://extremstyle.ua' ] ] ] ); if (isset($config[ 'components' ][ 'urlManager' ][ 'class' ])) { unset($config[ 'components' ][ 'urlManager' ][ 'class' ]); } //Yii::$app->urlManager = new LanguageUrlManager($config['components']['urlManager']); $urlManager = new LanguageUrlManager($config[ 'components' ][ 'urlManager' ]); $this->mainMap = ''; $this->mainMap .= ''; $this->fileName = 'sitemap' . $this->mapNumber . '.xml'; setlocale(LC_ALL, 'ru_RU.CP1251'); $this->handle = fopen(Yii::getAlias('@frontend') . '/web' . '/' . $this->fileName, "w"); $this->content = ''; $robots = file_get_contents(\Yii::getAlias('@frontend/web/robots.txt')); if (preg_match_all('/Disallow: (.*)\n/', $robots, $matches)) { foreach ($matches[ 1 ] as $match) { $this->robots[] = $this->getHost() . $match; } } $this->stdout('Add static' . PHP_EOL, Console::FG_BLUE); foreach ($this->getAddStatic() as $page) { $this->createRow($page, 1, 'Daily'); } $this->stdout('Add pages' . PHP_EOL, Console::FG_BLUE); foreach ($this->getStaticPages() as $page) { $url = $urlManager->createAbsoluteUrl( [ 'site/page', 'slug' => $page->lang->alias, ] ); $this->createRow($url, 0.5); } $this->stdout('Add categories' . PHP_EOL, Console::FG_BLUE); foreach ($this->getCategories() as $category) { $url = $urlManager->createAbsoluteUrl( [ 'catalog/category', 'category' => $category->lang->alias, ] ); $this->createRow($url, 0.9, 'Daily'); } // foreach ($this->getVariants() // ->each(1000) as $row) { // /** // * @var Product $row // */ // if(!empty($row->enabledVariants)) { // $variant = $row->enabledVariants[0]; // } // if(!empty($variant)) { // if (!preg_match("@^[a-zA-Z\d]+$@i", $variant->sku)) { // continue; // } // $url = $urlManager->createAbsoluteUrl( // [ // 'catalog/product', // 'product' => $row->lang->alias, // ] // ); // $this->createRow($url, 0.7, 'Daily'); // } // } /** * New products generation */ $this->stdout('Add products' . PHP_EOL, Console::FG_BLUE); foreach ($this->getProducts() as $product) { /** * @var Product $product */ $url = $urlManager->createAbsoluteUrl( [ 'catalog/product', 'product' => $product->lang->alias, ] ); $this->createRow($url, 0.7, 'Daily'); } $this->stdout('Add brands' . PHP_EOL, Console::FG_BLUE); foreach ($this->getBrands() as $brand) { $url = $urlManager->createAbsoluteUrl( [ 'brand/view', 'slug' => $brand->lang->alias, ] ); $this->createRow($url, 0.5); } $this->stdout('Add filters' . PHP_EOL, Console::FG_BLUE); foreach ($this->getCategoriesWithFilters() as $category) { foreach ($category->taxGroups as $group) { if (in_array( $group->meta_robots, [ 'noindex,nofollow', 'noindex, nofollow', 'noindex,follow', 'noindex, follow', ] )) { continue; } if ($group->is_filter) { foreach ($group->options as $option) { $url = $urlManager->createAbsoluteUrl( [ 'catalog/category', 'category' => $category, 'filters' => [ $group->lang->alias => [ $option->lang->alias ] ], ] ); $this->createRow($url, 0.8, 'Daily'); } } } } $this->stdout('Add seo links' . PHP_EOL, Console::FG_BLUE); foreach ($this->getSeoLinks() as $link) { $url = Yii::$app->urlManager->baseUrl . $link->url; $this->createRow($url, 0.7); } $this->content .= ''; fwrite($this->handle, $this->content); fclose($this->handle); $this->mainMap .= '' . '' . 'https://extremstyle.ua/' . $this->fileName . '' . '' . date( 'Y-m-d' ) . '' . '' . ''; $mainHandle = fopen(Yii::getAlias('@frontend') . '/web/sitemap.xml', "w"); fwrite($mainHandle, $this->mainMap); fclose($mainHandle); $this->stdout(Yii::getAlias('@frontend') . '/web' . '/' . $this->fileName . "\n", Console::FG_GREEN); } }