docs: agregar plan de preparación del tema para BD

- Plan de 6 fases para preparar tema antes de modificar algoritmo
- FASE 1: Análisis de arquitectura actual
- FASE 2: Corregir ubicación del menú admin (nuevo paso agregado)
  * Cambiar add_theme_page() a add_menu_page()
  * Mover 'Apus Theme Options' a menú propio en sidebar
- FASE 3: Crear Defaults Manager
- FASE 4: Decisión sobre personalizaciones
- FASE 5: Testing y validación
- FASE 6: Documentación

Plan ejecutable paso a paso antes de tocar algoritmo.
This commit is contained in:
FrankZamora
2025-11-13 22:36:34 -06:00
parent 1c6b184e94
commit 883853bc5c

View File

@@ -0,0 +1,412 @@
# PLAN: Preparación del Tema para Arquitectura con Base de Datos
**Fecha:** 2025-01-14
**Objetivo:** Preparar el tema Apus para trabajar con la nueva arquitectura de defaults en base de datos
---
## 🎯 CONTEXTO
### Arquitectura actual (PROBLEMÁTICA):
```
┌─────────────────────────────────────────┐
│ Settings Manager │
│ ├─ get_defaults() → VACÍO ❌ │
│ ├─ get_settings() → wp_options ✅ │
│ └─ save_settings() → wp_options ✅ │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ DB Manager │
│ ├─ Tabla: wp_apus_theme_components │
│ ├─ get_config() ✅ │
│ └─ save_config() ✅ │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Tabla: wp_apus_theme_components_defaults│
│ ├─ Creada ✅ │
│ ├─ Sin clase para leer ❌ │
│ └─ Vacía (sin datos) ❌ │
└─────────────────────────────────────────┘
```
### Arquitectura deseada (OBJETIVO):
```
┌──────────────────────────────────────────────────────────┐
│ DEFAULTS MANAGER (NUEVO) │
│ ├─ Tabla: wp_apus_theme_components_defaults │
│ ├─ get_defaults($component_name) → leer tabla ✅ │
│ └─ Operación: SOLO LECTURA (escritura desde algoritmo) │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ SETTINGS MANAGER (MODIFICADO) │
│ ├─ get_defaults() → usa Defaults Manager ✅ │
│ ├─ get_settings() → merge defaults + personalizaciones │
│ └─ save_settings() → guarda SOLO personalizaciones │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ PERSONALIZACIÓN: ¿Dónde guardar? │
│ Opción A: wp_options (actual) ✅ SIMPLE │
│ Opción B: wp_apus_theme_components ❓ COMPLEJO │
└──────────────────────────────────────────────────────────┘
```
---
## 📋 FASE 1: ANÁLISIS DE ARQUITECTURA ACTUAL
### PASO 1.1: Verificar qué contiene cada tabla
**Duración:** 5 min
**Ejecutar queries:**
```sql
-- Verificar tabla de defaults (debe estar vacía)
SELECT COUNT(*) FROM wp_apus_theme_components_defaults;
SELECT * FROM wp_apus_theme_components_defaults LIMIT 5;
-- Verificar tabla de componentes
SELECT COUNT(*) FROM wp_apus_theme_components;
SELECT component_name, COUNT(*) as configs
FROM wp_apus_theme_components
GROUP BY component_name;
-- Verificar wp_options
SELECT option_value FROM wp_options WHERE option_name = 'apus_theme_settings';
```
**Documentar:**
- ¿Hay datos en `wp_apus_theme_components`?
- ¿Hay datos en `wp_options` (apus_theme_settings)?
- ¿Cuál se está usando actualmente?
---
### PASO 1.2: Analizar flujo actual de datos
**Duración:** 10 min
**Revisar archivos:**
- [ ] `class-settings-manager.php` - ¿De dónde lee? ¿Dónde guarda?
- [ ] `class-db-manager.php` - ¿Qué tabla maneja?
- [ ] Admin Panel JS - ¿Qué endpoints AJAX llama?
- [ ] Frontend (header.php, etc.) - ¿De dónde obtiene datos para renderizar?
**Documentar:**
```
Flujo actual:
1. Usuario abre Admin Panel → AJAX: apus_get_settings → ???
2. Usuario guarda cambios → AJAX: apus_save_settings → ???
3. Frontend renderiza componente → Función: ??? → Datos de: ???
```
---
### PASO 1.3: Identificar conflictos
**Duración:** 5 min
**Preguntas a responder:**
- ¿Por qué existen 2 tablas (`wp_apus_theme_components` y `wp_apus_theme_components_defaults`)?
- ¿Cuál es el propósito de cada una?
- ¿Se están usando ambas o solo una?
- ¿Hay duplicación de datos?
**Decisión arquitectónica:**
```
OPCIÓN A (RECOMENDADA):
├─ wp_apus_theme_components_defaults → DEFAULTS (solo lectura tema)
├─ wp_options (apus_theme_settings) → PERSONALIZACIONES (lectura/escritura)
└─ ELIMINAR: wp_apus_theme_components (no usar)
OPCIÓN B:
├─ wp_apus_theme_components_defaults → DEFAULTS (solo lectura tema)
├─ wp_apus_theme_components → PERSONALIZACIONES (lectura/escritura)
└─ ELIMINAR: wp_options (apus_theme_settings) (no usar)
```
---
## 📋 FASE 2: CORREGIR UBICACIÓN DEL MENÚ ADMIN
### PASO 2.0: Mover menú a nivel superior del sidebar
**Duración:** 10 min
**PROBLEMA ACTUAL:**
- ❌ "APUs Theme Settings" está bajo menú "Apariencia"
- ❌ Se usa `add_theme_page()` en `class-admin-menu.php`
**SOLUCIÓN:**
- ✅ Crear menú propio en sidebar izquierdo (nivel superior)
- ✅ Cambiar a `add_menu_page()` en `class-admin-menu.php`
**Modificar:** `admin/includes/class-admin-menu.php`
**ANTES (línea 28-36):**
```php
public function add_menu_page() {
add_theme_page(
'APUs Theme Settings', // Page title
'Tema APUs', // Menu title
'manage_options', // Capability
'apus-theme-settings', // Menu slug
array($this, 'render_admin_page'), // Callback
59 // Position
);
}
```
**DESPUÉS:**
```php
public function add_menu_page() {
add_menu_page(
'Apus Theme Options', // Page title
'Apus Theme', // Menu title
'manage_options', // Capability
'apus-theme-settings', // Menu slug
array($this, 'render_admin_page'), // Callback
'dashicons-admin-generic', // Icon (WordPress Dashicon)
59 // Position (después de Settings)
);
}
```
**Verificar:**
- [ ] Menú aparece en sidebar izquierdo
- [ ] Ícono es visible
- [ ] Título es "Apus Theme"
- [ ] Al hacer click abre el panel de configuración
**Nota:** También renombrar el método de `add_menu_page()` a algo más descriptivo si es necesario, ya que ahora usa la función `add_menu_page()` de WordPress.
---
## 📋 FASE 3: CREAR DEFAULTS MANAGER
### PASO 3.1: Crear clase Defaults Manager
**Duración:** 20 min
**Archivo:** `admin/includes/class-defaults-manager.php`
**Métodos necesarios:**
```php
class APUS_Defaults_Manager {
// Leer todos los defaults de un componente
public function get_component_defaults($component_name);
// Leer un default específico
public function get_default($component_name, $config_key);
// Listar componentes con defaults
public function list_components();
// Verificar si existen defaults para componente
public function has_defaults($component_name);
}
```
**Responsabilidades:**
- ✅ LEER de `wp_apus_theme_components_defaults`
- ❌ NO ESCRIBIR (escritura solo desde algoritmo)
- ✅ Parsear tipos de datos (boolean, integer, json, array)
- ✅ Cachear resultados (opcional, para performance)
---
### PASO 3.2: Integrar Defaults Manager en init.php
**Duración:** 5 min
**Modificar:** `admin/init.php`
```php
// Cargar Defaults Manager
require_once APUS_ADMIN_PANEL_PATH . 'includes/class-defaults-manager.php';
// Inicializar
$defaults_manager = new APUS_Defaults_Manager();
```
---
### PASO 3.3: Modificar Settings Manager para usar Defaults Manager
**Duración:** 15 min
**Modificar:** `admin/includes/class-settings-manager.php`
**Antes:**
```php
public function get_defaults() {
return array(
'version' => APUS_ADMIN_PANEL_VERSION,
'components' => array()
);
}
```
**Después:**
```php
public function get_defaults() {
$defaults_manager = new APUS_Defaults_Manager();
$components = $defaults_manager->list_components();
$defaults = array(
'version' => APUS_ADMIN_PANEL_VERSION,
'components' => array()
);
foreach ($components as $component_name) {
$defaults['components'][$component_name] =
$defaults_manager->get_component_defaults($component_name);
}
return $defaults;
}
```
---
## 📋 FASE 4: DECISIÓN SOBRE PERSONALIZACIONES
### PASO 4.1: Evaluar opciones
**Duración:** 10 min
**Opción A: Usar wp_options (RECOMENDADA)**
- ✅ Más simple
- ✅ Ya implementado
- ✅ Funciona con Settings Manager actual
- ❌ Menos estructurado
**Opción B: Usar wp_apus_theme_components**
- ✅ Más estructurado
- ✅ Usa DB Manager
- ❌ Requiere más cambios
- ❌ Más complejo
**Decisión:** [A COMPLETAR POR USUARIO]
---
### PASO 4.2: Implementar según decisión
**Duración:** Variable
**Si Opción A (wp_options):**
- [ ] Mantener Settings Manager como está
- [ ] Solo agregar get_defaults() con Defaults Manager
- [ ] save_settings() sigue guardando en wp_options
**Si Opción B (wp_apus_theme_components):**
- [ ] Modificar Settings Manager para usar DB Manager
- [ ] Cambiar save_settings() para guardar en tabla
- [ ] Cambiar get_settings() para leer de tabla
- [ ] Eliminar uso de wp_options
---
## 📋 FASE 5: TESTING Y VALIDACIÓN
### PASO 5.1: Poblar tabla de defaults con datos de prueba
**Duración:** 10 min
**Insertar defaults de Top Bar:**
```sql
INSERT INTO wp_apus_theme_components_defaults
(component_name, config_key, config_value, data_type, version)
VALUES
('top_bar', 'enabled', '1', 'boolean', '2.0.0'),
('top_bar', 'message_text', 'Accede a más de 200,000...', 'string', '2.0.0'),
-- ... más configs
```
---
### PASO 5.2: Probar lectura de defaults
**Duración:** 10 min
**Crear script de prueba:** `admin/test-defaults.php`
```php
<?php
require_once 'wp-load.php';
$defaults_manager = new APUS_Defaults_Manager();
$settings_manager = new APUS_Settings_Manager();
// Test 1: Leer defaults de Top Bar
$top_bar_defaults = $defaults_manager->get_component_defaults('top_bar');
echo "Top Bar Defaults:\n";
print_r($top_bar_defaults);
// Test 2: Obtener settings completos (defaults + personalizaciones)
$all_settings = $settings_manager->get_settings();
echo "\nAll Settings:\n";
print_r($all_settings);
```
---
### PASO 5.3: Probar guardar personalizaciones
**Duración:** 10 min
**Test manual:**
1. Abrir Admin Panel
2. Modificar configuración de componente
3. Guardar cambios
4. Verificar que se guardó en lugar correcto (wp_options o tabla)
5. Recargar Admin Panel
6. Verificar que muestra personalización + defaults
---
### PASO 5.4: Probar renderizado en frontend
**Duración:** 10 min
**Verificar:**
1. Frontend muestra defaults cuando no hay personalizaciones
2. Frontend muestra personalizaciones cuando las hay
3. Personalización sobrescribe default (merge correcto)
---
## 📋 FASE 6: DOCUMENTACIÓN
### PASO 6.1: Documentar arquitectura final
**Duración:** 15 min
**Crear:** `admin/ARQUITECTURA-DATOS.md`
**Contenido:**
- Diagrama de flujo de datos
- Explicación de cada tabla
- Explicación de cada clase
- Cómo se combinan defaults + personalizaciones
- Ejemplos de uso
---
## ✅ CHECKLIST FINAL
Antes de modificar el algoritmo, verificar:
- [ ] Existe `class-defaults-manager.php`
- [ ] Defaults Manager puede leer de `wp_apus_theme_components_defaults`
- [ ] Settings Manager usa Defaults Manager en `get_defaults()`
- [ ] Se decidió dónde guardar personalizaciones (wp_options vs tabla)
- [ ] Tabla de defaults tiene datos de prueba
- [ ] Tests de lectura funcionan
- [ ] Tests de guardar funcionan
- [ ] Frontend renderiza correctamente
- [ ] Arquitectura está documentada
---
## 🚀 SIGUIENTE PASO
Una vez completado este plan:
- ✅ TEMA LISTO para procesar datos de BD
- ✅ Puede leer defaults
- ✅ Puede combinar con personalizaciones
- ✅ Puede guardar personalizaciones
- ✅ Puede renderizar en frontend
**ENTONCES:**
→ Proceder a modificar el algoritmo `/implementar-componente-admin`