Un sistema de ecommerce completo basado en Shopsys Platform con un sistema CRUD personalizado para gestión de productos y categorías.
- Características
- Requisitos del Sistema
- Instalación
- Configuración
- Migraciones de Base de Datos
- Sistema CRUD
- Uso del Sistema
- Estructura del Proyecto
- Desarrollo
- Solución de Problemas
- 🛍️ Sistema Ecommerce Completo - Basado en Shopsys Platform
- 📦 CRUD de Productos - Gestión completa de productos con campos personalizados
- 🏷️ Categorías Personalizadas - Sistema de categorías con jerarquía
- 🔧 Campos Personalizados - SKU, peso, dimensiones, fabricante, garantía, etc.
- 🎨 Interfaz Moderna - Admin panel responsive y fácil de usar
- 🔒 Seguridad - Validaciones y protección CSRF
- 📱 Responsive - Compatible con dispositivos móviles
- PHP 8.3 o superior
- Composer 2.0 o superior
- Docker y Docker Compose
- Node.js 18+ y npm
- Git
git clone https://github.com/idbetwill/ecommerce-php.git
cd ecommerce-phpgit submodule update --init --recursivecd project-base
composer install
npm install# Copiar configuración de Docker
cp docker/conf/docker-compose.yml.dist docker-compose.yml
# Configurar UID y GID para permisos correctos
echo "UID=$(id -u)" >> .env
echo "GID=$(id -g)" >> .env# Iniciar servicios esenciales
docker compose up -d postgres redis rabbitmq php-fpm webserver
# Esperar a que los servicios estén listos
sleep 10# Instalar dependencias
docker compose exec php-fpm composer install
# Descargar Phing
docker compose exec php-fpm php app/downloadPhing.php --phing-version=3.0.0
# Crear directorios
docker compose exec php-fpm php phing.phar dirs-create
# Instalar assets
docker compose exec php-fpm php phing.phar assets
# Generar traducciones
docker compose exec php-fpm php bin/console shopsys:translations:frontend:dump
# Compilar assets de frontend
docker compose exec php-fpm npm install
docker compose exec php-fpm php phing.phar npm-dev
# Configurar base de datos
docker compose exec php-fpm php phing.phar db-import-basic-structure
docker compose exec php-fpm php phing.phar db-migrations
docker compose exec php-fpm php phing.phar domains-db-functions-create
docker compose exec php-fpm php phing.phar domains-data-create
# Cargar datos de demostración
docker compose exec php-fpm php phing.phar db-fixtures-demo
# Generar URLs amigables
docker compose exec php-fpm php phing.phar friendly-urls-generateCrea un archivo .env.local en el directorio project-base:
# Base de datos
DATABASE_URL="postgresql://shopsys:shopsys@postgres:5432/shopsys"
# Configuración de la aplicación
APP_ENV=dev
APP_DEBUG=true
APP_SECRET=tu-clave-secreta-aqui
# Configuración de dominios
DOMAIN_URLS="http://localhost:8000"El archivo docker-compose.yml está configurado con los servicios esenciales:
- postgres - Base de datos PostgreSQL
- redis - Cache y sesiones
- rabbitmq - Cola de mensajes
- php-fpm - Servidor PHP
- webserver - Servidor web Nginx
El proyecto incluye migraciones personalizadas para agregar campos y tablas al sistema base de Shopsys.
-- Agrega campos personalizados a la tabla product
ALTER TABLE product ADD sku VARCHAR(255) DEFAULT NULL;
ALTER TABLE product ADD weight NUMERIC(10, 2) DEFAULT NULL;
ALTER TABLE product ADD dimensions VARCHAR(255) DEFAULT NULL;
ALTER TABLE product ADD manufacturer VARCHAR(255) DEFAULT NULL;
ALTER TABLE product ADD warranty_period VARCHAR(255) DEFAULT NULL;
ALTER TABLE product ADD is_featured BOOLEAN DEFAULT FALSE;
ALTER TABLE product ADD meta_title VARCHAR(255) DEFAULT NULL;
ALTER TABLE product ADD meta_description TEXT DEFAULT NULL;
ALTER TABLE product ADD meta_keywords TEXT DEFAULT NULL;
ALTER TABLE product ADD created_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL;
ALTER TABLE product ADD updated_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL;-- Crea tabla de categorías personalizadas
CREATE TABLE custom_product_category (
id INT NOT NULL,
parent_id INT DEFAULT NULL,
name VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL,
description TEXT DEFAULT NULL,
is_active BOOLEAN DEFAULT TRUE NOT NULL,
position INT DEFAULT 0 NOT NULL,
meta_title VARCHAR(255) DEFAULT NULL,
meta_description TEXT DEFAULT NULL,
meta_keywords TEXT DEFAULT NULL,
created_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
updated_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL,
PRIMARY KEY(id)
);
-- Crea tabla de relación muchos a muchos
CREATE TABLE product_custom_category (
product_id INT NOT NULL,
custom_product_category_id INT NOT NULL,
PRIMARY KEY(product_id, custom_product_category_id)
);# Ejecutar migraciones
docker compose exec php-fpm php bin/console doctrine:migrations:migrate
# Ver estado de migraciones
docker compose exec php-fpm php bin/console doctrine:migrations:status
# Generar nueva migración
docker compose exec php-fpm php bin/console doctrine:migrations:generateEl sistema CRUD incluye:
Product- Entidad base de Shopsys extendidaCustomProductCategory- Categorías personalizadas
ProductController- Gestión de productosCustomProductCategoryController- Gestión de categorías
ProductType- Formulario de productosCustomProductCategoryType- Formulario de categorías
admin/product/- Plantillas para productosadmin/category/- Plantillas para categorías
- ✅ Crear productos con campos personalizados
- ✅ Listar productos con paginación
- ✅ Ver detalles de productos
- ✅ Editar productos existentes
- ✅ Eliminar productos
- ✅ Marcar como destacado
- ✅ Asignar categorías personalizadas
- ✅ Crear categorías con jerarquía
- ✅ Listar categorías ordenadas
- ✅ Ver detalles de categorías
- ✅ Editar categorías existentes
- ✅ Eliminar categorías
- ✅ Activar/Desactivar categorías
- ✅ Reordenar categorías
- SKU - Código único del producto
- Peso - Peso en kilogramos
- Dimensiones - Largo x Ancho x Alto
- Fabricante - Marca o fabricante
- Período de Garantía - Tiempo de garantía
- Destacado - Producto destacado (checkbox)
- Meta Título - SEO title
- Meta Descripción - SEO description
- Meta Keywords - SEO keywords
- Fechas - Created at / Updated at
- Frontend: http://localhost:8000
- Admin Panel: http://localhost:8000/admin
-
Acceder a Productos:
- Ve a
/admin/products - Lista todos los productos
- Ve a
-
Crear Producto:
- Click en "Nuevo Producto"
- Completa el formulario
- Asigna categorías personalizadas
- Guarda el producto
-
Editar Producto:
- Click en el producto a editar
- Modifica los campos necesarios
- Guarda los cambios
-
Eliminar Producto:
- Click en "Eliminar"
- Confirma la acción
-
Acceder a Categorías:
- Ve a
/admin/categories - Lista todas las categorías
- Ve a
-
Crear Categoría:
- Click en "Nueva Categoría"
- Completa el formulario
- Asigna categoría padre (opcional)
- Guarda la categoría
-
Jerarquía de Categorías:
- Las categorías pueden tener categorías padre
- Soporte para múltiples niveles
- Ordenamiento por posición
ecommerce-php/
├── project-base/ # Submodule de Shopsys
│ ├── app/ # Aplicación principal
│ ├── src/ # Código fuente personalizado
│ │ ├── Controller/Admin/ # Controladores del admin
│ │ ├── Entity/ # Entidades personalizadas
│ │ ├── Form/Admin/ # Formularios del admin
│ │ ├── Repository/ # Repositorios
│ │ └── Migrations/ # Migraciones de BD
│ ├── templates/ # Plantillas personalizadas
│ │ └── admin/ # Plantillas del admin
│ ├── config/ # Configuración
│ ├── docker/ # Configuración Docker
│ └── docker-compose.yml # Servicios Docker
├── src/ # Tu código CRUD
├── templates/ # Tus plantillas
└── README.md # Este archivo
# Ver logs de servicios
docker compose logs -f php-fpm
docker compose logs -f postgres
# Acceder al contenedor PHP
docker compose exec php-fpm bash
# Limpiar cache
docker compose exec php-fpm php bin/console cache:clear
# Regenerar autoloader
docker compose exec php-fpm composer dump-autoload
# Ejecutar tests
docker compose exec php-fpm php bin/phpunit-
Crear Entidad:
docker compose exec php-fpm php bin/console make:entity -
Crear Controlador:
docker compose exec php-fpm php bin/console make:controller -
Crear Formulario:
docker compose exec php-fpm php bin/console make:form -
Generar Migración:
docker compose exec php-fpm php bin/console doctrine:migrations:generate
- Entidades: Extiende las entidades base de Shopsys
- Formularios: Crea formularios personalizados
- Plantillas: Modifica las plantillas Twig
- Rutas: Agrega nuevas rutas en
config/routes/
# Solucionar permisos
sudo chown -R $USER:$USER .
chmod -R 755 var/# Reiniciar base de datos
docker compose down
docker compose up -d postgres# Limpiar cache
docker compose exec php-fpm php bin/console cache:clear --env=prod# Recompilar assets
docker compose exec php-fpm npm run build# Ver logs de PHP
docker compose exec php-fpm tail -f var/log/dev.log
# Ver logs de Nginx
docker compose logs webserver
# Ver logs de PostgreSQL
docker compose logs postgres# Reiniciar todos los servicios
docker compose restart
# Reiniciar servicio específico
docker compose restart php-fpmSi encuentras problemas:
- Revisa los logs de los servicios
- Verifica la configuración de Docker
- Consulta la documentación de Shopsys
- Revisa los issues del repositorio
Este proyecto está basado en Shopsys Platform y sigue su licencia.
Este sistema te proporciona una base sólida para crear un ecommerce completo con funcionalidades personalizadas. ¡Explora, modifica y construye algo increíble! 🚀