Estructura¶
Inicialización de las páginas¶
Un controlador hereda de FrontController para páginas del Frontend o bien de ModuleFrontController para páginas del backend.
El punto de entrada está en el fichero index.php en la raíz del proyecto. Este fichero busca el controlador requerido lo instancia y le pasa los parámetros que correspondan con una llamada al método dispatch de la clase Dispatch.
# Instanciar controlador
try {
# Instanciar controlador
$controller = Controller:getController($controller_class);
# Lanzar hook del dispatcher
if ( isset($params_hook_action_dispatcher) ) {
Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
}
# Ejecutar el controlador
$controller->run();
}
catch(PrestashopException $e) {
$e->displayMessage();
}
Además en esta inicialización se cargan también los siguientes ficheros que incializan configuraciones del servidor.
defines.inc.php: | |||||||
---|---|---|---|---|---|---|---|
Define constantes |
|||||||
settings.inc.php: | |||||||
Información sobre la base de datos, fecha de instalación y claves |
|||||||
autoload.php: |
|
||||||
defines_uri_inc.php: | |||||||
Constantes para obtener URLS de varias carpetas (modulos, carpetas de js, css, etc) |
|||||||
smarty.config.inc.php: | |||||||
Define variables de Smarty:
|
Context¶
El objeto singleton Context también es inicializado en casi todas las clases y controladores y contiene información importante sobre el usuario actual y almacena multitud de objetos:
- Carrito del cliente
- Customer
- Cookie
- Link
- Country
- Employee
- Controller
- Language
- Currency
- AdminTab
- Shop
- Smarty
- mobile_detect
Autoload¶
require_once(dirname(__FILE__).'/alias.php');
require_once(dirname(__FILE__).'/../classes/Autoload.php');
spl_autoload_register(array(Autoload::getInstance(), 'load'));
Las clases se cargan de los directorios en este orden:
- classes/
- override/classes/
- controllers/
- override/controllers/
Todos los ficheros de esas carpetas se autocargarán. Para mejorar el rendimiento se puede crear un fichero de caché cache/class_index.php con un array asociativo clave => valor siendo clave el nombre de la clase y valor la ruta al fichero.
array(
'DbCore' => 'classes/db/Db.php',
);
Para entender mejor como funciona ver la clase Autoload y su método Autoload::load().
Rutas¶
La clase Dispatcher contiene un array con las rutas por defecto y reglas. Para entender mejor como funciona ver la clase Dispatcher y los métodos loadRoutes y addRoute.
Desde la versión 1.5.3 es posible añadir URLs personalizadas. Por ejemplo, dado el módulo mimodulo que contiene dos funciones principales:
- Mostrar una página con una lista de comandos disponibles
- Ver detalles de un pedido
- Página de lista de comandos:
- Detalle de un pedido:
La idea de este tipo de URLs es que sean limpias y claras y SEO Friendly, pero aún así, las URLs se ven un poco raras. Desde la mencionada versión 1.5.3 podemos reescribir las URL para que queden así:
Nada que ver. Para personalizarlas debes ir a Preferencias -> SEO -> URLs -> Schema para ver las personalizaciones que puedes realizar. Debes tener también las Friendly Url’s activadas.
Estructura de la página¶
En todas las páginas el controlador llama a las plantillas header.tpl, footer.tpl, así como a la plantilla del cuerpo. La clas FrontendController es responsable de mostrar diferentes frontales en la página.
En él se definen diferentes variables para smarty y se lanzan diversos hook: displayHeader, displayTop, displayLeftColumn, displayRightColumn, displayMobileHeader, displayFooter, actionFrontControllerSetMedia, DisplayOverridTemplate.
Podemos enganchar cualquier plantilla a estos ganchos y hacer que nuestro contenido aparezca ahí de forma muy sencilla.