Sitemap
Sitemap
Juzaweb CMS uses the Sitemap facade (mapped to Juzaweb\Modules\Core\Contracts\Sitemap) to manage XML sitemaps. It integrates with Spatie's Sitemap package but adds a registry system for modules.
Usage
use Juzaweb\Modules\Core\Facades\Sitemap;
Methods
register($key, $class)
Register a new sitemap provider. The class must implement Juzaweb\Modules\Core\Contracts\Sitemapable.
use Juzaweb\Modules\Core\Facades\Sitemap;
public function boot()
{
Sitemap::register('posts', \Juzaweb\Modules\Blog\Models\Post::class);
}
all()
Get all registered sitemap providers.
$providers = Sitemap::all();
get($key)
Get a specific sitemap provider class by key.
$class = Sitemap::get('posts');
Implementing Sitemapable
To make a Model or Class compatible with the Sitemap system, implement the Juzaweb\Modules\Core\Contracts\Sitemapable interface.
namespace Juzaweb\Modules\Blog\Models;
use Juzaweb\Modules\Core\Models\Model;
use Juzaweb\Modules\Core\Contracts\Sitemapable;
use Illuminate\Database\Eloquent\Builder;
use Spatie\Sitemap\Tags\Url;
class Post extends Model implements Sitemapable
{
/**
* Query scope for sitemap generation.
*/
public function scopeForSitemap(Builder $builder): Builder
{
return $builder->where('status', 'publish');
}
/**
* Get the URL for the sitemap item.
*/
public function getUrl(): string
{
return route('post.detail', [$this->slug]);
}
/**
* Get the sitemap page name (group).
*/
public static function getSitemapPage(): string
{
return 'posts';
}
/**
* Map the model to a Sitemap Tag (Spatie).
*/
public function toSitemapTag(): Url|string|array
{
return Url::create($this->getUrl())
->setLastModificationDate($this->updated_at)
->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)
->setPriority(0.8);
}
}