buildHeader($componentId); $html .= '
'; // Columna izquierda $html .= '
'; $html .= $this->buildVisibilityGroup($componentId); $html .= $this->buildContentGroup($componentId); $html .= $this->buildBehaviorGroup($componentId); $html .= '
'; // Columna derecha $html .= '
'; $html .= $this->buildTypographyGroup($componentId); $html .= $this->buildColorsGroup($componentId); $html .= $this->buildSpacingGroup($componentId); $html .= '
'; $html .= '
'; return $html; } private function buildHeader(string $componentId): string { $html = '
renderer->getFieldValue($componentId, 'visibility', 'is_enabled', true); $html .= $this->buildSwitch('archiveHeaderEnabled', 'Activar componente', 'bi-power', $enabled); $showOnDesktop = $this->renderer->getFieldValue($componentId, 'visibility', 'show_on_desktop', true); $html .= $this->buildSwitch('archiveHeaderShowOnDesktop', 'Mostrar en escritorio', 'bi-display', $showOnDesktop); $showOnMobile = $this->renderer->getFieldValue($componentId, 'visibility', 'show_on_mobile', true); $html .= $this->buildSwitch('archiveHeaderShowOnMobile', 'Mostrar en movil', 'bi-phone', $showOnMobile); // Page visibility checkboxes $html .= '
'; $html .= '

'; $html .= ' '; $html .= ' Mostrar en tipos de pagina'; $html .= '

'; $showOnHome = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_home', true); $showOnPosts = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_posts', false); $showOnPages = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_pages', false); $showOnArchives = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_archives', true); $showOnSearch = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_search', true); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('archiveHeaderVisibilityHome', 'Home', 'bi-house', $showOnHome); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('archiveHeaderVisibilityPosts', 'Posts', 'bi-file-earmark-text', $showOnPosts); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('archiveHeaderVisibilityPages', 'Paginas', 'bi-file-earmark', $showOnPages); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('archiveHeaderVisibilityArchives', 'Archivos', 'bi-archive', $showOnArchives); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('archiveHeaderVisibilitySearch', 'Busqueda', 'bi-search', $showOnSearch); $html .= '
'; $html .= '
'; // Exclusions $exclusionPartial = new ExclusionFormPartial($this->renderer); $html .= $exclusionPartial->render($componentId, 'archiveHeader'); $html .= '
'; $html .= ''; return $html; } private function buildContentGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Contenido'; $html .= '
'; // Blog Title $blogTitle = $this->renderer->getFieldValue($componentId, 'content', 'blog_title', 'Blog'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= ' Mostrado en la pagina principal del blog'; $html .= '
'; // Switches $showPostCount = $this->renderer->getFieldValue($componentId, 'content', 'show_post_count', true); $html .= $this->buildSwitch('archiveHeaderShowPostCount', 'Mostrar contador de posts', 'bi-hash', $showPostCount); $showDescription = $this->renderer->getFieldValue($componentId, 'content', 'show_description', true); $html .= $this->buildSwitch('archiveHeaderShowDescription', 'Mostrar descripcion', 'bi-text-paragraph', $showDescription); // Prefixes section $html .= '
'; $html .= '

'; $html .= ' '; $html .= ' Prefijos de titulo'; $html .= '

'; $html .= '
'; $categoryPrefix = $this->renderer->getFieldValue($componentId, 'content', 'category_prefix', 'Categoria:'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $tagPrefix = $this->renderer->getFieldValue($componentId, 'content', 'tag_prefix', 'Etiqueta:'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $authorPrefix = $this->renderer->getFieldValue($componentId, 'content', 'author_prefix', 'Articulos de:'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $datePrefix = $this->renderer->getFieldValue($componentId, 'content', 'date_prefix', 'Archivo:'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $searchPrefix = $this->renderer->getFieldValue($componentId, 'content', 'search_prefix', 'Resultados para:'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Post count texts $html .= '
'; $html .= '

'; $html .= ' '; $html .= ' Textos del contador'; $html .= '

'; $html .= '
'; $countSingular = $this->renderer->getFieldValue($componentId, 'content', 'posts_count_singular', 'publicacion'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $countPlural = $this->renderer->getFieldValue($componentId, 'content', 'posts_count_plural', 'publicaciones'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildBehaviorGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Comportamiento'; $html .= '
'; $isSticky = $this->renderer->getFieldValue($componentId, 'behavior', 'is_sticky', false); $html .= $this->buildSwitch('archiveHeaderIsSticky', 'Header fijo al hacer scroll', 'bi-pin-angle', $isSticky); $stickyOffset = $this->renderer->getFieldValue($componentId, 'behavior', 'sticky_offset', '0'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= ' Distancia desde el top cuando es sticky (ej: 60px)'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildTypographyGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Tipografia'; $html .= '
'; // Heading level $headingLevel = $this->renderer->getFieldValue($componentId, 'typography', 'heading_level', 'h1'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= ' Importante para SEO y accesibilidad'; $html .= '
'; $html .= '
'; $titleSize = $this->renderer->getFieldValue($componentId, 'typography', 'title_size', '2rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $titleWeight = $this->renderer->getFieldValue($componentId, 'typography', 'title_weight', '700'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $descriptionSize = $this->renderer->getFieldValue($componentId, 'typography', 'description_size', '1rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $countSize = $this->renderer->getFieldValue($componentId, 'typography', 'count_size', '0.875rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildColorsGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Colores'; $html .= '
'; $html .= '
'; $titleColor = $this->renderer->getFieldValue($componentId, 'colors', 'title_color', '#0E2337'); $html .= $this->buildColorPicker('archiveHeaderTitleColor', 'Titulo', $titleColor); $prefixColor = $this->renderer->getFieldValue($componentId, 'colors', 'prefix_color', '#6b7280'); $html .= $this->buildColorPicker('archiveHeaderPrefixColor', 'Prefijo', $prefixColor); $html .= '
'; $html .= '
'; $descriptionColor = $this->renderer->getFieldValue($componentId, 'colors', 'description_color', '#6b7280'); $html .= $this->buildColorPicker('archiveHeaderDescriptionColor', 'Descripcion', $descriptionColor); $html .= '
'; $html .= '

Contador de posts

'; $html .= '
'; $countBgColor = $this->renderer->getFieldValue($componentId, 'colors', 'count_bg_color', '#FF8600'); $html .= $this->buildColorPicker('archiveHeaderCountBgColor', 'Fondo', $countBgColor); $countTextColor = $this->renderer->getFieldValue($componentId, 'colors', 'count_text_color', '#ffffff'); $html .= $this->buildColorPicker('archiveHeaderCountTextColor', 'Texto', $countTextColor); $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildSpacingGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Espaciado'; $html .= '
'; $html .= '
'; $marginTop = $this->renderer->getFieldValue($componentId, 'spacing', 'margin_top', '2rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $marginBottom = $this->renderer->getFieldValue($componentId, 'spacing', 'margin_bottom', '2rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $padding = $this->renderer->getFieldValue($componentId, 'spacing', 'padding', '1.5rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $titleMarginBottom = $this->renderer->getFieldValue($componentId, 'spacing', 'title_margin_bottom', '0.5rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $countPadding = $this->renderer->getFieldValue($componentId, 'spacing', 'count_padding', '0.25rem 0.75rem'); $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildSwitch(string $id, string $label, string $icon, mixed $checked): string { $checked = $checked === true || $checked === '1' || $checked === 1; $html = '
'; $html .= '
'; $html .= sprintf( ' ', esc_attr($id), $checked ? 'checked' : '' ); $html .= sprintf( ' '; $html .= '
'; $html .= '
'; return $html; } private function buildColorPicker(string $id, string $label, string $value): string { $html = '
'; $html .= sprintf( ' ', esc_html($label) ); $html .= '
'; $html .= sprintf( ' ', esc_attr($id), esc_attr($value) ); $html .= sprintf( ' %s', esc_attr($id), esc_html(strtoupper($value)) ); $html .= '
'; $html .= '
'; return $html; } private function buildPageVisibilityCheckbox(string $id, string $label, string $icon, mixed $checked): string { $checked = $checked === true || $checked === '1' || $checked === 1; $html = '
'; $html .= sprintf( ' ', esc_attr($id), $checked ? 'checked' : '' ); $html .= sprintf( ' '; $html .= '
'; return $html; } }