in-square/opendxp-sitemap-bundle
最新稳定版本:v1.1.2
Composer 安装命令:
composer require in-square/opendxp-sitemap-bundle
包简介
Static XML sitemap generator for OpenDXP (Documents + DataObjects).
README 文档
README
Static XML sitemap generator for OpenDXP (Documents + DataObjects) with multi-site and multi-locale support.
Requirements
- PHP 8.3+
- OpenDXP 1.x / Symfony 7.4
- Symfony Messenger (for queue processing)
- Elements Process Manager (commands integrate with Process Manager)
Installation
composer require in-square/opendxp-sitemap-bundle
Enable the bundle in config/bundles.php:
return [ InSquare\OpendxpSitemapBundle\InSquareOpendxpSitemapBundle::class => ['all' => true], ];
Configuration
Create config/packages/in_square_opendxp_sitemap.yaml:
in_square_opendxp_sitemap: sites: - id: 0 host: 'example.com' languages: ['pl'] objects: - 'OpenDXP\Model\DataObject\Post' - 'OpenDXP\Model\DataObject\PostCategory' - id: 1 host: 'example.org' languages: ['pl', 'en'] objects: - 'OpenDXP\Model\DataObject\Product' object_generators: post: 'App\\Sitemap\\PostGenerator' postCategory: 'App\\Sitemap\\PostCategoryGenerator' product: 'App\\Sitemap\\ProductGenerator' output: dir: '%kernel.project_dir%/public/sitemap' max_urls_per_file: 50000 hreflang: enabled: true x_default_language: 'en' # optional x_default_fallback_language: 'pl' # optional fallback used only when x_default_language is missing
Notes:
sites[*].objectsdefines DataObject classes to collect for each site.object_generatorskeys must matchObjectGeneratorInterface::getId(); keys are used in sitemap filenames.hreflang.enabledcontrols generation of<xhtml:link rel="alternate" ... />entries.hreflang.x_default_languageselects preferred locale forx-default.hreflang.x_default_fallback_languageis an explicit fallback locale if preferred one is missing; without it,x-defaultis omitted.
Commands
bin/console insquare:sitemap:install– createsitemap_itemtable.bin/console insquare:sitemap:collect– dispatch sitemap messages to Messenger.bin/console insquare:sitemap:dump– generate XML files from database.bin/console insquare:sitemap:delete– delete XML files and truncate the table.
Add routing for Messenger in config/packages/framework.yaml:
framework: messenger: routing: 'InSquare\OpendxpSitemapBundle\Message\SitemapItemCreateMessage': async
Run Messenger worker for the queue:
bin/console messenger:consume async
Controller
The bundle exposes /sitemap.xml. The controller selects the correct site and serves the
pre-generated file from public/sitemap/sitemap.{siteId}.xml.
Object generators
Implement InSquare\OpendxpSitemapBundle\Generator\ObjectGeneratorWithContextInterface in your app
to receive a normalized host from sitemap configuration:
<?php declare(strict_types=1); namespace App\Sitemap; use InSquare\OpendxpSitemapBundle\Generator\ObjectGeneratorWithContextInterface; use InSquare\OpendxpSitemapBundle\Generator\SitemapItemData; use InSquare\OpendxpSitemapBundle\Generator\SitemapGeneratorContext; use OpenDXP\Model\DataObject\Post; final class PostGenerator implements ObjectGeneratorWithContextInterface { public function getId(): string { return 'post'; } public function getObjectClass(): string { return Post::class; } public function buildItem(object $object, SitemapGeneratorContext $context): ?SitemapItemData { if (!$object instanceof Post) { return null; } if (!$object->isPublished()) { return null; } $linkGenerator = $object->getClass()?->getLinkGenerator(); if ($linkGenerator === null) { return null; } $locale = $context->getLocale(); $host = $context->getHost(); $path = $linkGenerator->generate($object, [ 'locale' => $locale, 'siteId' => $context->getSiteId(), ]); $url = $host . '/' . ltrim((string) $path, '/'); $lastmod = (new \DateTimeImmutable())->setTimestamp($object->getModificationDate()); return new SitemapItemData( $object->getId(), $object::class, $url, $lastmod ); } }
The generator returns a SitemapItemData DTO used to persist rows in sitemap_item.
Notes:
SitemapGeneratorContext::getHost()is normalized to an absolute host (for examplehttps://example.com).ObjectGeneratorInterfaceis deprecated and supported only for backward compatibility.
统计信息
- 总下载量: 11
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 3
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-or-later
- 更新时间: 2026-03-30