Ver página de mantenimiento sin desactivar la tienda en Prestashop 1.7

En este ejemplo, vamos a realizar una pequeña guía (lo siento si se cuela alguna errata), que permitirá que nosotros podamos ver la página de mantenimiento, pero sin desactivar la tienda.

La idea es qué. mediante una dirección alternativa, nosotros podamos ver la página de mantenimiento para tener más facilidad a la hora de personalizarla.

Teníamos una guía pequeña para crear una página PHP en Prestashop 1.7, simplemente es importante leerla antes de seguir leyendo este artículo.

Lo primero, que vamos hacer es ver donde está la función que ejecuta la página de mantenimiento en Prestashop.

La función, la podemos encontrar en el fichero:

/classes/controller/FrontController.php

Aquí:


protected function displayMaintenancePage()
{
if ($this->maintenance == true || !(int) Configuration::get('PS_SHOP_ENABLE')) {
$this->maintenance = true;
if (!in_array(Tools::getRemoteAddr(), explode(',', Configuration::get('PS_MAINTENANCE_IP')))) {
header('HTTP/1.1 503 Service Unavailable');
header('Retry-After: 3600');

$this->registerStylesheet('theme-error', '/assets/css/error.css', ['media' => 'all', 'priority' => 50]);
$this->context->smarty->assign(array(
'shop' => $this->getTemplateVarShop(),
'HOOK_MAINTENANCE' => Hook::exec('displayMaintenance', array()),
'maintenance_text' => Configuration::get('PS_MAINTENANCE_TEXT', (int) $this->context->language->id),
'stylesheets' => $this->getStylesheets(),
));
$this->smartyOutputContent('errors/maintenance.tpl');

exit;
}
}
}

Lo que vamos hacer es sobreescribir la función en un nuevo controlador que habilitara el acceso a la página de mantenimiento desde una dirección alternativa.

En el fichero “NadieController.php” que lo vamos a guardar en el directorio: “/controllers/front

Vamos a dejarlo de la siguiente forma:


<?php
class NadieControllerCore extends FrontController
{
public $php_self = 'nadie';
public function init()
{
parent::init();
$this->displayMaintenancePage();
}

protected function displayMaintenancePage()
{
header('HTTP/1.1 503 Service Unavailable');
header('Retry-After: 3600');

$this->registerStylesheet('theme-error', '/assets/css/error.css', ['media' => 'all', 'priority' => 50]);
$this->context->smarty->assign(array(
'shop' => $this->getTemplateVarShop(),
'HOOK_MAINTENANCE' => Hook::exec('displayMaintenance', array()),
'maintenance_text' => Configuration::get('PS_MAINTENANCE_TEXT', (int) $this->context->language->id),
'stylesheets' => $this->getStylesheets(),
));
$this->smartyOutputContent('errors/maintenance.tpl');

exit;
}
}

Analizamos:


public function init()
{
parent::init();
$this->displayMaintenancePage();
}

Sobrescribimos función init, llamamos a la función padre y por último ejecutamos la función que hemos de mostrar la página de mantenimiento.

Si os fijáis en la función: “displayMaintenancePage” hemos quitado la condicional:

if ($this->maintenance == true || !(int) Configuration::get('PS_SHOP_ENABLE')) {
$this->maintenance = true;
if (!in_array(Tools::getRemoteAddr(), explode(',', Configuration::get('PS_MAINTENANCE_IP')))) {

Ahora ya podemos ver la página de mantenimiento desde la siguiente dirección:

tutienda.com/index.php?controller=nadie

Si queremos personalizar la dirección, visita el siguiente enlace: URL amigable en nueva página.

Ahora ha llegado el momento de personalizar la página de mantenimiento, ¿recordáis que teníamos una guía  personalizar tu página de mantenimiento en Prestashop 1.7?

Documento testeado en Prestashop 1.7.1.0