1. Go to this page and download the library: Download otas/sitemap library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
otas / sitemap example snippets
return [
// Base URL for all sitemap links (falls back to app.url if null)
'website_url' => null,
// Subdomain prefix (e.g. 'www', 'shop')
'subdomain' => null,
// Optional base path for multi-tenant sitemap file storage
'base_path' => null,
// Default locale — used for x-default hreflang and locale prefixing
'default_locale' => 'en',
// Static pages (see Static Links section)
'static_links' => [],
// Model classes implementing SitemapContract (see Dynamic Links section)
'dynamic_links' => [],
// Whether to load the package's built-in /sitemap route
'load_routes' => true,
// Route prefix for the sitemap endpoint
'package_routes_prefix' => 'api',
// Subdirectory for published route files
'routes_publish_subdirectory' => '',
];
use Otas\Sitemap\Contracts\SitemapContract;
class Offer extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
// Path template per locale with :placeholders
}
public static function buildSitemapUrls(): array
{
// Build and return the URL array
}
}
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'offers/:modelIdentifier',
'ar' => ':modelIdentifier/العروض',
];
}
HandleDynamicSitemapHelper::buildDefaultUrls(
Collection $modelItems, // The Eloquent collection
array $translatedSegments, // Path template per locale
callable $slugResolver, // Required: provide all placeholders
float $priority, // URL priority (default: 0.8)
);
use Otas\Sitemap\Contracts\SitemapContract;
use Otas\Sitemap\Helpers\HandleDynamicSitemapHelper;
class Offer extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'offers/:modelIdentifier',
'ar' => ':modelIdentifier/العروض',
];
}
public static function buildSitemapUrls(): array
{
$offers = self::visible()->get();
return HandleDynamicSitemapHelper::buildDefaultUrls(
modelItems: $offers,
translatedSegments: self::sitemapTranslatedSegments(),
slugResolver: fn($offer) => [
':modelIdentifier' => $offer->slug,
]
);
}
}
HandleDynamicSitemapHelper::buildLocalizedUrls(
Collection $modelItems, // The Eloquent collection
array $translatedSegments, // Path template per locale
?callable $slugResolver, // Optional: resolve extra placeholders
string $routeKeyName, // Translatable attribute to pluck (default: 'slug')
float $priority, // URL priority (default: 0.8)
);
use Otas\Sitemap\Contracts\SitemapContract;
use Otas\Sitemap\Helpers\HandleDynamicSitemapHelper;
class Blog extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'blogs/:modelIdentifier',
'ar' => ':modelIdentifier/المدونة',
];
}
public static function buildSitemapUrls(): array
{
$blogs = self::visible()->hasVisibleBlogCategory()->get();
return HandleDynamicSitemapHelper::buildLocalizedUrls(
modelItems: $blogs,
translatedSegments: self::sitemapTranslatedSegments(),
);
}
}
class Offer extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'offers/:categorySlug/details/:modelIdentifier',
'ar' => ':modelIdentifier/تفاصيل/:categorySlug/العروض',
];
}
public static function buildSitemapUrls(): array
{
$offers = self::visible()->with('category')->get();
return HandleDynamicSitemapHelper::buildDefaultUrls(
modelItems: $offers,
translatedSegments: self::sitemapTranslatedSegments(),
slugResolver: fn($offer) => [
':modelIdentifier' => $offer->slug,
':categorySlug' => $offer->category->slug,
],
);
}
}
class Blog extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'blogs/:categorySlug/:modelIdentifier',
'ar' => ':modelIdentifier/:categorySlug/المدونة',
];
}
public static function buildSitemapUrls(): array
{
$blogs = self::visible()->with('category')->get();
return HandleDynamicSitemapHelper::buildLocalizedUrls(
modelItems: $blogs,
translatedSegments: self::sitemapTranslatedSegments(),
slugResolver: fn($blog) => [
':categorySlug' => $blog->category->slug,
],
);
}
}
class Product extends Model implements SitemapContract
{
public static function sitemapTranslatedSegments(): array
{
return [
'en' => 'shop/:brandSlug/:categorySlug/:modelIdentifier',
'ar' => ':modelIdentifier/:categorySlug/:brandSlug/متجر',
];
}
public static function buildSitemapUrls(): array
{
$products = self::visible()->with(['brand', 'category'])->get();
return HandleDynamicSitemapHelper::buildDefaultUrls(
modelItems: $products,
translatedSegments: self::sitemapTranslatedSegments(),
slugResolver: fn($product) => [
':modelIdentifier' => $product->slug,
':brandSlug' => $product->brand->slug,
':categorySlug' => $product->category->slug,
],
);
}
}
protected function schedule(Schedule $schedule)
{
$schedule->command('app:generate-sitemap')->daily();
}