El módulo de Categorías permite organizar el catálogo de productos en grupos temáticos. Su estructura es deliberadamente sencilla: cada categoría tiene únicamente un identificador y un nombre, y la relación con los productos se gestiona a través de la clave foráneaDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/jpbarbatic/webapp/llms.txt
Use this file to discover all available pages before exploring further.
id_categoria definida en la tabla productos. El módulo ofrece un listado paginado, un formulario compartido de alta y edición, y un flujo de borrado con confirmación modal para evitar eliminaciones accidentales.
Modelo de datos
La tablacategorias define una estructura mínima. Está declarada con el cotejamiento utf8mb3_spanish_ci para ordenación correcta en español.
| Columna | Tipo | Notas |
|---|---|---|
id | int AUTO_INCREMENT | Clave primaria |
nombre | varchar(30) | Requerido |
ON DELETE SET NULL:
id_categoria pasa a NULL y quedan sin categoría hasta que se les asigne una nueva.
Rutas
| URL | Método | Archivo | Descripción |
|---|---|---|---|
categorias/ | GET | public/categorias/index.php | Listado paginado de categorías |
categorias/nuevo.php | GET | public/categorias/nuevo.php | Formulario de alta de una nueva categoría |
categorias/guardar.php | POST | public/categorias/guardar.php | Crea o actualiza el registro (insert/update) |
categorias/editar.php?id=N | GET | public/categorias/editar.php | Carga el formulario con los datos de la categoría |
categorias/borrar.php?id=N | POST | public/categorias/borrar.php | Elimina el registro y redirige al listado |
Listado
El controladorpublic/categorias/index.php genera el token CSRF de sesión, calcula la paginación manualmente y delega la consulta en db_select:
db_select devuelve las claves datos (registros de la página actual) y total (total de filas). La variable $total es consumida por html/paginacion.html.php para renderizar los controles de navegación.
La vista html/categorias/listado.html.php muestra una tabla con las columnas ID, Nombre y Acciones. Los registros se iteran bajo la variable $datos y cada fila incluye el botón de eliminar que abre el modal de confirmación Bootstrap pasando el id vía data-id:
Formulario
El formulario de alta (html/categorias/nuevo.html.php) y el de edición (html/categorias/editar.html.php) incluyen la misma plantilla parcial html/categorias/formulario.html.php.
El formulario envía sus datos por POST a categorias/guardar.php e incluye el campo oculto id (vacío en alta, con valor en edición):
$categoria no está definido (vista de alta), todos los campos aparecen vacíos. Cuando sí está definido (vista de edición), los campos muestran los valores actuales del registro.
Guardar
public/categorias/guardar.php comprueba si el campo id llega vacío o no para decidir entre insertar un nuevo registro o actualizar el existente. En ambos casos almacena un mensaje de confirmación en sesión y redirige a la vista de edición del registro resultante:
Borrar
public/categorias/borrar.php elimina el registro identificado por $_REQUEST['id'] mediante db_delete_by_id y redirige al listado. El código fuente actual pasa 'usuarios' como nombre de tabla en lugar de 'categorias'; esto es un bug en el código fuente que impide el borrado real de categorías:
html/confirmacion.borrado.html.php. Este componente Bootstrap muestra una advertencia de que la acción es irreversible y contiene un formulario POST con los campos ocultos id y csrf_token:
html/categorias/editar.script.php conecta el modal con el botón que lo activó. El evento show.bs.modal lee el atributo data-id del botón pulsado e inyecta ese valor en el campo oculto modalRecordId antes de que el modal sea visible:
Datos iniciales
El esquema SQL incluye las cinco categorías de ejemplo que pueblan el sistema en una instalación nueva:| ID | Nombre |
|---|---|
| 1 | Tecnología |
| 2 | Ropa y Modas |
| 3 | Hogar y Decoración |
| 4 | Deportes |
| 5 | Alimentación |
Estas categorías de semilla son solo datos de ejemplo para desarrollo y pruebas. En un entorno de producción se deben reemplazar o completar según el catálogo real de la tienda.