Files
roi-theme/Admin/Shared/Infrastructure/FieldMapping/FieldMapperProvider.php
FrankZamora c23dc22d76 feat(templates): add archive-header and post-grid components
- Add ArchiveHeader component (schema, renderer, formbuilder)
- Add PostGrid component (schema, renderer, formbuilder)
- Unify archive templates (home, archive, category, tag,
  author, date, search)
- Add page visibility system with VisibilityDefaults
- Register components in AdminDashboardRenderer
- Fix boolean conversion in functions-addon.php
- All 172 unit tests passed

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 20:36:27 -06:00

73 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace ROITheme\Admin\Shared\Infrastructure\FieldMapping;
use ROITheme\Admin\Shared\Domain\Contracts\FieldMapperInterface;
/**
* Provider para auto-registro de Field Mappers
*
* RESPONSABILIDAD:
* - Descubrir automaticamente FieldMappers en cada modulo
* - Registrarlos en el FieldMapperRegistry
*
* BENEFICIO:
* - Agregar nuevo componente = crear FieldMapper (sin tocar functions.php)
* - Eliminar componente = borrar carpeta (limpieza automatica)
*/
final class FieldMapperProvider
{
private const MODULES = [
'TopNotificationBar',
'Navbar',
'CtaLetsTalk',
'Hero',
'FeaturedImage',
'TableOfContents',
'CtaBoxSidebar',
'SocialShare',
'CtaPost',
'RelatedPost',
'ContactForm',
'Footer',
'ThemeSettings',
'AdsensePlacement',
'ArchiveHeader',
'PostGrid',
];
public function __construct(
private readonly FieldMapperRegistry $registry
) {}
/**
* Registra todos los FieldMappers disponibles
*/
public function registerAll(): void
{
foreach (self::MODULES as $module) {
$this->registerIfExists($module);
}
}
/**
* Registra un mapper si existe la clase
*/
private function registerIfExists(string $module): void
{
$className = sprintf(
'ROITheme\\Admin\\%s\\Infrastructure\\FieldMapping\\%sFieldMapper',
$module,
$module
);
if (class_exists($className)) {
$mapper = new $className();
if ($mapper instanceof FieldMapperInterface) {
$this->registry->register($mapper);
}
}
}
}