/
var
/
www
/
html
/
gnet_live
/
app
/
Console
/
Commands
/
Upload File
HOME
<?php namespace App\Console\Commands; use App\Models\Article; use App\Models\Branch; use App\Models\Catalogue; use App\Models\Category; use App\Models\Product; use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Log; use Psr\Http\Message\UriInterface; use Spatie\Crawler\Crawler; use Illuminate\Support\Str; use Spatie\Sitemap\Sitemap; use Spatie\Sitemap\SitemapGenerator; use Spatie\Sitemap\SitemapIndex; use Spatie\Sitemap\Tags\Url; class GenerateSitemap extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'sitemap:generate'; /** * The console command description. * * @var string */ protected $description = 'Sitemap generator'; /** * Execute the console command. * * @return int */ public function handle() { $categories = Category::all(); $this->generateProductXml($categories); $this->generateBlogsXml(); $this->generateAboutUsXml(); $this->generateContanctUsXml(); $this->generateSiteDistributionXml(); $this->generateCatalogueXml($categories); $this->generateHomeXml(); $this->generateIndexXml(); } private function generateHomeXml(): void { $sitemap = Sitemap::create(); $sitemap->add( Url::create(config('app.url') . '/') ->setLastModificationDate(Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY) ->setPriority(1.0) ); $sitemap->writeToFile(public_path('/sitemap/home.xml')); } private function generateIndexXml(): void { SitemapIndex::create() ->add(config('app.url') . '/sitemap/home.xml') ->add(config('app.url') . '/sitemap/product.xml') ->add(config('app.url') . '/sitemap/blogs.xml') ->add(config('app.url') . '/sitemap/about-us.xml') ->add(config('app.url') . '/sitemap/contact-us.xml') ->add(config('app.url') . '/sitemap/titik-distribusi.xml') ->add(config('app.url') . '/sitemap/catalogue.xml') ->writeToFile(public_path('sitemap.xml')); } private function generateProductXml(Collection $categories): void { $sitemap = Sitemap::create(); // Add the /product index page first $sitemap->add( Url::create(config('app.url') . '/product') ->setLastModificationDate(Carbon::today()->startOfDay()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY) ->setPriority(0.8) ); // Add product URLs foreach ($categories as $category) { $sitemap->add( Url::create(config('app.url') . '/sitemap/product/' . $category->url . '.xml') ->setLastModificationDate(Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY) ->setPriority(0.8)); Sitemap::create() ->add( Product::where('category_id', $category->id)->get()->map(function ($product) use ($category) { return Url::create(config('app.url') . '/product/' . $category->url . '/' . ($product->url)) ->setLastModificationDate($product->updated_at ?? Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY) ->setPriority(0.8); }) ) ->writeToFile(public_path('/sitemap/product/' . $category->url . '.xml')); } $sitemap->writeToFile(public_path('/sitemap/product.xml')); } private function generateBlogsXml(): void { $sitemap = Sitemap::create(); // Add the /blogs index page first $sitemap->add( Url::create(config('app.url') . '/blogs') ->setLastModificationDate(Carbon::today()->startOfDay()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY) ->setPriority(0.9) ); // Add article URLs $articles = Article::all(); foreach ($articles as $article) { $sitemap->add( Url::create(config('app.url') . '/blogs/' . $article->url) ->setLastModificationDate($article->updated_at ?? Carbon::today()->startOfDay()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY) ->setPriority(0.9) ); } // Write to file $sitemap->writeToFile(public_path('/sitemap/blogs.xml')); } private function generateAboutUsXml(): void { $sitemap = Sitemap::create(); $sitemap->add( Url::create(config('app.url') . '/about-us') ->setLastModificationDate(Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_YEARLY) ->setPriority(0.1) ); $sitemap->writeToFile(public_path('/sitemap/about-us.xml')); } private function generateContanctUsXml(): void { $sitemap = Sitemap::create(); $sitemap->add( Url::create(config('app.url') . '/contact-us') ->setLastModificationDate(Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_YEARLY) ->setPriority(0.1) ); $sitemap->writeToFile(public_path('/sitemap/contact-us.xml')); } private function generateSiteDistributionXml(): void { $sitemap = Sitemap::create(); // Add the /titik-distribusi index page first $sitemap->add( Url::create(config('app.url') . '/titik-distribusi') ->setLastModificationDate(Carbon::today()->startOfDay()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY) ->setPriority(0.6) ); // Add titik distribusi URLs $branches = Branch::all(); foreach ($branches as $branch) { $sitemap->add( Url::create(config('app.url') . '/titik-distribusi/' . Str::slug($branch->branch_name)) ->setLastModificationDate($branch->updated_at ?? Carbon::today()->startOfDay()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY) ->setPriority(0.6) ); } // Write to file $sitemap->writeToFile(public_path('/sitemap/titik-distribusi.xml')); } private function generateCatalogueXml(Collection $categories): void { $sitemap = Sitemap::create(); foreach ($categories as $category) { $sitemap->add( Url::create(config('app.url') . '/catalogue/' . $category->url) ->setLastModificationDate(Carbon::yesterday()) ->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY) ->setPriority(0.5)); } $sitemap->writeToFile(public_path('/sitemap/catalogue.xml')); } }