🧩 Desarrollo de Modulos
Guia completa para crear modulos PrestaShop desde cero hasta produccion. Cubre la estructura basica, controladores, templates, servicios Symfony, testing y publicacion en Addons Marketplace.
Genera tu modulo automaticamente
Usa el Generador de Modulos para crear la estructura completa en segundos. Configura hooks, controladores y formularios con un wizard interactivo.
📁
Estructura del modulo
Directorios, archivos, convenios y estructura completa de un modulo PS
📄
Archivo principal
mymodule.php: propiedades, install(), uninstall(), getContent() y hooks
📝
Formularios de configuracion
HelperForm: todos los tipos de campo, estructura, guardado y validacion
⚙️
Admin Controllers
Legacy AdminController y moderno FrameworkBundleAdminController con Symfony
🖥️
Front Controllers
ModuleFrontController: paginas publicas, AJAX, templates Smarty
🔧
Servicios y DI
config/services.yml, inyeccion de dependencias, event listeners
🗺️
Routing
config/routes.yml, generacion de URLs con Router, _legacy_link
⬆️
Scripts de upgrade
Directorio upgrade/, install-x.y.z.php, migraciones SQL y PHP
🗄️
Doctrine ORM
Entidades, repositorios, migraciones, Query Builder en modulos PS
📊
Sistema Grid (PS 1.7+)
GridDefinition, columnas, acciones, filtros, DataProvider
🌍
Sistema de traducciones
$this->trans(), .xlf, extraccion, dominios y Twig trans()
🧪
Testing de modulos
PHPUnit, mocks de clases PS, test de install/hooks, CI
✅
Buenas practicas
Performance, seguridad, compatibilidad, requisitos Addons Marketplace
Estructura minima de un modulo
mymodule/mymodule.php
php
<?php
if (!defined('_PS_VERSION_')) {
exit;
}
class MyModule extends Module
{
public function __construct()
{
$this->name = 'mymodule';
$this->tab = 'front_office_features';
$this->version = '1.0.0';
$this->author = 'Tu Nombre';
$this->need_instance = 0;
$this->bootstrap = true;
$this->ps_versions_compliancy = [
'min' => '1.7.0',
'max' => _PS_VERSION_,
];
parent::__construct();
$this->displayName = $this->trans('Mi Modulo', [], 'Modules.Mymodule.Admin');
$this->description = $this->trans('Descripcion.', [], 'Modules.Mymodule.Admin');
}
public function install(): bool
{
return parent::install()
&& $this->registerHook('displayHome');
}
public function hookDisplayHome(): string
{
return $this->display(__FILE__, 'views/templates/hook/displayHome.tpl');
}
}