search($category, $filter); if (!empty($productProvider->models)) { return true; } else { return false; } } /** * @return array */ public function getAddStatic() { return [ 'https://www.linija-svitla.ua', ]; } /** * @return array|\yii\db\ActiveRecord[] */ public function getProducts() { return Product::find() ->all(); } /** * @return array|\yii\db\ActiveRecord[] */ public function getSeoLinks() { return Seo::find() ->where( [ 'not like', 'meta', '%noindex%', ] ) ->all(); } /** * @return array|\yii\db\ActiveRecord[] */ public function getStaticPages() { return Page::find() ->all(); } /** * @return array|\common\modules\product\models\Category[]|\yii\db\ActiveRecord[] */ public function getCategories() { return Category::find() ->all(); } /** * @return array|\yii\db\ActiveRecord[] */ public function getArticles() { return Articles::find() ->all(); } /** * @param $category * * @return mixed */ public function getBrands($category) { return $category->brands; } /** * @return array|\yii\db\ActiveRecord[] */ public function getOptions() { return TaxOption::find() ->innerJoinWith( [ 'taxGroup.category', ] ) ->where( [ 'tax_group.is_filter' => true, ] ) ->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)){ $this->stdout('# ' . $this->count++ . ' ' . $url . "\n", Console::FG_GREEN); $content .= '' . '' . $url . '' . '' . date( 'Y-m-d' ) . '' . 'Weekly' . '' . $priority . '' . ''; // } } 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' ]); $this->stdout('Start!' . "\n", Console::FG_RED); $dirName = Yii::getAlias('@frontend') . '/web'; $filename = 'sitemap.xml'; setlocale(LC_ALL, 'ru_RU.CP1251'); $handle = fopen($dirName . '/' . $filename, "w"); $content = ''; $this->stdout('Add static' . "\n", Console::FG_BLUE); foreach ($this->getAddStatic() as $page) { $this->createRow($page, 1, $content); } $this->stdout('Add static pages' . "\n", Console::FG_BLUE); foreach ($this->getStaticPages() as $page) { $url = Url::to( [ 'text/main', 'translit' => $page->translit, ], true ); $this->createRow($url, 0.5, $content); } $this->stdout('Add categories' . "\n", Console::FG_BLUE); foreach ($this->getCategories() as $category) { $url = Url::to( [ 'catalog/category', 'category' => $category, ], true ); $this->createRow($url, 0.9, $content); } $this->stdout('Add products' . "\n", Console::FG_BLUE); foreach ($this->getProducts() as $product) { $url = Url::to( [ 'catalog/product', 'product' => $product, ], true ); $this->createRow($url, 0.7, $content); } $this->stdout('Add articles' . "\n", Console::FG_BLUE); foreach ($this->getArticles() as $article) { $url = Url::to( [ 'articles/show', 'translit' => $article->translit, ], true ); $this->createRow($url, 0.7, $content); } $this->stdout('Add brands' . "\n", Console::FG_BLUE); 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 ] ], ], true ); $this->createRow($url, 0.8, $content); } } } $this->stdout('Add filters' . "\n", Console::FG_BLUE); foreach ($this->getOptions() as $option) { $url = Url::to( [ 'catalog/category', 'category' => $option->taxGroup->category, 'filters' => [ $option->taxGroup->alias => [ $option->alias ] ], ], true ); $this->createRow($url, 0.8, $content); } $this->stdout('Add seo links' . "\n", Console::FG_BLUE); foreach ($this->getSeoLinks() as $link) { $url = Yii::$app->urlManager->baseUrl . $link->url; $this->createRow($url, 0.8, $content); } $content .= ''; fwrite($handle, $content); fclose($handle); $this->stdout('File name: ' . $dirName . '/' . $filename . "\n", Console::FG_CYAN); } }