671 lines
24 KiB
Markdown
671 lines
24 KiB
Markdown
# PROBLEMA: Defaults Hardcodeados en Algoritmo de Modularización
|
|
|
|
**Fecha:** 2025-01-13
|
|
**Estado:** 🔴 EN INVESTIGACIÓN
|
|
**Prioridad:** ALTA
|
|
|
|
---
|
|
|
|
## 📋 CONTEXTO
|
|
|
|
### Situación Actual
|
|
|
|
El tema WordPress tiene valores hardcodeados en múltiples archivos:
|
|
```
|
|
wp-content/themes/apus-theme/
|
|
├── *.php → Valores hardcodeados
|
|
├── *.html → Valores hardcodeados
|
|
├── assets/
|
|
├── css/ → Valores hardcodeados
|
|
└── js/ → Valores hardcodeados
|
|
```
|
|
|
|
### Objetivo del Sistema
|
|
|
|
El **Admin Panel** debe permitir personalizar la mayoría de valores que actualmente están hardcodeados.
|
|
|
|
### Sistema de Persistencia Disponible
|
|
|
|
**✅ Ya existe tabla personalizada:** `wp_apus_theme_components`
|
|
|
|
**Ubicación:** Base de datos WordPress
|
|
**Documentación:** Ver `ANALISIS-ESTRUCTURA-ADMIN.md`
|
|
|
|
**Estructura:**
|
|
```sql
|
|
CREATE TABLE wp_apus_theme_components (
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
component_name VARCHAR(50) NOT NULL, -- 'topbar', 'navbar', 'hero', etc.
|
|
config_key VARCHAR(100) NOT NULL, -- 'message_text', 'bg_color', etc.
|
|
config_value TEXT NOT NULL, -- Valor del campo
|
|
data_type ENUM('string','integer','boolean','array','json'),
|
|
version VARCHAR(20),
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY unique_config (component_name, config_key)
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## 🔴 PROBLEMA IDENTIFICADO
|
|
|
|
### Descripción
|
|
|
|
El algoritmo de modularización ubicado en:
|
|
```
|
|
_planeacion/apus-theme/admin-panel-theme/100-modularizacion-admin/00-algoritmo/
|
|
```
|
|
|
|
**❌ PROBLEMA CRÍTICO ENCONTRADO EN PASO 12:**
|
|
- El algoritmo instruye crear un objeto `DEFAULT_CONFIG` en JavaScript con TODOS los valores por defecto hardcodeados
|
|
- Esto viola el principio de Single Source of Truth
|
|
- Los defaults deberían venir de PHP (Settings Manager) vía AJAX, NO estar duplicados en JavaScript
|
|
|
|
### Evidencia del Problema
|
|
|
|
**Ubicación:** `00-algoritmo/12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md`
|
|
|
|
**Líneas 43-51 y 169-177:**
|
|
```javascript
|
|
const DEFAULT_CONFIG = {
|
|
enabled: true,
|
|
campo1: 'valor default',
|
|
custom_styles: {
|
|
background_color: '#0E2337',
|
|
// ... todos los campos del PASO 6
|
|
}
|
|
};
|
|
```
|
|
|
|
**Líneas 117-129 (método render()):**
|
|
```javascript
|
|
document.getElementById('topBarIconClass').value = config.icon_class || '';
|
|
document.getElementById('topBarShowLink').checked = config.show_link || false;
|
|
const bgColorInput = document.getElementById('topBarBgColor');
|
|
bgColorInput.value = config.custom_styles?.bg_color || '#000000'; // ← Fallback hardcodeado
|
|
```
|
|
|
|
### Por Qué es un Problema
|
|
|
|
1. **Duplicación de defaults:**
|
|
- PHP Settings Manager tiene defaults
|
|
- JavaScript TAMBIÉN tiene defaults (duplicado)
|
|
- Tabla DB puede tener defaults (triplicado si se hace seed)
|
|
|
|
2. **Violación de Single Source of Truth:**
|
|
- Cambiar un default requiere editar JavaScript Y PHP
|
|
- Alto riesgo de inconsistencias
|
|
|
|
3. **Arquitectura incorrecta:**
|
|
- JavaScript NO debería tener fallbacks porque `get_settings()` de PHP ya hace merge con defaults
|
|
- AJAX siempre retorna datos completos (DB + defaults merged)
|
|
|
|
---
|
|
|
|
## ❓ PREGUNTAS PARA INVESTIGACIÓN
|
|
|
|
### PREGUNTA 1: Ubicación del Problema ✅ RESPONDIDA
|
|
**¿En cuál(es) paso(s) del algoritmo se guardan valores en archivos JS?**
|
|
|
|
- [ ] PASO 1: Crear issue
|
|
- [ ] PASO 2: Análisis con Serena
|
|
- [ ] PASO 3: Crear estructura de documentación
|
|
- [ ] PASO 4: Documentar código real
|
|
- [ ] PASO 5: Documentar campos configurables
|
|
- [ ] PASO 6: Estructura JSON
|
|
- [ ] PASO 7: Documentar código configurable
|
|
- [ ] PASO 8: Referencia AJAX
|
|
- [ ] PASO 9: Plantilla estructura HTML
|
|
- [ ] PASO 10: Ejemplos componentes
|
|
- [ ] PASO 11: Ensamblar admin HTML
|
|
- [X] **PASO 12: Implementar admin JS** ← ❌ AQUÍ ESTÁ EL PROBLEMA
|
|
- [ ] PASO 13: CSS admin panel
|
|
- [ ] PASO 14: Git commits
|
|
- [ ] PASO 15: Testing
|
|
- [ ] PASO 16: Cerrar issue
|
|
|
|
**✅ Respuesta encontrada:**
|
|
- **PASO 12** instruye crear objeto `DEFAULT_CONFIG` en JavaScript con todos los defaults hardcodeados
|
|
- **Líneas problemáticas:** 43-51, 169-177, 117-129, 223-229
|
|
- **Archivos afectados:** `component-[nombre].js` (uno por cada componente)
|
|
|
|
---
|
|
|
|
### PREGUNTA 2: Archivos JS Afectados ✅ RESPONDIDA
|
|
**¿Qué archivos JavaScript están siendo modificados con valores hardcodeados?**
|
|
|
|
Opciones probables:
|
|
- [X] `admin/assets/js/admin-app.js` ← Fallbacks en método `render()`
|
|
- [X] `admin/assets/js/component-navbar.js` ← Si se siguió PASO 12
|
|
- [X] `admin/assets/js/component-*.js` (otros componentes) ← Si se siguió PASO 12
|
|
- [ ] Archivos JS del tema (fuera de admin)
|
|
- [ ] Otro: _______________
|
|
|
|
**✅ Respuesta encontrada:**
|
|
- **Patrón del algoritmo:** CADA componente debe tener su propio archivo `component-[nombre].js`
|
|
- **Cada archivo debe tener:** Objeto `DEFAULT_CONFIG` con todos los defaults
|
|
- **Ubicación:** `admin/assets/js/component-*.js`
|
|
- **Comprobación en código actual:** `admin-app.js:357` tiene fallback hardcodeado para Top Bar
|
|
|
|
---
|
|
|
|
### PREGUNTA 3: Tipo de Valores ✅ RESPONDIDA
|
|
**¿Qué tipo de valores por defecto se están guardando en JS?**
|
|
|
|
Opciones:
|
|
- [X] Textos (ej: "Accede a más de 200,000...")
|
|
- [X] URLs (ej: "/catalogo")
|
|
- [X] Colores (ej: "#0E2337")
|
|
- [X] Iconos (ej: "bi bi-megaphone-fill")
|
|
- [X] Configuraciones booleanas (ej: enabled: true)
|
|
- [X] **Todos los anteriores** ← CORRECTO
|
|
- [ ] Otro: _______________
|
|
|
|
**✅ Respuesta encontrada:**
|
|
- Según PASO 12 líneas 169-177, el objeto `DEFAULT_CONFIG` debe contener **TODOS** los campos del PASO 6
|
|
- Esto incluye: strings, booleans, URLs, colores (custom_styles), números, selects
|
|
- **Ejemplo real encontrado:** `admin-app.js:357` tiene `'Accede a más de 200,000...'` hardcodeado
|
|
|
|
---
|
|
|
|
### PREGUNTA 4: Propósito de los Valores en JS ✅ RESPONDIDA
|
|
**¿Para qué se usan esos valores hardcodeados en JavaScript?**
|
|
|
|
Opciones:
|
|
- [X] **Fallbacks cuando AJAX no retorna datos** ← USO PRINCIPAL
|
|
- [X] Valores iniciales al renderizar formulario
|
|
- [ ] Placeholders de campos de formulario
|
|
- [ ] Valores de preview/demo
|
|
- [ ] No estoy seguro
|
|
- [X] **Botón "Reset to Defaults"** ← USO SECUNDARIO
|
|
|
|
**✅ Respuesta encontrada:**
|
|
- **Uso 1 (líneas 117-129):** Fallbacks en método `render()` → `config.field || 'default'`
|
|
- **Uso 2 (líneas 196-204):** Botón reset llama `loadConfig(DEFAULT_CONFIG)`
|
|
- **Problema:** ❌ Los fallbacks son INNECESARIOS porque Settings Manager ya hace merge con defaults
|
|
|
|
---
|
|
|
|
### PREGUNTA 5: Comportamiento Esperado ✅ RESPONDIDA
|
|
**¿Cómo DEBERÍAN manejarse los valores por defecto?**
|
|
|
|
Tu visión:
|
|
- [X] Guardar en tabla `wp_apus_theme_components_defaults` (NUEVA tabla, NO la misma)
|
|
- [X] Formato: Normalizado - un INSERT por campo (Opción A)
|
|
- [X] JavaScript NUNCA debe tener defaults hardcodeados
|
|
- [X] JavaScript debe leer defaults vía AJAX desde PHP
|
|
- [X] PHP lee de tabla de defaults, NO tiene `get_defaults()` hardcodeado
|
|
|
|
**✅ Respuesta del usuario:** "opocion A, no debe ser en la msima tabla personalizada wp_apus_theme_components, debe ser en wp_apus_theme_components_defaults"
|
|
|
|
**Arquitectura definida:**
|
|
1. Algoritmo extrae valores hardcodeados → Son los defaults
|
|
2. Se insertan en tabla `wp_apus_theme_components_defaults` (un row por campo)
|
|
3. Settings Manager lee de tabla de defaults
|
|
4. JavaScript NO tiene `DEFAULT_CONFIG`
|
|
5. JavaScript lee vía AJAX desde PHP
|
|
|
|
---
|
|
|
|
### PREGUNTA 6: Comparación con Sistema Actual ✅ RESPONDIDA
|
|
**¿El componente Top Bar (que ya está implementado) tiene este problema?**
|
|
|
|
Verificación necesaria:
|
|
```javascript
|
|
// ¿Existe esto en admin-app.js?
|
|
topBar.message_text || 'Accede a más de 200,000...'
|
|
```
|
|
|
|
- [X] **SÍ - Top Bar tiene defaults hardcodeados en JS** ← CONFIRMADO
|
|
- [ ] NO - Top Bar lee defaults correctamente de PHP
|
|
- [ ] NO ESTOY SEGURO
|
|
|
|
**✅ Respuesta encontrada:**
|
|
```javascript
|
|
// admin-app.js:357
|
|
document.getElementById('topBarMessageText').value = topBar.message_text || 'Accede a más de 200,000...';
|
|
```
|
|
|
|
**Archivos con defaults de Top Bar:**
|
|
1. `admin/includes/sanitizers/class-topbar-sanitizer.php` (línea 37)
|
|
2. `admin/includes/class-settings-manager.php` (línea 84)
|
|
3. `admin/assets/js/admin-app.js` (línea 357)
|
|
4. `admin/pages/main.php` (líneas 243-244, 495)
|
|
5. `admin/components/component-top-bar.php` (línea 190, 2 veces)
|
|
6. `header.php` (línea 34)
|
|
|
|
**Total:** ❌ 7 lugares con el MISMO valor hardcodeado
|
|
|
|
---
|
|
|
|
### PREGUNTA 7: Alcance del Problema ✅ RESPONDIDA
|
|
**¿Cuántos componentes están afectados?**
|
|
|
|
- [X] **Todos los componentes futuros que se modularicen** ← PREOCUPACIÓN PRINCIPAL
|
|
|
|
**✅ Respuesta:**
|
|
- **Actual:** Código existente está MAL implementado - se debe eliminar y rehacer
|
|
- **Futuro:** TODOS los componentes que se procesen con el algoritmo PASO 12/14 tendrán el mismo problema
|
|
- **Crítico:** Si no se corrige el algoritmo PRIMERO, cada nuevo componente duplicará defaults en JS y PHP
|
|
|
|
**Acción requerida:**
|
|
1. ❌ NO usar código actual como referencia (está mal hecho)
|
|
2. ✅ Corregir algoritmo PRIMERO
|
|
3. ✅ Limpiar panel de administración (eliminar rastros de componentes mal implementados)
|
|
4. ✅ Limpiar tema (eliminar código duplicado)
|
|
5. ✅ LUEGO ejecutar algoritmo corregido para cada componente
|
|
|
|
---
|
|
|
|
### PREGUNTA 8: Dónde Debe Estar la Única Fuente de Verdad ✅ RESPONDIDA
|
|
**¿Dónde deben definirse los defaults UNA SOLA VEZ?**
|
|
|
|
Tu preferencia:
|
|
- [X] **Tabla personalizada `wp_apus_theme_components_defaults`** ← ÚNICA FUENTE DE VERDAD
|
|
- [X] Formato normalizado: un row por campo
|
|
- [X] Se pobla mediante algoritmo al procesar cada componente
|
|
- [ ] ❌ NO en `Settings Manager::get_defaults()` (eliminar método hardcodeado)
|
|
- [ ] ❌ NO en JavaScript `DEFAULT_CONFIG` (eliminar objeto hardcodeado)
|
|
|
|
**✅ Respuesta del usuario:** Nueva tabla `wp_apus_theme_components_defaults` con estructura normalizada
|
|
|
|
**Flujo correcto:**
|
|
```
|
|
Algoritmo PASO 2-4
|
|
↓
|
|
Extrae valores hardcodeados del tema
|
|
↓
|
|
INSERT INTO wp_apus_theme_components_defaults
|
|
↓
|
|
Settings Manager lee de tabla
|
|
↓
|
|
JavaScript lee vía AJAX (sin fallbacks)
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 OBJETIVO DE LA SOLUCIÓN
|
|
|
|
Una vez respondidas las preguntas, definiremos:
|
|
|
|
1. **Modificaciones al algoritmo** - Qué pasos cambiar
|
|
2. **Nueva arquitectura de defaults** - Dónde y cómo guardarlos
|
|
3. **Plan de migración** - Cómo corregir código existente
|
|
4. **Validación** - Cómo verificar que la solución funciona
|
|
|
|
---
|
|
|
|
## 📝 CÓMO EL ALGORITMO EXTRAE DEFAULTS (REVISIÓN COMPLETA)
|
|
|
|
### Flujo Documentado en el Algoritmo
|
|
|
|
**PASO 2-4: Extraer valores hardcodeados del tema actual**
|
|
- Usa Serena MCP para analizar archivos PHP/CSS/JS del tema
|
|
- Identifica valores hardcodeados (textos, URLs, colores, iconos)
|
|
- Documenta estos valores en `01-DOCUMENTACION-ANALISIS-CODIGO-REAL.md`
|
|
|
|
**PASO 6: Definir estructura JSON con defaults**
|
|
- Toma los valores extraídos en PASO 2-4
|
|
- Los define como valores por defecto en estructura JSON
|
|
- Colores se extraen del CSS: `background-color: #0E2337` → `custom_styles.background_color: '#0E2337'`
|
|
|
|
**PASO 14 (Líneas 88-123): Implementar defaults en Settings Manager**
|
|
```php
|
|
public function get_defaults() {
|
|
return array(
|
|
'version' => APUS_ADMIN_PANEL_VERSION,
|
|
'components' => array(
|
|
'component_name' => array(
|
|
'enabled' => true,
|
|
'field1' => 'Valor por defecto', // ← Del código hardcodeado actual
|
|
'custom_styles' => array(
|
|
'background_color' => '#0E2337', // ← Del CSS original
|
|
'text_color' => '#ffffff' // ← Del CSS original
|
|
)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
```
|
|
|
|
### ❌ PROBLEMA: Defaults NO se insertan en tabla
|
|
|
|
**Lo que el algoritmo NO tiene:**
|
|
- ❌ Script de inicialización que inserte defaults en `wp_apus_theme_components`
|
|
- ❌ Paso que ejecute INSERT en la tabla al activar tema
|
|
- ❌ Migrador que convierta defaults de PHP a DB
|
|
|
|
**Lo que el algoritmo SÍ tiene:**
|
|
- ✅ Defaults en PHP (Settings Manager)
|
|
- ✅ Settings Manager hace merge: `wp_parse_args($db_data, $defaults)`
|
|
- ✅ Cuando tabla está vacía, usa defaults de PHP como fallback
|
|
|
|
### ✅ ENTENDIMIENTO CORRECTO DEL FLUJO:
|
|
|
|
**El algoritmo se ejecuta MANUALMENTE componente por componente:**
|
|
|
|
1. **Ejecutar algoritmo para "Top Bar":**
|
|
- PASO 2-4: Extrae valores hardcodeados actuales de header.php, CSS, JS
|
|
- Estos valores SON los defaults del Top Bar
|
|
- PASO 14: ❌ Los pone en Settings Manager (PHP hardcodeado)
|
|
- PASO 12: ❌ Los pone en JavaScript (DEFAULT_CONFIG hardcodeado)
|
|
- ✅ DEBERÍA: Insertarlos en tabla `wp_apus_theme_components`
|
|
|
|
2. **Ejecutar algoritmo para "Navbar":**
|
|
- PASO 2-4: Extrae valores hardcodeados actuales del navbar
|
|
- Estos valores SON los defaults del Navbar
|
|
- ✅ DEBERÍA: Insertarlos en tabla `wp_apus_theme_components`
|
|
|
|
3. **Y así con cada componente...**
|
|
|
|
### ❌ LO QUE ESTÁ MAL EN EL ALGORITMO:
|
|
|
|
**PASO 12:** Pone defaults en JavaScript
|
|
**PASO 14:** Pone defaults en PHP Settings Manager
|
|
|
|
**✅ LO QUE DEBERÍA HACER:**
|
|
|
|
Agregar un NUEVO PASO (o modificar PASO 14) que:
|
|
1. Tome los valores extraídos en PASO 2-4
|
|
2. Los inserte en `wp_apus_theme_components` con INSERT INTO
|
|
3. JavaScript NO tiene defaults hardcodeados
|
|
4. PHP lee de tabla, NO tiene `get_defaults()` hardcodeado
|
|
|
|
## 📝 NOTAS ADICIONALES
|
|
|
|
_[Espacio para el usuario agregar información adicional]_
|
|
|
|
---
|
|
|
|
---
|
|
|
|
## 📊 RESUMEN EJECUTIVO DE HALLAZGOS
|
|
|
|
### ✅ Preguntas Respondidas (8 de 8) - INVESTIGACIÓN COMPLETA
|
|
|
|
| # | Pregunta | Respuesta |
|
|
|---|----------|-----------|
|
|
| 1 | ¿Dónde está el problema? | **PASO 12 y PASO 14** del algoritmo |
|
|
| 2 | ¿Qué archivos JS afectados? | `component-*.js` (uno por componente) |
|
|
| 3 | ¿Qué tipo de valores? | **TODOS** (strings, booleans, URLs, colores, etc.) |
|
|
| 4 | ¿Para qué se usan? | Fallbacks + Botón Reset |
|
|
| 5 | ¿Cómo DEBERÍAN manejarse? | Tabla `wp_apus_theme_components_defaults` normalizada |
|
|
| 6 | ¿Top Bar tiene el problema? | **SÍ** - 7 lugares con mismo default |
|
|
| 7 | ¿Cuántos componentes afectados? | Top Bar actual + TODOS los futuros |
|
|
| 8 | ¿Única fuente de verdad? | Nueva tabla `wp_apus_theme_components_defaults` |
|
|
|
|
### 🎯 Decisión Arquitectónica Final
|
|
|
|
**ÚNICA FUENTE DE VERDAD:**
|
|
- Tabla: `wp_apus_theme_components_defaults` (nueva)
|
|
- Formato: Normalizado (un row por campo)
|
|
- Poblamiento: Vía algoritmo al procesar cada componente
|
|
- ❌ Eliminar: `DEFAULT_CONFIG` en JavaScript
|
|
- ❌ Modificar: `get_defaults()` en PHP para leer de DB
|
|
|
|
---
|
|
|
|
## 🗄️ ESTRUCTURA DE NUEVA TABLA DE DEFAULTS
|
|
|
|
### Tabla: `wp_apus_theme_components_defaults`
|
|
|
|
**Propósito:** Almacenar valores por defecto extraídos del tema mediante el algoritmo de modularización
|
|
|
|
**Características:**
|
|
- ✅ Estructura normalizada (un row por campo)
|
|
- ✅ Misma estructura que `wp_apus_theme_components` para consistencia
|
|
- ✅ Se pobla automáticamente al ejecutar algoritmo para cada componente
|
|
- ✅ Single source of truth para todos los defaults del sistema
|
|
|
|
### SQL Schema
|
|
|
|
```sql
|
|
CREATE TABLE IF NOT EXISTS wp_apus_theme_components_defaults (
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
|
component_name VARCHAR(50) NOT NULL COMMENT 'Nombre del componente (top_bar, navbar, hero, etc.)',
|
|
config_key VARCHAR(100) NOT NULL COMMENT 'Clave de configuración (message_text, bg_color, etc.)',
|
|
config_value TEXT NOT NULL COMMENT 'Valor por defecto extraído del tema',
|
|
data_type ENUM('string','integer','boolean','array','json') NOT NULL COMMENT 'Tipo de dato del valor',
|
|
version VARCHAR(20) DEFAULT NULL COMMENT 'Versión del tema cuando se insertó el default',
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 'Fecha de creación del registro',
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Última actualización',
|
|
|
|
UNIQUE KEY unique_default_config (component_name, config_key),
|
|
INDEX idx_component_name (component_name),
|
|
INDEX idx_config_key (config_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Valores por defecto de componentes del tema';
|
|
```
|
|
|
|
### Estructura Genérica de Datos
|
|
|
|
```sql
|
|
-- Estructura GENÉRICA para insertar defaults de CUALQUIER componente
|
|
-- Se puebla al ejecutar algoritmo para cada componente
|
|
|
|
INSERT INTO wp_apus_theme_components_defaults
|
|
(component_name, config_key, config_value, data_type, version)
|
|
VALUES
|
|
-- Campos booleanos
|
|
('[component_name]', 'enabled', '[1|0]', 'boolean', '[version]'),
|
|
('[component_name]', '[boolean_field]', '[1|0]', 'boolean', '[version]'),
|
|
|
|
-- Campos de texto (extraídos del código hardcodeado)
|
|
('[component_name]', '[text_field]', '[valor_extraído_del_código]', 'string', '[version]'),
|
|
|
|
-- Campos numéricos
|
|
('[component_name]', '[number_field]', '[valor_numérico]', 'integer', '[version]'),
|
|
|
|
-- Custom styles (extraídos del CSS del componente)
|
|
('[component_name]', 'custom_styles.[propiedad_css]', '[valor_del_css]', 'string', '[version]');
|
|
```
|
|
|
|
**Notas:**
|
|
- `[component_name]`: Nombre del componente (ej: 'navbar', 'hero', 'footer')
|
|
- `[config_key]`: Clave del campo según PASO 6 del algoritmo
|
|
- `[config_value]`: Valor extraído del código/CSS actual del tema
|
|
- `[data_type]`: Tipo según el campo (string, integer, boolean, array, json)
|
|
- `[version]`: Versión del tema al momento de extraer defaults
|
|
|
|
### Propósito de Cada Tabla
|
|
|
|
**`wp_apus_theme_components`** (configuraciones personalizadas)
|
|
- Se guardan cuando el usuario modifica valores en el Admin Panel
|
|
- Si existe config personalizada, se usa esta
|
|
|
|
**`wp_apus_theme_components_defaults`** (valores por defecto)
|
|
- Se pueblan al ejecutar el algoritmo para cada componente
|
|
- Se usan SOLO cuando NO existe config personalizada
|
|
- Son los valores extraídos del tema actual (hardcodeados)
|
|
|
|
**Ambas tablas tienen la MISMA estructura** - la diferencia es solo su propósito.
|
|
|
|
---
|
|
|
|
## 🔄 FLUJO DE LECTURA DE DATOS
|
|
|
|
### ¿Por qué se necesitan Settings Manager (PHP) Y JavaScript?
|
|
|
|
**NO están duplicados - tienen propósitos diferentes:**
|
|
|
|
#### Settings Manager (PHP)
|
|
**Propósito:** Para que archivos PHP del tema lean configuraciones
|
|
|
|
**Uso:**
|
|
```php
|
|
// En header.php, footer.php, etc.
|
|
$settings_manager = new APUS_Settings_Manager();
|
|
$navbar_config = $settings_manager->get_component_config('navbar');
|
|
|
|
// Usar $navbar_config en el HTML del tema
|
|
echo $navbar_config['logo_url'];
|
|
```
|
|
|
|
**Lee de:**
|
|
1. Tabla `wp_apus_theme_components` (config personalizada) - PRIORIDAD ALTA
|
|
2. Si no existe → Tabla `wp_apus_theme_components_defaults` (defaults)
|
|
|
|
#### JavaScript + AJAX
|
|
**Propósito:** Para que el Admin Panel (interfaz de administración) lea/guarde configuraciones
|
|
|
|
**Uso:**
|
|
```javascript
|
|
// En admin-app.js
|
|
// Leer configuración vía AJAX
|
|
axios.get(ajaxUrl + '?action=get_component_config&component=navbar')
|
|
.then(response => {
|
|
// Renderizar formulario con los datos
|
|
renderForm(response.data);
|
|
});
|
|
|
|
// Guardar configuración vía AJAX
|
|
axios.post(ajaxUrl, formData)
|
|
.then(response => {
|
|
// Mostrar mensaje de éxito
|
|
});
|
|
```
|
|
|
|
**Lee/Escribe vía AJAX a:**
|
|
- Endpoint PHP que usa Settings Manager
|
|
- Guarda en tabla `wp_apus_theme_components`
|
|
|
|
### Flujo Completo
|
|
|
|
```
|
|
FRONTEND (tema):
|
|
header.php → Settings Manager (PHP) → Lee de DB → Muestra en tema
|
|
|
|
ADMIN PANEL:
|
|
JavaScript → AJAX → Endpoint PHP → Settings Manager → Lee/Escribe DB → Respuesta JSON
|
|
```
|
|
|
|
**Conclusión:** Se necesitan AMBOS porque sirven a partes diferentes del sistema (frontend vs admin).
|
|
|
|
---
|
|
|
|
## 🎯 PRÓXIMOS PASOS
|
|
|
|
### ✅ INVESTIGACIÓN COMPLETA - 8/8 preguntas respondidas
|
|
|
|
**ORDEN CORRECTO DE IMPLEMENTACIÓN:**
|
|
|
|
### FASE 1: LIMPIAR CÓDIGO ACTUAL (PRIMERO)
|
|
|
|
**El código actual está MAL implementado y debe eliminarse ANTES de corregir el algoritmo**
|
|
|
|
#### 1.1. Limpiar Panel de Administración
|
|
**Eliminar completamente cualquier rastro de componentes mal implementados:**
|
|
- Eliminar archivos JS de componentes: `admin/assets/js/component-*.js`
|
|
- Eliminar archivos CSS de componentes: `admin/assets/css/component-*.css`
|
|
- Eliminar archivos PHP de componentes: `admin/components/component-*.php`
|
|
- Eliminar sanitizers de componentes: `admin/includes/sanitizers/class-*-sanitizer.php`
|
|
- Limpiar `admin/pages/main.php` de secciones de componentes
|
|
- Limpiar `admin/includes/class-admin-menu.php` de encolamiento de componentes
|
|
|
|
#### 1.2. Limpiar Tema
|
|
**Eliminar valores hardcodeados duplicados:**
|
|
- Revisar `header.php` y eliminar valores duplicados
|
|
- Revisar otros archivos del tema con valores hardcodeados
|
|
- Dejar SOLO el código original del tema (antes de modularización)
|
|
|
|
#### 1.3. Limpiar Base de Datos
|
|
**Eliminar datos de componentes mal implementados:**
|
|
- Vaciar tabla `wp_apus_theme_components` o eliminar componentes específicos
|
|
- Preparar para empezar desde cero
|
|
|
|
---
|
|
|
|
### FASE 2: CREAR TABLA DE DEFAULTS
|
|
|
|
#### 2.1. Crear Tabla `wp_apus_theme_components_defaults`
|
|
- Ejecutar SQL CREATE TABLE (ver estructura arriba)
|
|
- Verificar que tabla existe y tiene estructura correcta
|
|
|
|
---
|
|
|
|
### FASE 3: CORREGIR ALGORITMO (DESPUÉS DE LIMPIAR)
|
|
|
|
#### 3.1. PASO 12: Implementar Admin JS (CORREGIR)
|
|
**Archivo:** `00-algoritmo/12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md`
|
|
|
|
**Cambios:**
|
|
- ❌ **ELIMINAR:** Objeto `DEFAULT_CONFIG` (líneas 43-51, 169-177)
|
|
- ❌ **ELIMINAR:** Fallbacks en método `render()` (líneas 117-129)
|
|
- ✅ **MODIFICAR:** Botón reset debe llamar endpoint AJAX para leer defaults de DB
|
|
- ✅ JavaScript NUNCA tiene valores hardcodeados
|
|
|
|
#### 3.2. PASO 14: Settings Manager (CORREGIR)
|
|
**Archivo:** `00-algoritmo/14-F04-CIERRE-GIT-COMMITS.md`
|
|
|
|
**Cambios:**
|
|
- ❌ **ELIMINAR:** Método `get_defaults()` con array hardcodeado (líneas 88-123)
|
|
- ✅ **MODIFICAR:** DB Manager para leer de tabla `_defaults`
|
|
|
|
#### 3.3. NUEVO PASO: Poblar Tabla de Defaults
|
|
**Ubicación:** Después de PASO 7
|
|
|
|
**Contenido:**
|
|
1. Leer valores extraídos en PASO 6 (estructura JSON)
|
|
2. Generar script SQL con INSERTs para tabla `wp_apus_theme_components_defaults`
|
|
3. Ejecutar script SQL
|
|
4. Verificar que defaults están en DB
|
|
|
|
---
|
|
|
|
### FASE 4: USAR ALGORITMO CORREGIDO PARA DOCUMENTAR COMPONENTES
|
|
|
|
**El algoritmo NO implementa código - solo DOCUMENTA**
|
|
|
|
Una vez el algoritmo esté corregido:
|
|
|
|
#### 4.1. Ejecutar Algoritmo Completo (16 pasos) para UN Componente
|
|
**Ejemplo:** Navbar
|
|
|
|
**Pasos 1-13: DOCUMENTACIÓN (genera 7 archivos MD)**
|
|
- PASO 1: Crear issue en GitHub
|
|
- PASO 2-4: Analizar código actual del Navbar (Serena MCP)
|
|
- PASO 5-8: Diseñar campos configurables y estructura JSON
|
|
- PASO 9-13: Documentar cómo implementar (plantillas, ejemplos, HTML, JS, CSS)
|
|
|
|
**OUTPUT:** Carpeta `navbar/` con 7 archivos MD de documentación
|
|
|
|
#### 4.2. PASO 14: Implementar Código Real
|
|
**AQUÍ es cuando se modifica código PHP/JS/CSS del tema/admin**
|
|
|
|
⚠️ **NOTA IMPORTANTE:** El PASO 14 actual del algoritmo tiene el problema que identificamos:
|
|
- Instruye crear método `get_defaults()` con array hardcodeado en Settings Manager (líneas 88-123)
|
|
- Esto es lo que necesitamos CORREGIR en FASE 3
|
|
|
|
**Con el algoritmo CORREGIDO**, el PASO 14 debe hacer:
|
|
|
|
Usando la documentación generada en pasos 1-13:
|
|
1. Modificar PHP del tema (ej: `header.php`) según `04-IMPLEMENTACION-COMPONENTE-NAVBAR.md`
|
|
2. Agregar HTML admin en `admin/pages/main.php` según `05-IMPLEMENTACION-ADMIN-HTML-NAVBAR.md`
|
|
3. Agregar JavaScript en `admin/assets/js/admin-app.js` según `07-IMPLEMENTACION-JS-ESPECIFICO.md`
|
|
4. **MODIFICAR DB Manager:** Agregar método para insertar/leer defaults de tabla `wp_apus_theme_components_defaults`
|
|
5. **MODIFICAR Settings Manager:** Leer de tabla defaults (NO array hardcodeado)
|
|
6. **INSERTAR defaults en DB:** Ejecutar script SQL con valores extraídos en PASO 4
|
|
7. Commits por cada archivo modificado
|
|
|
|
#### 4.3. PASO 15-16: Testing y Cierre
|
|
- Testing post-implementación
|
|
- Cerrar issue en GitHub
|
|
|
|
#### 4.4. Repetir para Cada Componente
|
|
Una vez completado Navbar (pasos 1-16):
|
|
1. Ejecutar algoritmo para siguiente componente (ej: Hero)
|
|
2. Generar documentación (pasos 1-13)
|
|
3. Implementar código real (paso 14)
|
|
4. Testing y cierre (pasos 15-16)
|
|
|
|
**Componentes del tema a procesar:**
|
|
- Navbar
|
|
- Hero Section
|
|
- Footer
|
|
- etc.
|
|
|
|
---
|
|
|
|
**Última actualización:** 2025-01-13 - INVESTIGACIÓN COMPLETA - 8/8 preguntas respondidas
|
|
**Estado:** 🟢 LISTO PARA IMPLEMENTACIÓN
|