Se ha implementado una mejora importante en el manejo de DataTables con procesamiento server-side para el módulo de Bitácora en el proyecto jcposUltimate, resolviendo problemas de ordenamiento, paginación y búsqueda que impedían un funcionamiento correcto con MariaDB / MySQL.
🔗 Commit
https://github.com/julio101290/jcposUltimate/commit/7400ede1b2a826d7e9918c7475623ca0b2d5dc48
📂 Archivos modificados
❌ Problema detectado
El DataTable de la bitácora presentaba varios inconvenientes:
- El ordenamiento por columnas no funcionaba, aunque visualmente aparecían las flechas.
- El
ORDER BYno se aplicaba dinámicamente desde los parámetros enviados por DataTables. - El mapeo de columnas para el ordenamiento era incorrecto.
- La paginación y la búsqueda global no seguían buenas prácticas de seguridad.
- La lógica del modelo no estaba alineada con el flujo real de DataTables server-side.
✅ Solución implementada
Se realizó una refactorización enfocada en robustez, compatibilidad y seguridad, logrando:
✔ Ordenamiento dinámico real
- Implementación de un whitelist de columnas permitidas.
- Construcción dinámica del
ORDER BYusando los parámetros enviados por DataTables.
✔ Búsqueda global correcta
- Uso exclusivo de
LIKE, compatible con MariaDB / MySQL. - Eliminación de
ILIKE, que es exclusivo de PostgreSQL. - Uso de bind parameters para prevenir SQL Injection.
✔ Paginación adecuada
- Uso correcto de:
LIMIT :start, :length - Totalmente compatible con el flujo estándar de DataTables.
✔ Separación clara de responsabilidades
- El archivo AJAX se encarga únicamente de generar el JSON.
- El controlador actúa como intermediario.
- El modelo concentra toda la lógica SQL.
Deja un comentario