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>
This commit is contained in:
@@ -22,15 +22,15 @@ final class EvaluatePageVisibilityUseCase
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Evalúa si el componente debe mostrarse en la página actual
|
||||
* Evalua si el componente debe mostrarse en la pagina actual
|
||||
*/
|
||||
public function execute(string $componentName): bool
|
||||
{
|
||||
$config = $this->visibilityRepository->getVisibilityConfig($componentName);
|
||||
|
||||
if (empty($config)) {
|
||||
// Usar constante compartida (DRY)
|
||||
$config = VisibilityDefaults::DEFAULT_VISIBILITY;
|
||||
// Usar defaults especificos por componente si existen
|
||||
$config = VisibilityDefaults::getForComponent($componentName);
|
||||
}
|
||||
|
||||
$pageType = $this->pageTypeDetector->detect();
|
||||
|
||||
@@ -16,13 +16,13 @@ namespace ROITheme\Shared\Domain\Constants;
|
||||
final class VisibilityDefaults
|
||||
{
|
||||
/**
|
||||
* Configuración de visibilidad por defecto para nuevos componentes
|
||||
* Configuracion de visibilidad por defecto para componentes generales
|
||||
*
|
||||
* - Home: SÍ mostrar (página principal)
|
||||
* - Posts: SÍ mostrar (artículos del blog)
|
||||
* - Pages: SÍ mostrar (páginas estáticas)
|
||||
* - Archives: NO mostrar (listados de categorías/tags)
|
||||
* - Search: NO mostrar (resultados de búsqueda)
|
||||
* - Home: SI mostrar (pagina principal)
|
||||
* - Posts: SI mostrar (articulos del blog)
|
||||
* - Pages: SI mostrar (paginas estaticas)
|
||||
* - Archives: NO mostrar (listados de categorias/tags)
|
||||
* - Search: NO mostrar (resultados de busqueda)
|
||||
*/
|
||||
public const DEFAULT_VISIBILITY = [
|
||||
'show_on_home' => true,
|
||||
@@ -33,7 +33,39 @@ final class VisibilityDefaults
|
||||
];
|
||||
|
||||
/**
|
||||
* Lista de campos de visibilidad válidos
|
||||
* Defaults especificos por componente (sobrescriben DEFAULT_VISIBILITY)
|
||||
*
|
||||
* Componentes de listados:
|
||||
* - archive-header: Solo en archives (home para blog title)
|
||||
* - post-grid: En home, archives y search
|
||||
* - cta-box-sidebar: Tambien en archives
|
||||
*/
|
||||
public const COMPONENT_VISIBILITY = [
|
||||
'archive-header' => [
|
||||
'show_on_home' => true, // Para mostrar blog_title
|
||||
'show_on_posts' => false,
|
||||
'show_on_pages' => false,
|
||||
'show_on_archives' => true, // Proposito principal
|
||||
'show_on_search' => true, // Mostrar "Resultados: X"
|
||||
],
|
||||
'post-grid' => [
|
||||
'show_on_home' => true, // Blog principal
|
||||
'show_on_posts' => false,
|
||||
'show_on_pages' => false,
|
||||
'show_on_archives' => true, // Listados de categoria/tag
|
||||
'show_on_search' => true, // Resultados de busqueda
|
||||
],
|
||||
'cta-box-sidebar' => [
|
||||
'show_on_home' => true,
|
||||
'show_on_posts' => true,
|
||||
'show_on_pages' => true,
|
||||
'show_on_archives' => true, // Visible en archives
|
||||
'show_on_search' => false,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Lista de campos de visibilidad validos
|
||||
*/
|
||||
public const VISIBILITY_FIELDS = [
|
||||
'show_on_home',
|
||||
@@ -42,4 +74,15 @@ final class VisibilityDefaults
|
||||
'show_on_archives',
|
||||
'show_on_search',
|
||||
];
|
||||
|
||||
/**
|
||||
* Obtiene los defaults para un componente especifico
|
||||
*
|
||||
* @param string $componentName Nombre del componente (kebab-case)
|
||||
* @return array<string, bool> Configuracion de visibilidad
|
||||
*/
|
||||
public static function getForComponent(string $componentName): array
|
||||
{
|
||||
return self::COMPONENT_VISIBILITY[$componentName] ?? self::DEFAULT_VISIBILITY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ final class MigratePageVisibilityService
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Ejecuta la migración para todos los componentes
|
||||
* Ejecuta la migracion para todos los componentes
|
||||
*
|
||||
* @return array{created: int, skipped: int}
|
||||
*/
|
||||
@@ -37,10 +37,10 @@ final class MigratePageVisibilityService
|
||||
continue;
|
||||
}
|
||||
|
||||
// Usar constante compartida (DRY)
|
||||
// Usar defaults especificos por componente si existen
|
||||
$this->visibilityRepository->createDefaultVisibility(
|
||||
$componentName,
|
||||
VisibilityDefaults::DEFAULT_VISIBILITY
|
||||
VisibilityDefaults::getForComponent($componentName)
|
||||
);
|
||||
$created++;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,10 @@ final class WordPressPageTypeDetector implements PageTypeDetectorInterface
|
||||
|
||||
public function isHome(): bool
|
||||
{
|
||||
return is_front_page();
|
||||
// is_front_page() = pagina de inicio configurada
|
||||
// is_home() = pagina de posts (blog)
|
||||
// Ambas cuentan como "home" para visibilidad
|
||||
return is_front_page() || is_home();
|
||||
}
|
||||
|
||||
public function isPost(): bool
|
||||
|
||||
Reference in New Issue
Block a user