8.9 KiB
📋 Pendientes y Mejoras - GKACHELE™
© 2025 GKACHELE™. Todos los derechos reservados.
Hash: gkachele-pendientes-20250115-004
Fecha: 2025-01-15
⚠️ VER: PROBLEMAS_CRITICOS_CUSTOMIZER.md - REHACER COMPLETAMENTE EL CUSTOMIZER
✅ FUNCIONALIDADES COMPLETADAS
- ✅ Sistema de bloques añadibles COMPLETO (video, imagen, texto, redes sociales, mapa)
- ✅ Función
addNewBlock()implementada - ✅ Función
removeBlock()implementada - ✅ Función
loadBlocksList()implementada - ✅ Lista de bloques en sidebar funcional
- ✅ Integración completa con backend
- ✅ Notificaciones de éxito/error
- ✅ Función
- ✅ Iconos SVG para redes sociales
- ✅ Click to edit en preview
- ✅ Gestión de platos del menú (añadir/eliminar)
- ✅ Actualización en tiempo real del preview
- ✅ Drag & drop básico para bloques
🔧 MEJORAS PENDIENTES
1. 🗺️ Mapa Automático desde Dirección
Estado: Pendiente
Requisito:
- El mapa debe generarse automáticamente usando la dirección del campo "Dirección"
- No debe requerir URL manual
- Usar Google Maps Embed API sin API key (o geocoding simple)
Implementación:
// Cuando cambie la dirección, generar automáticamente el mapa
function generateMapFromAddress(address) {
// Convertir dirección a URL de Google Maps embed
const encodedAddress = encodeURIComponent(address);
const mapUrl = `https://www.google.com/maps/embed/v1/place?key=AIzaSy...&q=${encodedAddress}`;
// O usar iframe con búsqueda directa
const mapUrl = `https://www.google.com/maps?q=${encodedAddress}&output=embed`;
return mapUrl;
}
Archivos a modificar:
demo/templates/customizer.html- Auto-generar mapa_url cuando cambie direccióndemo/themes/restaurante-moderno/template.html- Usar dirección si no hay mapa_url
2. 📁 Upload de Archivos (Drag & Drop)
Estado: Pendiente
Requisito:
- Arrastrar y soltar archivos en campos de Media
- O abrir navegador de archivos
- No usar URLs manuales
- Subir a servidor y guardar ruta
Implementación:
<!-- En customizer.html -->
<div class="media-upload-area" ondrop="handleFileDrop(event)" ondragover="allowDrop(event)">
<input type="file" id="media_upload" style="display: none;" onchange="handleFileSelect(event)">
<button onclick="document.getElementById('media_upload').click()">📁 Seleccionar archivo</button>
<p>O arrastra y suelta aquí</p>
</div>
# En app.py
@app.route('/api/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': 'No file'}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'error': 'No file selected'}), 400
filename = secure_filename(file.filename)
filepath = os.path.join(UPLOAD_FOLDER, filename)
file.save(filepath)
return jsonify({'url': f'/uploads/{filename}'})
Archivos a modificar:
demo/templates/customizer.html- Añadir drag & drop a campos Mediademo/app.py- Endpoint de uploaddemo/static/- Carpeta para uploads
3. ✏️ Editar Contenido de Bloques Existentes
Estado: Pendiente
Problema:
- Los bloques se pueden añadir y eliminar, pero no editar su contenido
- No hay forma de modificar el contenido de un bloque después de crearlo
Solución:
// En template.html - función debe estar disponible globalmente
function removeBlockFromPreview(blockId) {
if (window.parent !== window) {
window.parent.postMessage({
type: 'remove-block',
block_id: blockId
}, '*');
} else {
// Si no está en iframe, llamar directamente
removeBlock(blockId);
}
}
// En customizer.html - escuchar mensaje
window.addEventListener('message', function(e) {
if (e.data && e.data.type === 'remove-block') {
removeBlock(e.data.block_id);
}
});
Archivos a modificar:
demo/templates/customizer.html- Añadir funcióneditBlock(blockId)que abra modal según tipodemo/templates/customizer.html- Hacer bloques clickeables en la lista para editardemo/app.py- Endpoint/api/customizer/update-blockpara actualizar contenido
4. 🧩 Eliminar Zonas/Secciones (Como WordPress)
Estado: Pendiente
Requisito:
- Poder eliminar secciones completas (Hero, Menú, Horarios, Contacto, etc.)
- Como WordPress: cada sección puede ocultarse/eliminarse
- Guardar estado en content_json
Implementación:
{
"sections": {
"hero": {"visible": true, "enabled": true},
"menu": {"visible": true, "enabled": true},
"horarios": {"visible": false, "enabled": false},
"contacto": {"visible": true, "enabled": true}
}
}
<!-- En template.html -->
{% if sections.hero.enabled %}
<section id="hero" class="section hero">
<!-- Contenido -->
<button class="section-delete" onclick="toggleSection('hero')">🗑️ Ocultar sección</button>
</section>
{% endif %}
Archivos a modificar:
demo/templates/customizer.html- Añadir controles para seccionesdemo/themes/restaurante-moderno/template.html- Renderizar condicionalmentedemo/app.py- Endpoint para toggle de secciones
5. ✏️ Edición de Contenido de Bloques
Estado: Pendiente
Requisito:
- Cada bloque añadido debe ser editable
- Click en bloque → editar contenido
- Modal o inline editor según tipo
Implementación:
function editBlock(blockId) {
const block = blocks.find(b => b.id === blockId);
if (!block) return;
// Abrir modal según tipo
if (block.type === 'texto') {
openTextEditor(block);
} else if (block.type === 'video') {
openVideoEditor(block);
} else if (block.type === 'redes_sociales') {
openSocialEditor(block);
}
}
Archivos a modificar:
demo/templates/customizer.html- Añadir función editBlockdemo/themes/restaurante-moderno/template.html- Hacer bloques clickeables
6. 🔄 Guardado Automático de Orden (Drag & Drop)
Estado: Pendiente
Requisito:
- Al arrastrar y soltar bloques, guardar orden automáticamente
- No esperar a añadir/eliminar
Implementación:
function handleDrop(e) {
e.preventDefault();
// Reordenar bloques
const newOrder = Array.from(document.querySelectorAll('.gk-block'))
.map(block => block.dataset.blockId);
// Guardar orden inmediatamente
fetch('/api/customizer/reorder-blocks', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
site_id: siteId,
block_ids: newOrder
})
});
}
Archivos a modificar:
demo/themes/restaurante-moderno/template.html- Mejorar drag & dropdemo/templates/customizer.html- Guardar orden automáticamente
🚨 PROBLEMAS CRÍTICOS (REHACER COMPLETAMENTE)
Ver documento completo: PROBLEMAS_CRITICOS_CUSTOMIZER.md
Problemas Identificados:
- ❌ Diseño horrible - No se parece a WordPress
- ❌ Colores horribles - No usa paleta WordPress
- ❌ Guardado inconsistente - Algunas cosas guardan, otras no
- ❌ No hay botón Cancelar - Hay que refrescar o salir
- ❌ Mapa no funciona
- ❌ No hay WhatsApp flotante
- ❌ No hay scroll suave
- ❌ No hay iconos a elegir (solo emojis)
Solución: REHACER COMPLETAMENTE copiando EXACTAMENTE WordPress Customizer
📝 CHECKLIST DE IMPLEMENTACIÓN
Prioridad CRÍTICA (REHACER TODO)
- Rehacer diseño visual - Copiar EXACTAMENTE WordPress
- Rehacer sistema de guardado - Botón "Guardar y Publicar" + "Descartar"
- Arreglar mapa - Generar automáticamente desde dirección
- Añadir WhatsApp flotante - Configurable desde sidebar
- Añadir selector de iconos - Dashicons o Font Awesome
- Añadir scroll suave - Mejorar navegación
Prioridad Alta
- Editar contenido de bloques existentes
- Upload de archivos (drag & drop)
Prioridad Media
- Eliminar/ocultar secciones
- Edición de contenido de bloques
- Guardado automático de orden
Prioridad Baja
- Mejoras de UI/UX
- Validaciones adicionales
- Optimizaciones de rendimiento
🔗 REFERENCIAS
- WordPress: Sistema de secciones ocultables
- Elementor: Drag & drop de bloques
- Google Maps: Embed sin API key (búsqueda directa)
📌 NOTAS
- El menú de platos ya funciona correctamente (añadir/eliminar) ✅
- Los iconos de redes sociales ya están implementados ✅
- El sistema de bloques está COMPLETAMENTE funcional (añadir/eliminar/listar) ✅
- Hash de implementación:
gkachele-bloques-funcionales-20250115-001
Última actualización: 2025-01-15
Hash: gkachele-pendientes-20250115-004
Próxima sesión: REHACER COMPLETAMENTE EL CUSTOMIZER - Ver PROBLEMAS_CRITICOS_CUSTOMIZER.md