in-square/opendxp-sitemap-bundle
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.
in-square/opendxp-sitemap-bundle 适用场景与选型建议
in-square/opendxp-sitemap-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 17 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「Sitemap」 「opendxp」 「opendxp-bundle」 「opendxp-plugin」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 in-square/opendxp-sitemap-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 in-square/opendxp-sitemap-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 in-square/opendxp-sitemap-bundle 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Symfony sitemap generator
PHP Simple Sitemap Generator
Interfaces for web resource models and services to retrieve and create them
Sitemap crawler/generator. For the given URL it will return sitemap XML file with URLs and images.
Sitemap and sitemap index builder for Jigsaw.
Sitemap for seo
统计信息
- 总下载量: 17
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 39
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: GPL-3.0-or-later
- 更新时间: 2026-03-30