diff --git a/addons/default/visiosoft/cats-module/resources/config/settings.php b/addons/default/visiosoft/cats-module/resources/config/settings.php new file mode 100644 index 000000000..642d1000f --- /dev/null +++ b/addons/default/visiosoft/cats-module/resources/config/settings.php @@ -0,0 +1,10 @@ + [ + "type" => "anomaly.field_type.integer", + "config" => [ + "default_value" => 5000, + ] + ], +]; diff --git a/addons/default/visiosoft/cats-module/resources/lang/en/setting.php b/addons/default/visiosoft/cats-module/resources/lang/en/setting.php new file mode 100644 index 000000000..ab795c85d --- /dev/null +++ b/addons/default/visiosoft/cats-module/resources/lang/en/setting.php @@ -0,0 +1,7 @@ + [ + 'name' => 'Sitemap Dividing Number', + ], +]; diff --git a/addons/default/visiosoft/cats-module/resources/views/sitemap/categories.twig b/addons/default/visiosoft/cats-module/resources/views/sitemap/categories.twig index 3cf9a85c2..7a2050821 100644 --- a/addons/default/visiosoft/cats-module/resources/views/sitemap/categories.twig +++ b/addons/default/visiosoft/cats-module/resources/views/sitemap/categories.twig @@ -1,9 +1,8 @@ - {% for category in categories %} + {% for link in sitemapLinks %} - {{ url_route('adv_list_seo', [category.slug]) }} - {{ category.created_at.tz('UTC').toAtomString() }} + {{ link }} weekly {% endfor %} diff --git a/addons/default/visiosoft/cats-module/src/Http/Controller/SitemapController.php b/addons/default/visiosoft/cats-module/src/Http/Controller/SitemapController.php index b7aa34d9a..8c1ab5f1e 100644 --- a/addons/default/visiosoft/cats-module/src/Http/Controller/SitemapController.php +++ b/addons/default/visiosoft/cats-module/src/Http/Controller/SitemapController.php @@ -2,22 +2,31 @@ use Anomaly\Streams\Platform\Http\Controller\PublicController; use Visiosoft\CatsModule\Category\Contract\CategoryRepositoryInterface; +use Visiosoft\LocationModule\City\Contract\CityRepositoryInterface; class SitemapController extends PublicController { private $categoryRepository; + private $cityRepository; - public function __construct(CategoryRepositoryInterface $categoryRepository) + public function __construct( + CategoryRepositoryInterface $categoryRepository, + CityRepositoryInterface $cityRepository + ) { parent::__construct(); $this->categoryRepository = $categoryRepository; + $this->cityRepository = $cityRepository; } public function index() { $categoriesCount = $this->categoryRepository->count(); - $pagesCount = ceil($categoriesCount / 5000); + $citiesCount = $this->cityRepository->count(); + + $pagesCount = $citiesCount ? $categoriesCount * $citiesCount : $categoriesCount; + $pagesCount = ceil($pagesCount / setting_value('visiosoft.module.cats::sitemap_dividing_number')); return response()->view('visiosoft.module.cats::sitemap.index', [ 'pagesCount' => $pagesCount, @@ -26,13 +35,44 @@ class SitemapController extends PublicController public function categories() { + $sitemapDividingNumber = setting_value('visiosoft.module.cats::sitemap_dividing_number'); $page = request()->page ?: 1; $skip = $page - 1; - $categories = $this->categoryRepository->newQuery()->skip(5000 * $skip)->take(5000)->get(); + $citiesCount = $this->cityRepository->count(); + if ($citiesCount) { + $categoriesCount = $this->categoryRepository->count(); + + $takeCategories = $categoriesCount / ($categoriesCount * $citiesCount / $sitemapDividingNumber); + + $categories = $this->categoryRepository + ->newQuery() + ->skip($takeCategories * $skip) + ->take($takeCategories) + ->get(); + + $sitemapLinks = array(); + $cities = $this->cityRepository->all(); + foreach ($categories as $category) { + foreach ($cities as $city) { + $sitemapLinks[] = route('adv_list_seo', [$category->slug, $city->slug]); + } + } + } else { + $categories = $this->categoryRepository + ->newQuery() + ->skip($sitemapDividingNumber * $skip) + ->take($sitemapDividingNumber) + ->get(); + + $sitemapLinks = array(); + foreach ($categories as $category) { + $sitemapLinks[] = route('adv_list_seo', [$category->slug]); + } + } return response()->view('visiosoft.module.cats::sitemap.categories', [ - 'categories' => $categories, + 'sitemapLinks' => $sitemapLinks, ])->header('Content-Type', 'text/xml'); } }